我有一个 ISR,它增加了一个数组的变量“头”。问题是几个小时后,这个变量即使在增加之后也会恢复到以前的值。就像是:
array[head] = val;
head++;
/*val is the byte that came from ISR and I am assigning it to my buffer 'array' at head position*/
现在,当我运行代码几个小时时,我观察到如果 head 是 119,则存储来自 ISR 的字节,变为 120,并且在下一个中断时,而不是将下一个字节存储在 120 并将 head 增加到 121,head 再次变为 120并覆盖我数组中的那个字节。可能是什么问题呢?欢迎任何建议!
笔记:
- head 是一个易变的变量。
- 中断速度非常快。
代码片段:
/*before storing on to the circular buffer check whether it is full*/
if ((COM1RxBufHead == COM1RxBufTail - 1) ||((COM1RxBufHead == (COM1RXBUFSIZE - 1)) && (COM1RxBufTail == 0)))
{
logDEBUG("[FULL]");
U1STAbits.OERR = 0;
return;
}
else
{
/* Byte can be safely stored on to buffer*/
COM1RxBuf[COM1RxBufHead] = U1RXREG;
if (COM1RxBufHead == (COM1RXBUFSIZE - 1))
{
COM1RxBufHead = 0;
}
else
{
COM1RxBufHead++;
}