- IAR MCS-51 에서 Timer Interrupt 가 호출되지 않는 문제.
- 분류없음
- 2011/11/16 10:53
- 8051, 8052, iar, interrupt, MCS-51, timer
열심히 삽질하였다....
그리고, 하다하다 안되서 Linker listing 을 확인해 보니 Timer Interrupt 코드가 링크되지 않는 문제를 발견하였다.
문제의 발단 :
정말 아무생각 없이.... 정말 평소에는 나만의 명명규칙으로 이름을 잘 짓다가 정말 아무생각 없이 인터럽트 함수를 'TIMER0', 'TIMER1' 이라고 지었다. (요즘 내가 정신이 탈출한 상태다.)
#pragma vector=timer0평소같았으면 내가 고정으로 사용하는 "Timer_InterruptN" 이라는 명명을 하였을 텐데, 정말 아무생각 없었다.
__interrupt void TIMER0(void)
{
... 블라블라 ...
}
#pragma vector=timer1
__interrupt void TIMER1(void)
{
... 블라블라 ...
}
그 결과 :
Global Interrupt 만 Enable 하면 시스템이 얼어버린다.
당연히 얼 수 밖에 없는게, 인터럽트가 발생해서 호출은 해야 겠는데 그 호출을 받을 함수가 링킹되지 않아버리니 중간에 떠버린 상태인 것이다.
Aㅏ................... 경고조차 없는 멋지고 깔쌈한 내 프로그램이 돌지 않는다니....
해결 방법 :
함수 이름을 바꾸었다. 그리고 빌드..., 그리고 Linker listing 을 확인해보니
아마도 IAR MCS-51 에서 TIMER0, TIMER1 과 같은 이름은 사용할 수 없는 것으로 보인다. (하지만 IAR 메뉴얼에는 관련 내용을 찾을 수 없다.)
교훈 :
분명 문제가 없는데 변수의 값이나 함수 호출에 문제가 발생한다.
Linker listing 생성을 활성화 하고 확인하도록 하자!





Recent comment