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

6713升级程序向用户程序跳转失败

各位好:

       目前我们的平台是6713做的,升级功能和正常功能在一个程序里,在上电前2S,查询有无升级指令,如果有,则将FALSH里的程序擦出,然后将新程序烧写到FLASH里,重启即可;如果无,则执行正常功能。

      因为需求变更,要求将两个功能分开变为两个工程分别烧写到FLASH不同的区域,即为升级程序和用户程序(原正常功能)。升级程序和用户程序都是利用原工程进行裁剪的,升级程序位于FLASH前64K(足够)中,6713上电后搬运FLASH前1K(升级程序的boot)到RAM的0地址处运行,然后由boot做二次引导将升级程序搬运到RAM的0x400地址处运行,升级程序查询有无升级指令,若无则搬运用户程序(位于FLASH的第2个64K地址空间中,也是足够的)的bootloader到RAM的0x00020000处,长度也是0x400,升级程序末尾跳转至0x00020000处开始运行,用户程序的bootloader则搬运用户程序到0x00020400处开始运行。

    目前问题是上电后程序没有正常运行,通过挂在仿真器查看memory,起始地址为0x00020000、长度为0x400的数据内容是用户程序的前0x400数据内容,说明升级程序搬运用户程序的bootloader是对的。然后单步执行时,升级程序的末尾也能跳转至0x00020000处开始运行,但是执行了几条指令后,跳转到升级程序的boot里去运行了,请问是怎么回事呢?

Shine:

请问有没有单独调试过用户程序的bootloader在仿真器模式下是否正确?

min ouyang:

回复 Shine:

试过,单独运行用户程序的整个工程是好的

min ouyang:

回复 Shine:

我刚好再次试了一下,发现在仿真器模式下,用户程序的boot能够搬运用户程序的代码,也能跳到用户程序的_C_int00地址处,单步运行时,发现它走了一会后,跑到0x00000800处运行去了,请问为啥啊?

Shine:

回复 min ouyang:

直接设断点跑呢?0x800处是什么代码?

min ouyang:

回复 Shine:

前面没用啊,现在是单独跑的用户程序,麻烦您帮我看看这个boot和cmd文件有没有什么问题

min ouyang:

回复 min ouyang:

cmd文件

min ouyang:

回复 Shine:

这是cmd文件,前面说错了,是跳到了0x85C0处了,我用RAM跑,在跳之前是同样的位置,跳之后是0x285C0,能够正常运行,我查看了map文件,0x285C0是memcpy62.obj的地址,而为啥会跑到0x85C0吗,请问是哪里设置的不对吗?

赞(0)
未经允许不得转载:TI中文支持网 » 6713升级程序向用户程序跳转失败
分享到: 更多 (0)