STM32CubeMx LL库BUG之一

发布时间 2023-07-21 09:00:28作者: SymPny

STM32CubeMx是目前最新的V5.5
STM32F407,输出LL库,使用FreeRTOS
任务堆栈大小错误: 在STM32CubeMx上任务堆栈的单位是word,即4个byte。但是实际上这里的单位是byte,就是说你设置256的话(即1024 bytes),实际上给你生成的代码只有256byte,这可能导致任务堆栈溢出,发生各种各样的问题,最常见就是HardFault。 查看osThreadNew函数,发现里面有一句:

/* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports.       */
        /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
        stack = attr->stack_size / sizeof(StackType_t);
  • 1
  • 2
  • 3

其中sizeof(StackType_t)=4,也就是说,这个函数里面又给除了个4,导致实际的堆栈大小是你所设置的4分之一。
如果说那我就在STM32CubeMx多设4倍不就正好了吗,但这样也不行,因为STM32CubeMx里还是按word来算总的堆栈大小,如果你每个任务都设4倍,总堆栈可能会超过可用RAM,导致无法生成代码。
所以只能把stack = attr->stack_size / sizeof(StackType_t);改为stack = attr->stack_size ,但是每次生成代码后又会覆盖,每次生成代码都要再改一遍。
这个BUG在用HAL和LL库都有。