This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我的想法是在flash中存两个程序,一个是主程序,一个是自己编写的bootloader,用于升级主程序。
我现在已经将BOOTDEFx和BMSP等寄存器设置成了如下图,使用GPIO72来选择从FLASH BANK0或者FLASH BANK1启动
我的两个程序的flash分区如下:
左边为主程序的分区,右边为bootloader的分区。
在程序烧录的时候,我也分别将不同程序的扇区做了保护,比如bootloader只E/P BANK0 sector0-11
而主程序则保护BANK0 sector0-11
但是我的单片机仍然无法正常运行其中某个程序(单机跑),主程序运行很短的一段时间则会重启。
我的疑问如下
1.我的思路是否能实现?
2.是否有什么遗漏或者问题,导致我的两个程序都无法正常运行?
假设我使用合并烧录,不使用单片机自带的BOOT MODE,我在自己编写的boot中做判断后需要跳转到app中
1.我应该怎么跳转?
2.我跳转的app地址为多少?
1.我的思路是否能实现?
是的,这是可行的。只要你的引导加载程序/应用程序内存管理干净,并且闪存中没有关键的重叠,你就可以使用闪存插件分别对每个闪存库进行编程。可以通过比较每个项目的链接器命令文件来验证这一点。
2.是否有什么遗漏或者问题,导致我的两个程序都无法正常运行?
你可以在CCS内存浏览器中确认,在加载引导加载程序和应用程序时,闪存插件正在擦除/编程正确的地址区域。
或者说,我是否根本不需要使用BMSP来做这个事情,我直接将boot和app的.out合并烧录,然后上电启动boot,如果不需要升级直接跳转app?
这是正确的,不一定需要配置BMSP来实现你的目标。还可以将固件升级命令支持添加到引导加载程序/应用程序中,并在需要时在两者之间跳转。需要分支到引导加载程序/应用程序的code_start地址。
有几种方法可以——一种方法是执行C28 Instruction Set中描述的long branch。