【问题标题】:Error checking array element to null错误检查数组元素为空
【发布时间】:2016-12-07 08:22:39
【问题描述】:

此问题可能与此question 或此question 重复

我正在使用 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的声明吗?

标签: c arrays null element


【解决方案1】:

你在分配 rxFlag 时有一个错字。

rxFlag == 1;

应该是

rxFlag = 1;

【讨论】:

  • 很好,有趣的是,人类的思维是多么容易犯错
  • 我们都去过那里:)
  • 您的代码从这里看起来不错,尽管我看不到正在读取/对 rxFlag 做出反应。
  • volatile 语句不是必需的,除非您有一些特殊的东西,例如更新它们的中断例程,在这种情况下,编译器可能会在没有 volatile 的情况下进行一些不需要的优化。
  • @PaulHK 我使用了 volatile,因为它在中断内部。
猜你喜欢
  • 2017-09-05
  • 2015-08-09
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2019-05-14
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多