比如一个小程序,功能是只在地址 0xC0000000 上写个数。
我想把它写进 nor flash 里,然后上电就在 nor flash 里面执行代码。
emif nor flash 启动会跳转在 0x70000000 上开始执行,也就是说我需要把程序的入口 _c_int00 写在 0x70000000 上。
可是生成 bin 文件后,查看 map 文件,_c_int00 地址在中间。比如起始到结束地址范围是 0x10800000 ~ 0x10801000 ,_c_int00 地址为 0x10800500 。
我如果提取这一段 bin 文件(save memory 方式),直接烧到 o = 0x70000000 上,l = 0x70001000 上,
很显然 _c_int00 的地址相应为 o = 0x70000500 ,对不上 o = 0x70000000 。
看过一些例程,都是用的 asm 文件编写的。我也弄不懂那些 asm 程序是如何确保自身的入口地址刚好就是启动地址的。
只知道,它把自己放到比如 o = 0x10800000 上 ,然后提取生成 bin 文件,烧到 o = 0x70000000 上 ,就 ok 了。
能重新定位 _c_int00 的地址吗?
我应该如何正确地烧写 bin 文件?
我的 CMD 文件如何分配?
请各位赐教。
早安咬Fan:
回复 Ryan BL:
谢谢。
.text:_c_int00 > 0x70000000
查看 map 文件,确实有用。
但上电之后,程序跑不起来。用仿真器查看也连不起,说 device is hung. 说明烧到 flash 的代码不对。
可能还有其他哪里没有设置好。
我现在用 boot.asm 的搬运程序的方法能启动。赶项目进度,暂时没时间研究在 flash 里直接启动应用程序的方法了。
我也在成都,以后有空多交流。
吐槽一下,为什么我的 ID 改昵称改不了。