'iar'에 해당되는 글 2

  1. 2011/11/16 IAR MCS-51 에서 Timer Interrupt 가 호출되지 않는 문제.
  2. 2006/11/28 IAR 에서 외부에디터(External Editer) 사용하기

IAR MCS-51 에서 Timer Interrupt 가 호출되지 않는 문제.

크리에이티브 커먼즈 라이선스
Creative Commons License

열심히 삽질하였다....

그리고, 하다하다 안되서 Linker listing 을 확인해 보니 Timer Interrupt 코드가 링크되지 않는 문제를 발견하였다.

문제의 발단 :

정말 아무생각 없이.... 정말 평소에는 나만의 명명규칙으로 이름을 잘 짓다가 정말 아무생각 없이 인터럽트 함수를 'TIMER0', 'TIMER1' 이라고 지었다. (요즘 내가 정신이 탈출한 상태다.)
#pragma vector=timer0
__interrupt void TIMER0(void)
{
... 블라블라 ...
}

#pragma vector=timer1
__interrupt void TIMER1(void)
{
... 블라블라 ...
}
평소같았으면 내가 고정으로 사용하는 "Timer_InterruptN" 이라는 명명을 하였을 텐데, 정말 아무생각 없었다.

그 결과 :

Global Interrupt 만 Enable 하면 시스템이 얼어버린다.

당연히 얼 수 밖에 없는게, 인터럽트가 발생해서 호출은 해야 겠는데 그 호출을 받을 함수가 링킹되지 않아버리니 중간에 떠버린 상태인 것이다.

Aㅏ................... 경고조차 없는 멋지고 깔쌈한 내 프로그램이 돌지 않는다니....

해결 방법 :

함수 이름을 바꾸었다. 그리고 빌드..., 그리고 Linker listing 을 확인해보니

생겼다!!!!!

아마도 IAR MCS-51 에서 TIMER0, TIMER1 과 같은 이름은 사용할 수 없는 것으로 보인다. (하지만 IAR 메뉴얼에는 관련 내용을 찾을 수 없다.)

교훈 :
분명 문제가 없는데 변수의 값이나 함수 호출에 문제가 발생한다.
Linker listing 생성을 활성화 하고 확인하도록 하자!
저작자 표시 비영리 동일 조건 변경 허락
Trackback 0 Comment 0

IAR 에서 외부에디터(External Editer) 사용하기

크리에이티브 커먼즈 라이선스
Creative Commons License
뭐 팁이라고 하기엔 큰 건 아니지만 팁일 수도 있다.

DDE(Dynamic Data Exchange)  를 이용하는 방법도 있지만 지원하는 에디터도 별로 없고, IAR 이 크게 지원하는 것도 없어 Command Line 방식을 사용하기로 한다.

외부 에디터 사용이란 기능이 뭐 대단한 건 아니다.  평소 코딩할 때 프로젝트 파일 트리 창에서 파일을 더블클릭 하면 자신이 사용하는 에디터를 사용하여 편집할 수 있도록 자동 실행해 준다.

편하면 쓰고 불편하면 안쓰는 기능이다.

해당 기능 설정은 다음 위치에 있다.
Tools > Option > External Editor > Use External Editor 체크 > 설정사항 입력.

* UltraEdit 를 사용하는 방법.
UltraEdit 는 DDE 를 이용할 수 있지만 별로..........
일단 IAR 에서
Type : Command Line
Editor : UltraEdit 의 경로와 실행파일 선택.
Arguments : $FILE_PATH$

* Source Insight 에서 사용하는 방법.
Type : Command Line
Editor : UltraEdit 의 경로와 실행파일 선택.
Arguments : -i +&CUR_LINE& $FILE_PATH$

Source Insight 에서는 -i 옵션을 붙이지 않으면 새로 프로그램을 실행하여 보여준다.
+$CUR_LINE$ 을 붙여야 오류 라인 추적이 가능하다.
Trackback 2 Comment 0