IAR环境下,运用自己写的bootloader程序向MSP430F5438A写入程序,指定flash空间中的数据与Debug模式下在flash中读出的16进制数据一致(已经做过对比),但是程序还是不能运行?
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.
IAR环境下,运用自己写的bootloader程序向MSP430F5438A写入程序,指定flash空间中的数据与Debug模式下在flash中读出的16进制数据一致(已经做过对比),但是程序还是不能运行?
工程没有问题,我的主函数中用到定时器1,只要屏蔽掉TA1CTL = TASSEL_1 + MC_2 + TACLR+ ID_3; 这句话后,程序就能正常运行,在很多地方也用了都没有出现问题,不知道何故。而且flash地址超过0x10000写入后能正常工作
TA1CCTL0 |= CCIE; // CCR0 interrupt enabled
TA1CCR0 = 0x1000;
// TA1CTL = TASSEL_1 + MC_2 + TACLR+ ID_3;
大致看了一下代码,楼主从0xF000开始写了一段uart 控制台程序用于升级,应该意图是可以将ASCII格式的TXT文件通过串口传输。
然后0x5C00 定义为了用户区,存了一个闪灯的小程序。
看描述楼主的问题感觉都和编译器的设置有些关系,建议
1 跳转到用户区的命令,直接用 ((void (*)())0x5C00)(); 这样的指向特定地址的函数试试看,不要调用 USERS_PROGRAM 这个程序名。
2 0x10000之后能正常工作的问题,0x10000有些编译器会优化优先将main 函数存在 0x10000,因为 0xFFFE是 reset向量嘛,放在其后运行速度会快一些。
建议楼主把编译器的optimization选项都关掉,或者核对一下各个工程之间的编译器选项是否一样,或许可以帮助分析这个“时灵时不灵”的问题。