我的程序包含很少的全局变量,它们的值是在中断服务程序 (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