我有一个函数(见下文),不管我尝试什么(timer3或 UCRXIFG 检查),我最终会进入一个永远的循环,而这一循环不会回到状态机的响应部分...有人能告诉我缺少什么吗??
#include #include #include #include "rc.h" #include "LPRSnot.h" char* radioReg (char * p){ 字符 f; 放射性状态; const char * configAck ="ack"; 字符响应[10]={0}; char *pResponse; uint8_t 长度; 长度= strlen (p); 状态= CMD; pResponse =响应; /* *将无线电命令分类为3个单元中的1个 * 如果(*(p +(length - 2))="T")||(*(p +(length - 3))='N')||(*(p +(length - 3))='L')) f = 2; 否则、如果(*(p +(length - 1))='?') f = 1; 其他 f = 0; while (state!= done){ 开关(状态){ 案例 CMD: TX = T;ACK = F; UCA1TXBUF =(* p); UCA1IE |= UCTXIE; _bis_SR_register (LPM3_bits + GIE); *(p++); 如果(*p ='\0'){ UCA1IE &=~UCTXIE; if ((f ==2)||(f ==0)) STATE =回波; 其他 状态=响应; } 中断; 外壳回波: TX = F;ACK = F; if (howMany < length) _bis_SR_register (LPM3_bits + GIE); 否则{ howMany = 0; P = CONFIGACK; PRx =传入; 状态= ACK; } 中断; 案例 ACK: TX = T;ACK = T; UCA1TXBUF =(* p); UCA1IE |= UCTXIE; _bis_SR_register (LPM3_bits); *(p++); 如果(*p ='\0'){ UCA1IE &=~UCTXIE; P =*(configCmd); 如果(f = 0){ 状态=完成; } 否则{ 状态=响应; } /* *让 Rx 有机会进行响应 * RESPONSE...最长的响应是17个字符 *在19200波特或8.85ms +大约3.5ms 时 * ACK 后的延迟=~12.5ms...定时器置1 以在20ms 后唤醒 */ // _bis_SR_register (LPM3_bits); } 中断; 案例响应: TX = F;ACK = F; memset (传入、0、20); TB3CTL |= MC__UP; TB3CCTL0 |= CCIE; if ((!timerExpired)){//(UCA1IFG & UCRXIFG) _bis_SR_register (LPM3_bits); } 否则{ PRx =传入; howMany = 0; memcpy (响应、传入、sizeof (传入)); 状态=完成; } 中断; 案例完成: 中断; 默认值:break; } } 返回 pResponse ;}