私のプログラムには、割り込みサービス ルーチン (USCI_A0_ISR()) の実行中に値が設定されるグローバル変数がほとんど含まれていません。
USCI_A0_ISR() の実行が完了すると、グローバル変数は割り当てられた値を保持しますか、それとも void/0 に戻されますか????
//Global variables
int ptr = 0;
char rxBuffer[16];
int flag = -1;
int check[2];
void __set_flag(void)
{
if (strcmp(rxBuffer,"OK") == 0) flag = 0;
else if (strcmp(rxBuffer,"CONNECT") == 0) flag = 1;
else if (strcmp(rxBuffer,"NO CARRIER") == 0) flag = 3;
else if (strcmp(rxBuffer,"ERROR") == 0) flag = 4;
}
void __GSM_client(void)
{
while (flag == -1);
if (flag == 0) check[0] = buflen(rxBuffer);
}
void main(void)
{
__Buffer_init();
__low_level_init(); //WDT
__UART0_init(); //UART
__bis_SR_register(GIE); //interrupts enabled
__delay_cycles(1000); // wait till UART intial
__GSM_client();
__no_operation(); // For debugger
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
char byte;
while (!(UCA0IFG&UCTXIFG));
byte= UCA0RXBUF;
UCA0TXBUF = byte;
if (byte == '\r') {
//push_char(byte);
ptr = 0;
__set_flag();
//__Buffer_init();
}
else{
push_char(byte);
}
}
これが私がやっていることのコードスニペットです。"flag"
得られたレスポンスをもとに設定しています。Code Composer Studio でレジスタ ビューを見ると、"flag"
値は正しく設定されていますが、別の"flag"
場所の値を使用しようとすると の値"flag "
が反映されません。
割り込みサービスルーチンの概念に関するポインタ、またはコーディング方法の抜け穴が評価された場合 事前に感謝します AK