tinycrypt库 VLA 动态数组 引发的C库初始化阶段问题(BEAB BKPT 0xAB)

背景:

硬件:cortexM0 mcu
开发环境:keil V5
软件:rt-thread,tinycrypt-0.2.8

现象

启动阶段卡死在 BEAB BKPT 0xAB 处(通过keil调试),通过call stack发现是c库初始化阶段问题:
call stack:

_ttywrch
__default_signal_display
__rt_SIGTMEM_Inner
__rt_SIGRTMEM
_init_alloc
一般这种情况是调用了malloc,free,alloc等接口。一般是调用rtthread的rt_malloc, rt_free等接口。但是通过查找整个工程代码,愣是没有发现哪里有调用malloc等接口。

通过回忆最近一次正常后所作的修改,初步定位到和使用tinycrypt库的hmac以及sha256有关系。通过注释相关调用,可以正常启动了。基本确定是tinycrypt库的问题。但是查找库的代码,还是没有发现有使用动态内存的地方。一度不知如何排查,陷入自我怀疑中。

把问题现象,怀疑点输入AI(augment code),一次问答就定位到了问题所在,tc_hmac_set_key有使用VLA(Variable Length Arrays,可变长度数组),事实上armcc编译器会通过malloc来实现。找到了问题,就比较好解决了。augment也推荐了一些解决方案。吐槽下trae,同样的问题,trae一顿输出,就是不对。都是用claude4,差别怎么这么大。我的感觉是augment的上下文较多,code engine也很强大,给AI的输入很精准。当然,augment也比较贵,不过和节省的时间比,还是值得的。


解决方案

1. 在编译选项加上--no_vla,禁止使用变长数组。使用变长数组是非常不安全的做法
2. 把tc_hmac_set_key改成动态申请内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值