我遇到了将命令写入命令缓冲区的情况。当命令缓冲区中的命令被执行时,该命令被处理并从UART发送到另一个子系统。处理命令时,需要从UART发送的数据存储在队列中,并引发标志。然后在我的主while循环检查以查看是否已经引发该标志之后不久,如果是,则将数据发送出UART。但是,在处理命令的时间和准备发送UART的时间之间,阵列被破坏。我知道这是因为我正在使用在线调试器并设置断点。世界上到底发生了什么,我该如何解决这个问题?
这是发生的事情的一个例子:
在队列中处理和存储之后(a[]
是队列):
a[0] = 0x3;
a[1] = 0x6;
a[2] = 0x9;
在它准备好发送UART之前:
a[0] = 0x3;
a[1] = 0x6;
a[2] = 0x0;
或有时甚至,
a[0] = 0x3;
a[1] = 0x0;
a[2] = 0x0;
行为是随机的。有时只有一个字节被破坏,有时只有两个字节。
答案 0 :(得分:0)
在字节上设置监视。这样,当有人写入调试器时,调试器就会停止。
答案 1 :(得分:0)
听起来像记忆涂鸦。那里的其他东西意外地访问了你的阵列的内存。这可能是由于指向释放内存的指针未设置为NULL或可能是某些硬件写入同一内存。没有更多信息就不可能说。