本帖最后由 中国龙芯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个函数。
|