- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过 UART 与其他设备通信。我通过向设备发送命令来请求某些信息。我会重复该命令,直到收到可用的答案。
我遇到的问题是,当您处理静态和已知字符串长度时,我使用的 ISR 工作正常。但在这种情况下,我收到的字符串可能随时具有不同的长度。取决于例如如果设备有错误,则亮起。假设前 5 个请求导致错误字符串比预期长度短或长。在尝试 6 时,它确实产生了具有预期长度的字符串,(软件)缓冲区似乎以某种方式损坏了。字节不在正确的位置,例如某些帧问题。
这就是我现在的 ISR:
void UART1RXInterrupt() iv IVT_ADDR_U1RXINTERRUPT {
uart_rd2[LoopVar0] = UART1_Read();
LoopVar0++;
if (LoopVar0 >= q) //Fill array until certain lenght
{
LoopVar0 = 0;
ready0 = 1;
}
if (U1STA.OERR = 1)
{
U1STA.OERR = 0;
U1STA.FERR = 0;
}
U1RXIF_bit = 0;
}
以及我在主代码中处理它的方式:
UART1_Write_Text("A"); //Command
if (ready0 == 1)//Data received
{
if (uart_rd2[0] == 0x4F && uart_rd2[1] == 0x4B) //Check message ID
{
//Found answer that I was looking for
}
ready0 = 0;
}
else
delay_ms(2000); //Wait and try again
}
我的代码应该如何设置才能更好地处理这种情况?
最佳答案
在中断例程中,当 LoopVar0 >= q
时,您重置队列索引 LoopVar0 = 0
并设置标志 ready0 = 1
来处理main() 中的队列数据。问题是,如果在 main() 中处理队列之前处理新中断,它们将覆盖队列内容。实现 circular queue每当队列的开头不等于结尾时,您都会在 main() 中处理该事件。这将使您有时间处理所有传入的数据。
关于c - MikroC、dsPIC UART 接收中断问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18695971/
我有一个 dsPIC33F,同时以 10 位从两个 ADC channel 收集数据。我使用定时器以 64Hz 采样,并将 ADC 设置为自动采样,但手动转换。每次轮询定时器中断时,我都会清除采样位,
尝试让 KissFFT 定点实现与 DSPIC 保持一致。问题是 Kiss 中的定点实现是真正的定点,但 dspic 在 40 位寄存器中进行乘法和求和,然后在舍入后向下移动到 16 位。 KissF
我正在通过 UART 与其他设备通信。我通过向设备发送命令来请求某些信息。我会重复该命令,直到收到可用的答案。 我遇到的问题是,当您处理静态和已知字符串长度时,我使用的 ISR 工作正常。但在这种情况
我是一名优秀的程序员,十分优秀!