TI中文支持网
TI专业的中文技术问题搜集分享网站

关于28335串口更新程序时的地址跳转问题

您好

我现在在做串口在线升级程序,想咨询您一下。我的升级程序写在FLASHG,应用程序写在FLASHE,我应该编写什么程序可以实现到另一个FLASH的跳转呢,即从FLASHG跳转到FLASHE,或者说从升级程序的main函数跳转至应用程序的main函数。

谢谢

mangui zhang:

可以先了解一下上电或复位后程序执行及引导过程,或者二次引导

1.首先我们根据图1来看一下芯片上电后的代码执行流程,当芯片在接收到一个复位信号后,会到0x3FFFC0去复位向量,该复位向量跳到BootROM 0x3FF75C中去执行bootloader的程序,这里主要有initboot, 和SelectBootMode, 以及一些外设引导的函数。SeleteBootMode根据芯片的硬件或软件设置来判断芯片该去哪里寻找程序入口,直接目的是如何找到main,然后执行应用程序。

<ignore_js_op>

360截图20180527214750549.jpg (29.11 KB, 下载次数: 0)

下载附件  保存到相册

2018-5-27 21:44 上传

 
                               图1. 芯片的复位流程图

我们最常用到的主要有两种引导模式:    一种是boot to RAM,即跳到0x000000的RAM中,去开始执行指令,主要针对程序加载在RAM的仿真模式;另外一种是boot to Flash,则跳到0x3F7FF6中去开始执行代码。相应的,程序会这两个入口地址0x000000, 0x3F7FF6放一条跳转指令,在codestart.asm源文件中,原因是在Flash的入口地址处只有两个单元的空间,后面是CSM模块,所以需要跳转;而在RAM中之所以也需要跳转,主要是因为在跳转到main之前,需要执行一小段代码_c_int00,该代码会使用0x000003之后的一段RAM,如果代码放在那里,在执行_c_int00之后会损坏代码。

赞(0)
未经允许不得转载:TI中文支持网 » 关于28335串口更新程序时的地址跳转问题
分享到: 更多 (0)