主题中讨论的其他器件: MSP430FR5969、 CC1101
工具与软件:
我实现了 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);
}
}
?