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.
工具与软件:
我实现了 MSP430FR5959 的 MSP430FRBoot 示例。 由于示例代码是针对 FR5969的、因此我在应用中遵循与 MSP430FR5969控制器相同的存储器映射。
我能够使引导加载程序正确引导至应用程序空间、但应用程序代码卡在 while 循环中的 run_cinit 中、在这个循环中、会使用 CINIT 表将变量加载到运行地址中。
我附上了调试会话的屏幕截图。 当我单步执行 run_cinit 函数的 while 循环时、程序控制始终在地址0x000004处结束、并且我收到一条错误消息"No debug information available at address 0x04 (地址0x04处无可用调试信息)"
您能帮助我弄清楚为什么 run_cinit 函数会到达地址0x04而未成功完成吗?
代码片段如下所示:
/*------------------ */
/*处理压缩的 ELF cinit 表。 格式如下:*/
/*|4字节 load addr|4字节 run addr|*/
/*|4字节 load addr|4字节 run addr|*/
/**/
/*处理步骤:*/
/* 1. 读取加载和运行地址。 */
/* 2. 读取加载地址处的一个字节、例如 idx。 */
/* 3. 获取指向 handler_start[idx]*/处的处理程序的指针
/* 4. 调用处理程序(load_addr + 1、run_addr)*/
/*------------------ */
如果(&&_TI_ADC Handler_Table_Base!= Handler_Table_Limit)
{
#if defined (__TI_EABI__)&& defined (__TMS320C2000__)
char * const * table_ptr = cinit_start;
#else
char * const * table_ptr =_TI_CINIT_Base;
#endif
char * const * table_limit =_TI_CINIT_limit;
while (table_ptr!= table_limit)
{
char const * load_addr =* table_ptr++;
char * run_addr =* table_ptr++;
char handler_idx =* load_addr++;
handler_fn_t handler =__TI_handler[handler_idx] Handler_Table_Base;
handler (load_addr、run_addr);
}
}
?
对于 MSP430FR5969和 FR5969来说、FRAM 和 RAM 大小相同、您只需更改演示代码的器件、其正常工作应该是 FR5959。
您好、Gary、
要从 MSP430FR5969更改为 MSP430FR5969、我是否只需更改 Project Properties >> CCS General>> Device>> Variant 中的 Variant 字段?
是否需要进行任何其他更改?
在 MSPBoot_FR5969_CC1101项目中将器件更改为 MSP430FR5959后、我遇到很多编译器和链接器错误
此外、这仍然保留了有关 run_cinit 的未决问题、无法在我的原始帖子中完成执行。 run_cinit 完成后、下一个要执行的函数是我的应用程序中的主函数。
您能不能帮我弄清楚为什么 run_cinit 不完整?
哦、我知道了、这是由于 下面的选择编译器、它还将添加一个您需要手动删除的新 cmd 文件。
#if 已定义(_MSP430FR5969__)
#include "hal_spi_rf_expfr5969.h"
#endif
我想您只需将其保留为 FR5969、并记住不要使用外设、FR5969也不能使用。
您能帮我弄清楚为什么 run_cinit 不完整吗? [报价]对于上一期内容、请在此处发表一些评论:
1.请勿跳转 ISR
2.最好在执行跳转之前清除 RAM(特别是堆栈区域)