突然发现个隐患。。。这段代码
while(1) {
if(textInFIFO.GetCurSize()==32) // 检查有无接收到数据,如果有,就进行处理
{
green = !green; // 有数据传输,翻转绿灯示意
for(int i=0; i<32; i++) // 读缓冲区
textInFIFO>>buffer;
timer2.Counter(DISABLE); // 关闭超时计数
timer2.SetCounter(0); // 清零计数器
WirelessWaitReady();
TX_Mode(); // 配置为发送模式
NRF24L01_TxPacket((u8*)buffer);
RX_Mode(); // 配置回接收模式
}
else if(!textInFIFO.IsEmpty()){// 如果缓冲区中有内容,启动超时计数
timer2.Counter(ENABLE);
}
....
}
应该改成:
while(1) {
if(textInFIFO.GetCurSize()==32) // 检查有无接收到数据,如果有,就进行处理
{
timer2.Counter(DISABLE); // 关闭超时计数
timer2.SetCounter(0); // 清零计数器
if(textInFIFO.GetCurSize()==32) { // 重新验证
green = !green; // 有数据传输,翻转绿灯示意
for(int i=0; i<32; i++) // 读缓冲区
textInFIFO>>buffer;
WirelessWaitReady();
TX_Mode(); // 配置为发送模式
NRF24L01_TxPacket((u8*)buffer);
RX_Mode(); // 配置回接收模式
}
}
和中断共享的变量要小心。。。虽然这些情况几乎是不可能发生的。。。
|