Other Parts Discussed in Thread:TMS320F28035
最近在开发TMS28335的二次bootloader,bootloader被存储在flash的第一个扇区,它的功能就是接收上位机发送来的APP程序,将程序存储到flash的其它扇区,接收完成后复位跳转执行APP程序;
现在最重要的问题来了,程序已经可以被正确的下载到flash中,但是不知道如何跳转过去,看了好多帖子,意思都是修改codestart文件,codestart文件是用汇编写的,不知道28335的汇编指令,那位大神能够给个demo或者几行代码,说明下如何跳转到APP程序。
跳转的逻辑是,当bootloader将程序全部写到flash中时,会在flash的最后一个扇区写一个key,想要通过判断这个key来决定是执行bootloader还是执行app程序,我应该怎么修改codestart文件呢?
求指教。
youdong sheng:
各位大神们,帮下忙啊~~~~正在做28335的CAN bootloader,感觉就差这最后一步了
,
youdong sheng:
我想复杂了……(*((void(*)(void))(appadress)))();这样就解决了,程序完美运行,跟stm32的跳转方式一样的
,
user4750962:
您好,我现在也在做通过can升级app的bootloader,不知道该如何做,您之前做资料或者您的那个bootloader可以发我学习下吗,谢谢,邮箱mikemills1@163.com
,
PINRAN LIAO:
多谢楼主的回复,之前我的跳转方式一直是使用的汇编指令跳转的,我也参考了STM32的跳转方式,但是没有成功
,
user5048978:
你好:
我现在在用TMS320F28035做二次Bootloader,最后的跳转的方式也和你一样,但是我跳转到APP会出现 程序不断的复位又从头开始执行 或者 程序的运行指针是保持在子程序的死循环里,但子程序的功能却不对。 希望能和你沟通一下,麻烦你了 。
,
PINRAN LIAO:
void CAN_BOOT_JumpToApplication(uint32_t Addr){ // asm(" LB 0x310000"); //最开始采用的是汇编跳转方式,只能跳转为固定的地址 // (*((void(*)(void))(Addr)))(); //后续参考STM32的跳转方式 //(*(pFunction)(Addr))(); //typedef void (*pFunction)(void); pFunction jump; jump = (pFunction)(Addr); jump();
}
我现在是采用的是这样的跳转方式
,
xueping du:
楼主,能否共享一下你的成果
,
PINRAN LIAO:
详细的源代码见
https://github.com/596142041/28335CAN_Update_Flash.git;
,
zhenguo hu:
失效了
,
user5866419:
github.com/…/28335CAN_Update_Flash