美文网首页
使用IAR编译生成的bin文件在JLink下的起始执行地址

使用IAR编译生成的bin文件在JLink下的起始执行地址

作者: papi_k的小茅屋 | 来源:发表于2017-12-17 15:53 被阅读0次

    papi_k's private cottage

    在我第一二节的文章“使用JLink仿真器烧写基于TI公司OMAP-L138芯片的Nand Flash基本思想与实现”中曾提到,在使用jlink commander烧写Flash时通过加载两个bin文件来实现flash烧写,这两个文件分别为:Init.bin、Nandwrite_flash.bin。它们先后被加载到芯片omapl138的共享内存首地址0x80000000中执行,但执行地址却不是0x80000000,而是0x800015bc和0x80005094。这是为什么呢,嚎?

    我曾多次试验过,如果从0x80000000处或者任意其他一处开始执行,程序会执行几步之后就跑飞, 执行失败!0x800015bc是Init.bin的唯一执行地址,0x80005094是Nandwrite_flash.bin的唯一执行地址,这两个地址是这两个可执行文件的程序入口地址, 程序若想顺利执行完毕就必须从这两个地址开始执行。

    其实,这与所选用的IDE编译工具有关系。在使用IAR编译连接生成Init.bin与Nandwrite_flash.bin这两个文件时,它同时生成了两个.map文件。这个map文件里记录了程序在共享内存中的分布区域,例如函数、变量、数据、代码等等。其中有一个函数名为__iar_program_start, 这是IAR定义的程序执行的 “内部函数” , 也是jlink在程序执行的起始地址。注意,__iar_program_start函数并不是main函数的地址,从系统的角度说,在main函数运行之前,必须要有硬件初始化、软件初始化,其中软件初始化一般包含全局变量、0初始化变量、堆栈等等,这部分的初始化称为系统初始化,一般由启动代码完成。IARIDE工具在默认的情况下会根据工程配置,在最终可执行的镜像中加入合适的启动代码(可参考CSDN文章“IAR IDE学习之---关于工程设置中“program entry”作用的猜想”,address:http://blog.csdn.net/a747lulu747/article/details/9670029)。

    所以,请大家注意啦,__iar_program_start函数地址唯一, 且随着IAR工程的改变而相应变化,如果你的程序变了,编译链接之后这个地址也会随之改变,千万不能搞错哟!否则程序无法执行,后续环节也无法进行!

    好啦,今天到这里啦,中午在“老鼠”家吃的饺子,喝点无锡白酒(同学CW的老家啊),很不错,也祝大家周末愉快!

                                                                                                                                                    made  by  papi_k

    相关文章

      网友评论

          本文标题:使用IAR编译生成的bin文件在JLink下的起始执行地址

          本文链接:https://www.haomeiwen.com/subject/aboywxtx.html