微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

002-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-关于Flash分配和程序加载过程

<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)

@H_404_32@

 

 

 

 

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分配

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐