打印
[学习资料]

程序调试经验1

[复制链接]
248|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中国龙芯CDX|  楼主 | 2023-3-16 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 中国龙芯CDX 于 2023-3-16 09:46 编辑

近期在使用IAR调试时总结了一些问题,下面分享给大家,希望对大家后续调试有所帮助!

1,串口在要发送数据的时候发送乱码0X80、0X00,检查波特率、时钟分频、配置都没错!
结果:系统总时钟有误,所以即使串口时钟分频是正确的,串口的波特率也会不正确。
当串口出现问题是,检查步骤:1.波特率,2.数据位、停止位等配置,3.检查有无开启时钟及时钟的分频是否正确,4.检查时钟分频的源时钟是否正确,及一直往上检查直到系统时钟。

2,程序出现莫名其妙的错误或者程序中某些参数在没有运行到的时候被修改!
结果:RAM中自上而下由编译器分配的程序栈与RAM中自下而上的变量区发生重叠,故需要调整函数内部临时buf的大小,buf越大编译器分配的栈空间越大。
检查RAM是否超出范围的方法:程序调试时在memory 工具中将RAM的地址在合理范围内全部写入0XFF,然后允许程序所有功能,检查是不是所有的0XFF全部被改变。
PS:
IAR中给出的RAM使用量是变量加所有函数内的临时buf的大小总和,故此值会偏大。
CS+ for CC和CA,CX给出的RAM使用量是所有RW变量,不包括栈,故会偏小。
因此最好自己检查一遍RAM。
特别要注意函数的嵌套调用,比如当一个函数使用了500字节的栈,它在调用一个使用了500字节的栈时ram就需要1K的空间来处理这2个函数。

使用特权

评论回复
沙发
zhuomuniao110| | 2023-3-21 21:39 | 只看该作者
经验不错,感谢。。。。

使用特权

评论回复
板凳
真爱吴迪迪| | 2023-3-22 18:14 | 只看该作者
这个没有用过IAR,为什么不用KEIL开发呢?

使用特权

评论回复
地板
tpgf| | 2023-4-6 15:12 | 只看该作者
串口发送系统总时钟有误是一般指的哪一个等级的时钟呢

使用特权

评论回复
5
qcliu| | 2023-4-6 15:30 | 只看该作者
这俩算是我们非常常见的问题了 解决起来也是比较简单的

使用特权

评论回复
6
drer| | 2023-4-6 16:08 | 只看该作者
真爱吴迪迪 发表于 2023-3-22 18:14
这个没有用过IAR,为什么不用KEIL开发呢?

IAR挺好用的啊  而且我觉得这个并不是iar这工具的问题

使用特权

评论回复
7
coshi| | 2023-4-6 16:27 | 只看该作者
编译器分配的栈空间是大了好还是小点好呢

使用特权

评论回复
8
kxsi| | 2023-4-6 16:45 | 只看该作者
coshi 发表于 2023-4-6 16:27
编译器分配的栈空间是大了好还是小点好呢

这个不能说死,太大太小都不是很好  只要不出问题我觉得就行

使用特权

评论回复
9
wiba| | 2023-4-6 17:04 | 只看该作者
感觉楼主推荐的这个检查RAM是否超出范围的方法非常的巧妙啊

使用特权

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

本版积分规则

180

主题

1519

帖子

2

粉丝