做个记录,原来搞stm32的时候,被领导整呀,和外部合作需要把一个无线的协议栈加进去,但是人家只提供lib库有没有,提供库还好,但是好大怎么办,光一个库就要140K左右,后期虽然人家答应删减,但是要遥遥无期怎么办,·而这边的代码也不小怎么办,也有100k怎么办,再加上BootLoader函数,怎么也超了256KB了,简单的办法就是换一个512K的单片机不就得了,呵呵哒,但是垃圾领导想省钱怎么办,我也很绝望呀,算了算,100K+140K,也就差不多240多K了,算上什么参数区,什么的,给BootLoader留下也就几kB的空间,但是升级函数要USB升级要网络升级要串口升级都要,绝望了,只有想办法优化代码了,心里骂着,还要优化代码,但是代码不是我写的怎么办,优化了有问题怎么办,这个责任不想担,也不想动脑子看代码,去优化,好好的代码工作了好几年了,不想动,这时候想了想,只要BootLoader有2K就足够了,能全部实现什么usb呀,网络呀,串口升级,客官说了,这怎么可能,一个lwip,一个usb库那么大,怎么可能2K装下,这时候就有了,stm32的RAM启动有用了,具体流程如下,在spi flash固化一部分stm32代码,在BootLoader启动的时候,从固定位置搬运stm32代码到ram缓冲区,在把sp指针跳转到ram中,一般的stm32有48K的ram。其中,32K作为程序区,16K作为数据去,运行真正的BootLoader程序,在最后从ram去在跳转到flash区,这样就实现了小代码的BootLoader升级,你的BootLoader要是大于32K,就要面壁思过了,这么大的代码,就不是BootLoader了,呵呵,解决问题。
单片机IAP升级问题
最新推荐文章于 2024-08-29 13:45:42 发布