写定制程序容易遇见的问题(FLASH不够时)
做了一个关于定制两条串口协议的活,主要是要在源代码基础上进行修改。源代码只剩了200多字节flash。本来最初我的想法很奇特,用结构体来模仿寄存器的写法。当我写完几行代码后,编译链接,立马就报CODE内存超了。
然后最终还是选择去修改原协议关于数据包解析的底层,其实就是一些值和字符串的互转函数,如果直接用c的库就是sprintf。
思路就是在原处理函数内新增新协议的解析。如果有其他需求就在别的地方稍作修改。重要的是我把前面写的字符串与值进行互转的函数合并了一堆,为了节省内存,原来用5个字节的地方(单个10进制值或者16进制值转字符串就是2个位 例如 11 --> '1','1',但是字符串应该是'1','1','\0'),我改成了2个,最后造成了添加不上字符串结束符的错误,造成数组越界了。这个问题其实不是很严重,debug能出来,但是对于仿真器仿真速度奇慢,还老是软甲卡死的情况下,这简直就是煎熬,就是求它别卡。
这里我的心得就是别的值转字符串一定要留出加结束符'\0'的位置。整个程序改完,我还剩下50字节的容量。我的天哪,省内存可太难了。最初改的时候试过各种方法,只有改原有的底层接口才能缩减内存占用。
后记:如果是要改定制程序,过来人的意见。
1.备份初始程序(我中间找大哥要了好几次源程序)。
2.检查硬件问题。仿真器线序,硬件的烧录接口。
3.如果仿真器和串口助手同时插上,打不开串口助手的原因可能是 供电不够。改了jlink供电加串口模块才够用,原仿真器是msp430的不够用(这点真是我试出来的)。
4.如果改新功能请(内存不够)先缩减源程序内存,调试好老程序再添加新的。不然的话新的调通了还得回去调老的。
5.先确定好方案,再去写。对于有些古早的单片机,找不到对应例程就很难。比如我想使用msp430某个系类芯片的定时器。我找了好久没找到解决方法,也没怎么看数据手册,我想不就是一个定时中断清标志位的事吗,初始化定时器不就解决了。关键就是这个中断标志位,问钉钉的ai才问出来。
6.改完代码,自测。测完就要了解后续是干什么,是提交什么文件和表单还是干什么。我以为提交给老哥就没事了,谁知道后面还复杂着呢。
7.记得写个类似于日记的东西,你的记忆力没有你想的那么强。
有的时候,我常常感叹。如果前人给我一个经验手册,那我就不必那么误打误撞。在此,感谢每个愿意发自己经验分享给后辈的伟大先驱者。