【发布时间】:2016-12-07 08:22:39
【问题描述】:
我正在使用 C 语言并尝试与使用串行通信的设备进行通信。我正在读取一个字节并将其存储在一个数组中,然后将数组元素检查到'\0'(0x00)。如果是'\0',则表示数据现在不可用。
volatile int rxFlag = 0;
volatile int index = 0;
void function() //event based function, whenever a byte is received
{
Rx[index] = ReadUSART(); //reading a byte
if(Rx[index] == '\0' ) //checking if its null
{
rxFlag = 1; //raise a flag
}
index++; //increment index
}
下面是 Rx 的截图:
在图像中,您可以看到来自Rx[0]-Rx[24] 的数据,但Rx[25] 是一个空终止符(0x00)并且rxFlag 应该设置为1。但它没有设置。
检查数组元素是否为'\0'的另一种方法是什么。
【问题讨论】:
-
您是否尝试过添加简单的调试代码来查看
Rx[25]的输出结果? -
您截屏时的
index值是多少?看来您收到了25字符,所以最后检查的是Rx[24].... -
您可以简单地检查
if (!Rx[index]) rxFlag = 1;,因为nul-character'\0'的数值为0。 -
对不起。我使用了错误的代码。它不是 while(1) 它是一个基于事件的函数,只要接收到数据就会触发。我面临的问题是,当接收到的字节是最后一个字节时,它会被接收并且索引会增加,但因为它是最后一个字节,所以事件不会再次触发,因此它不会检查空字符。
-
你能告诉我们
rxFlag的声明吗?