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:run_cinit 函数卡在 while 循环中

Guru**** 1826200 points
Other Parts Discussed in Thread: MSP430FR5969, CC1101, MSP430FR5959
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1427936/msp430fr5959-run_cinit-function-stuck-in-while-loop

器件型号:MSP430FR5959
主题中讨论的其他器件: MSP430FR5969CC1101

工具与软件:

我实现了 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(特别是堆栈区域)