STM32CubeMx LL库BUG之一

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);

其中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库都有。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值