主题中讨论的其他器件:HALCOGEN
您好!
在我们的应用中、我们在 halcogen 中配置了一些 DCAN1消息框。
在运行期间、根据要发送的 CAN ID、我们循环查看消息框并找到具有正确 CAN ID 的消息框。
这是使用 halcogen 中的`canGetID`函数完成的。
最近、我们对 RTOS 任务进行了一些更改(halcogen 生成的代码相同)、自此之后、我们在识别正确消息框方面存在问题。
因此、使用错误的 CAN ID 发送消息有效载荷。
为了模拟该问题、我创建了一个测试函数来循环查看所有消息框并在启动时读取所有 CAN ID。
以下是该读取的代码(从 halcogen 获得灵感):
for (curr_msg_box = 1; curr_msg_box < 10U; curr_msg_box++) {
if((curr_msg_box % 2) == 0) {
/** - Wait until IF2 is ready for use */
while ((canREG1->IF1STAT & 0x80U) ==0x80U)
{
} /* Wait */
canREG1->IF1CMD = 0x20U;
canREG1->IF1NO = (uint8) curr_msg_box;
while ((canREG1->IF1STAT & 0x80U) ==0x80U)
{
} /* Wait */
curr_id32 = (canREG1->IF1ARB & 0x1FFFFFFFU);
} else {
/** - Wait until IF2 is ready for use */
while ((canREG1->IF2STAT & 0x80U) ==0x80U)
{
} /* Wait */
canREG1->IF2CMD = 0x20U;
canREG1->IF2NO = (uint8) curr_msg_box;
while ((canREG1->IF2STAT & 0x80U) ==0x80U)
{
} /* Wait */
curr_id32 = (canREG1->IF2ARB & 0x1FFFFFFFU);
}
idList[curr_msg_box] = curr_id32;
idListShifted[curr_msg_box] = ((curr_id32 >> 18) & 0x7FF);
}
我在此运行期间注意到一些奇怪的行为、如果我逐步全面执行此代码、我将按预期读取所有 CAN ID (请参考快照):

但是、如果我运行一段代码、结果如下:

您可以看到、CAN ID 位置会发生移位。
您能帮助我解决这个问题吗?
