进入新函数时,CANOpenNode 堆栈堆变量会重置

问题描述 投票:0回答:1

我已将 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 的问题,我只是想了解堆变量重置的一般原因

c embedded can-bus freertos canopen
1个回答
0
投票

你找到问题的解决办法了吗?我也面临同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.