2014-10-09 8 views
2

MSP-GCC 컴파일러와 함께 최신 CCS를 사용하고 있습니다. 의 TI에 의해 최신 공식적으로 지원 방법은 다음 코드MSP430 msp-gcc가있는 인터럽트 루틴이 컴파일되지 않습니다.

#pragma vector=USCI_A1_VECTOR 
__interrupt void USCI_A1_ISR(void) 
{...isr} 

ISR-S가 작동하지 않는 선언, 나는 다음과 같은 컴파일러 메시지를 얻을 :

warning: ignoring #pragma vector [-Wunknown-pragmas] 
#pragma vector=USCI_A1_VECTOR 
^ 
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' 
__interrupt void USCI_A1_ISR(void) 
나는 또한 시도

다른 방법, 등이 :

c:/ti/ccsv6/ccs_base/msp430/include_gcc/msp430f5529.h:5328:33: error: expected declaration specifiers or '...' before '(' token 
#define USCI_A1_VECTOR   (47)      /* 0xFFDC USCI A1 Receive/Transmit */ 
           ^
../uart_printf.c:40:11: note: in expansion of macro 'USCI_A1_VECTOR' 
interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void) 
     ^
: 오류를 범

interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void) { //code goes here} 

__attribute__((interrupt(USCI_A1_VECTOR))) 
void USCI_A1_ISR(void){ //code goes here } 

를 내가 여기 실종 무엇 : 17,451,515,

이 비록 작동하는 것 같다?

답변

5

인터럽트 루틴 선언 (진짜 pitty)에 대한 C 표준은 없습니다. 각 컴파일러는 자신 만의 방법을 가지고 있습니다.

TI는 지난 달 RedHat MSP430 GCC를 다시 불러 들여 조사 할 시간이 없었다. 그러나 이전 MSPGCC 지점의 경우 마지막 예제가 유효해야합니다.

MSPGCC 또한 더 나은 컴파일러 상호 운용성에 대한 포함 파일 제공 :

#include <isr_compat.h> 

ISR(USCI_A1, USCI_A1_ISR) 
{ 
    // Code goes here 
} 

중요 :는 ISR 이름

에서 '_VECTOR'꼬리를 제거 isr_compat.h 살펴보십시오을 파일. 실제로 시장에 나와있는 모든 컴파일러에서 작동하도록 설계되었습니다. 아마 컴파일러에서 비슷한 것이 없다면 프로젝트에 빌릴 수 있습니다.