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

求教:有关FLASH双程序(boot&app)之间的跳转?

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

Eric Ma:

mingxi,

1.可以采用下面的方式跳转:

#define Update (void   (*)(void))0x3F7FF6

 

………………

在需要跳转时,

(*Update)();

这样就跳转到上面的这个地址中去了。

所以如果烧写完成之后,可以跳转到0x3F7FF6,然后开始执行。

2. 其他的没什么特殊的,只要注意用户程序和boot程序之间的跳转和相关判断就可以了。另外可以划出一个段给boot,这样就可以升级代码就可以固化了。

Eric

 

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

mingxi mo:

回复 Eric Ma:

Hi Eric,

        感谢您的回复,思路基本明白了,问题还是具体操作上:

例如在TI例程,的F28027.CMD文件里:

   FLASHD      : origin = 0x3F0000, length = 0x002000     /* on-chip FLASH */   FLASHC      : origin = 0x3F2000, length = 0x002000     /* on-chip FLASH */   FLASHA      : origin = 0x3F6000, length = 0x001F80     /* on-chip FLASH */

我想把boot程序放在FLASHA中,将用户程序放在FLASHC中。

1.在boot程序的project里,执行跳转判断后,如何跳到FLASHC中用户程序的main开始执行?

2.在APP程序的prject里,除将cmd文件中SECTIONS中 Allocate 的FLASHA改成FLASHC外,还要哪些操作?

能否帮忙分别给出boot与app两个简单的demo例程,只需实现上电后,从boot程序(FLASHA)运行一定时间后跳转到APP程序(FLASHC)执行?

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

10#:

回复 mingxi mo:

1. 像上面Eric提到的一样,只要你跳转到了那个地址,后面它就自动会执行到App的main();

2. 只要对App自己使用到的flash和RAM进行指定即可,不让它与boot的flash和RAM重叠。

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

mingxi mo:

回复 10#:

感谢答复!但还是不明白?

1、0x3F7FF6地址,我看TI 例程里的CMD文件是

   BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */

在Boot程序跳转时,跳到那个地址会跳到APP程序的main么?为什么?能否具体说明?

2、FLASH划为两块分别给boot与app能理解,但RAM如何分配?

希望高手专家能给出例程,万分感谢!

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

10#:

回复 mingxi mo:

1,是的,会跳转到main(),因为该地址里存有执行C语言环境初始化以及其它功能的代码,然后就会执行这个跳转,具体请参考BOOT ROM手册或controlsuite路径下的文档和例子(以F2806x为例:C:\ti\controlSUITE\libs\utilities\boot_rom\2806x);

2,RAM可以随意分配,只要够用且不互相冲突就可以了。

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

mingxi mo:

回复 10#:

感谢您的回答,但是还是有问题:

1,我理解是该语句无法跳到APP的main(),只会跳到Boot中的main。因为两个(boot与app)工程的CMD文件都是BEGIN

   BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */

请问谁有实际做过类似的工程呢?能否提供两个工程的文件(Boot与APP)的一个简例子

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

10#:

回复 mingxi mo:

是的,只能跳到一个的main(),确切地说就是boot的main,然后需要在里面判断是进行程序升级还是到app的主程序运行。

只能有一个工程的cmd里有BEGIN,就是boot.

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

hua zheng:

回复 10#:

那如果是到APP主程序运行呢,这个时候应该怎么跳转,总不至于又跳到begin里面然后又回boot的main吧,这个点不是很理解

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

hua zheng:

回复 10#:

我试过copy完后跳到数据流里的入口地址结果他又返回到boot的main里面,然后接下来该如何跳到app去运行,我试过一直都是返回到boot的main里。

采用F28027开发一个项目,要求后续产品能在线升级,参考了相资料及ARM上的做法的思路

将工程分为两部分(boot与app),分别烧录在DSP片上FLASH的前后两个不同区域。

boot包括底层通讯驱与FLASH读写,app是真正最后执行的部分

即用“程序”烧写“程序”有一个问题请教?

即前一程序(boot)完成Flash烧写或自检完成后,如何跳转到后一程序(APP)?

1、程序跳转有什么指令实现?

2、APP程序开发调试中除了对CMD文件中对FLASH进行地址分配外,还需要什么特殊处理?

hua zheng:

你好,不知道你后面boot和app这个问题解决了吗?我现在遇到和你一样的问题,能讨论下吗?qq:342257828

赞(0)
未经允许不得转载:TI中文支持网 » 求教:有关FLASH双程序(boot&app)之间的跳转?
分享到: 更多 (0)