我已将 CANopenNodeStack 与基于 STM32 FreeRTO 的代码集成。下面是我的代码
这是我用于 STM32 的 CANopenNode 堆栈的存储库 https://github.com/CANopenNode/CanOpenSTM32/tree/master
void canopennode_mtr(void* argument) {
uint32_t ticks = osKernelGetTickCount();
canopen_init();
while (1) {
canopen_app_process();
}
// Sleep for 1ms, you can decrease it if required, in the canopen_app_process we will double check to make sure 1ms passed
ticks += 1;
osDelayUntil(ticks);
}
}
void canopen_init(void) {
//Assign CANOpenNode parameters
CANopenNodeSTM32 canOpenNodeSTM321;
canOpenNodeSTM321.CANHandle = &hcan1;
canOpenNodeSTM321.HWInitFunction = MX_CAN1_Init;
canOpenNodeSTM321.timerHandle = &htim14;
canOpenNodeSTM321.desiredNodeID = 0x11;
canOpenNodeSTM321.baudrate = 500;
canopen_app_init(&canOpenNodeSTM321);
}
CANopenNodeSTM32* canopenNodeSTM32;
是一个在初始化期间归档的变量,它位于堆中。当我输入 canopen_app_process
(canopen_app_process
是 CANopenNode 堆栈中的函数)时,该变量重置为 0。
我的问题是 freeRTOS 中有一个明显的原因需要重置堆,还是我遗漏了一些东西?
注意:我不是问特定于 CANopenNode Stack 的问题,我只是想了解堆变量重置的一般原因
你找到问题的解决办法了吗?我也面临同样的问题