我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
user5188746:
请问,有相关的文档资料吗?我看了sci启动的文档,没有发现相关的资料,是我没有看仔细吗?
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
HH Y:
我的是28035,应该都一样吧。
#define APP_START_ADDR 0x123456789 //目标地址
#define Jumpgxcx (void (*)(void))APP_START_ADDR
(*Jumpgxcx)(); //跳转
controlsuit里面有个例程,但是缺少很多细节,还有应用程序那里,必须在CMD文件里把begain的地址改一下
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
Seven Han:
是否有参阅TMS320F281x Boot ROM Serial Flash Programming:http://www.ti.com/lit/an/spraaq2/spraaq2.pdf
http://processors.wiki.ti.com/index.php/C2000_Bootloader?keyMatch=sci%20bootloader&tisearch=Search-CN-Everything
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
user5188746:
回复 HH Y:
非常感谢
我按照您说的,但是运行到跳转指令时,出现了非法中断错误
这个是不能在ram中进行仿真调试吗?我用boot程序将应用程序烧写到指定地址后,也不能启动。但是用ccs3.3的flash烧写工具烧写的boot程序可以运行
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
user5188746:
回复 user5188746:
用asm也是在仿真时出现非法中断错误
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
HH Y:
回复 user5188746:
你当前在bootloader项目下仿真,代码跳转,意味着CCS要跳转到另一个项目的代码里面去,CCS目前应该没有这种操作吧?
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
user5188746:
回复 HH Y:
那怎么判断我boot跳转指令的问题,还是烧写程序bin文件的问题呢,假如不能仿真的话?
我现在的情况是boot程序烧写到flash中可以运行,应用程序烧写到flash也可以运行,这两个都是通过工具烧写的
但是使用boot程序烧写应用程序的bin文件,就不能启动了?
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
user5188746:
回复 user5188746:
我还想请教一下,在bootloader程序里变量和代码拷贝到了rom中运行,如果bootloader成功跳转到应用程序里了,那么应用程序的变量和代码也分配到了rom,之前boot程序的变量是否被覆盖了呢?还是需要对应用程序的变量进行地址区分,不能覆盖boot程序的呢?
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
HH Y:
回复 user5188746:
app程序中的CMD文件的begain段是否改了?flash占用的段是否和bootloader重合?
RAM是可以重合的,覆盖也没事,我的程序没有专门处理RAM的分配,一直运行得好好的。
我想实现F2812从flash启动的二级boot功能,目前,已将boot程序烧写到flash的0x3f7ff6,并且将应用程序烧写到指定的flash地址,比如0x3da000,现在问题是,boot程序怎么跳转到应用程序的入口地址处?
那条语句可以实现这个功能?
asm(“ LB 0x3da000”)
是这样吗?谢谢
HH Y:
回复 user5188746:
还有,C2000的烧录方式,我不知bin是怎么处理的,按controlsuit的例程是烧录txt文件,他不是直接把一堆二进制序列从头到尾写入就可以的,这和STM32是不同的。二进制序列中包含一些额外的信息,必须排除,还有包含有段的地址、长度信息,这些不是代码内容,如果按序列直接写入flash,肯定无法运行。