[学习资料] 程序调试经验2

[复制链接]
1000|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 | 显示全部楼层
请楼主附一下堆栈总结的转载连接
drer 发表于 2023-4-7 15:13 | 显示全部楼层
第一条枚举的变量一开始我们就得给一个不满足要求的初始值是吗
coshi 发表于 2023-4-7 15:43 | 显示全部楼层
那么如何判断我什么时候需要memset手动初始化呢
kxsi 发表于 2023-4-7 16:07 | 显示全部楼层
后边的这两点 是iar自己的问题吗  如果是使用keil就不存在这个问题了?
wiba 发表于 2023-4-7 16:35 | 显示全部楼层
请问什么种类的函数是阻塞函数呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

344

主题

2727

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部