打印
[学习资料]

程序调试经验2

[复制链接]
653|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中国龙芯CDX|  楼主 | 2023-3-16 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,程序在一个阻塞函数没有出结果之前跳过了该函数直接运行下一个函数!
结果:函数内的临时枚举变量没有给定初始值,此变量有可能在函数一进去被初始化为枚举内一个正确的结果值,而实际上我们期望的是一个等待值。

2,IAR中程序在运行到某个函数时复位!
结果:IAR中定义的栈空间过小,导致程序分配不到栈空间,所以发生复位现象,另附堆栈总结:
转载:堆栈总结

3,IAR中编译器分配的RAM使用量过大,明显不符合已使用的空间大小
结果:分析map可知,IAR在编译阶段为函数内的初始化后的临时数组分配了空间,例如char buf[500]={0};,如果定义成char buf[500];,则不分配RAM空间,因此暂时用memset手动初始化,至于具体原理待后期分析。
分析结果:以上结论是错误的,IAR在编译阶段并没有给临时数组分配空间,只不过IAR认为内存中字节为0的是已使用的RAM,0XFF是未使用的RAM,因此在定义时将数组初始化为0后编译器认为这段空间被使用了,故给出的RAM用量不准确。

使用特权

评论回复
沙发
zhuomuniao110| | 2023-3-21 20:09 | 只看该作者
IAR比Keil好用吗?

使用特权

评论回复
板凳
tpgf| | 2023-4-7 14:21 | 只看该作者

没有好用不好用的说法   就是个人的使用习惯问题

使用特权

评论回复
地板
qcliu| | 2023-4-7 14:50 | 只看该作者
请楼主附一下堆栈总结的转载连接

使用特权

评论回复
5
drer| | 2023-4-7 15:13 | 只看该作者
第一条枚举的变量一开始我们就得给一个不满足要求的初始值是吗

使用特权

评论回复
6
coshi| | 2023-4-7 15:43 | 只看该作者
那么如何判断我什么时候需要memset手动初始化呢

使用特权

评论回复
7
kxsi| | 2023-4-7 16:07 | 只看该作者
后边的这两点 是iar自己的问题吗  如果是使用keil就不存在这个问题了?

使用特权

评论回复
8
wiba| | 2023-4-7 16:35 | 只看该作者
请问什么种类的函数是阻塞函数呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2144

帖子

4

粉丝