标签:OpenCPU flash SLM130 Keil Flash 程序 地址 用户程序 BootLoader
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" width="100%"></iframe>
说明
模组内部使用的M3的内核, 如果大家伙使用过STM32或者类似的ARM核的单片机做过程序升级,
那么这篇文章就可以基本上看懂了, 如果没有做过升级,建议看一下下面的
https://mnifdv.cn/resource/cnblogs/iot_documents/STM32%20OTA%20demo.pdf
然后呢, 模组的开发是没有使用IDE的, 是直接使用的ARMCC + Cmake
咱以前是直接在Keil上进行配置, 是软件帮咱内部配置的编译过程.
实际上脱离了Keil软件照样是可以编译程序的, Keil只是提供了页面配置而已.
有兴趣的同学可以百度下如何脱离Keil使用 Cmake编译程序.
先来看程序加载的过程
1.使用文本编辑软件打开 PLAT文件夹 (我就使用 VSCode)
2.BootLoader程序会执行 SystemXIPNormalBoot 函数
ec_main 就是程序入口函数
3.SystemXIPNormalBoot 函数里面最终会执行跳转
APP_FLASH_LOAD_ADDR 地址呢是 0x00820000 ; 其实就是咱用户程序(执行具体功能的程序)存放在flash的起始地址 咱的用户程序就是从这个地址开始烧录到flash
看下下面的跳转程序,因为是ARM内核嘛, 所以最终就是要执行程序的复位中断入口地址,
注:falsh是4字节代表一个地址, 地址加1 正好是复位中断地址(如果不理解,说明没有玩转ARM单片机升级....)
执行完上面的其实就是运行了用户程序了.
现在整体说下flash的分配情况
1.BootLoader程序
BootLoader程序是从flash的 0x00804000 地址开始存储的, 总共 0x00012000(73728字节,72KB)
(说明最底层还有一套程序,这个咱就不关心了)
2.用户程序
用户程序是从flash的 0x00820000 地址开始存储的, 总共 0x280000(2621440字节,2560KB)
3.后面的(因为刚使用,还没有具体了解, 我猜的)
FLASH_MEM_BACKUP_ADDR 感觉是升级程序时, 接收的差分程序文件存放的地址, FLASH_MEM_PLAT_INFO_ADDR 不知道, 要么是内部使用的, 要么是提供给用户使用的.....
编译的时候如何设置程序运行的ROM起始地址
1,在有IDE软件的时候咱都知道在上面就可以设置程序运行的ROM地址
2,在没有IDE的时候如何做的呢?
编译程序的时候其实有个链接文件 xxxxx.ld文件;
现在咱看是如何把BootLoader程序设置到运行在上面说的0x00804000 地址上的
其实就是xxxxx.ld文件控制的哈, 不过咱只需要了解就可以, 咱也不需要改什么.
同样的用户程序也有设置(注意哈,所有的用户程序是在上面的文件夹里面统一设置的)
提示:上面说的这个不必深究, 了解下就可以, 后面应该是用不到去自己调整flash分配
标签:OpenCPU,flash,SLM130,Keil,Flash,程序,地址,用户程序,BootLoader 来源: https://www.cnblogs.com/yangfengwu/p/16173593.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。