请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC1312R bim_onchip_CC1312R1_LAUNCHXL_nortos_cliclang 工程(simplelink_cc13xx_cc26xx_sdk_6_30_01_03、TI ARM clang 编译器 v2.1.3LTS)中使用的函数 jumpToPrgEntry ()具有与优化相关的行为-如果没有优化级别、它将按我们的要求工作、但不会进行优化。
如果没有优化、编译器会生成从堆栈获取 ResetISR 地址的代码、但 SP 值已更改、因此会跳转到错误的地址。
/*******************************************************************************
* @fn jumpToPrgEntry
*
* @brief This function jumps the execution to program entry to execute
* application
*
* @param vectorTable - address of application vector table.
*
* @return None.
*/
void jumpToPrgEntry(uint32_t *vectorTable)
{
// Set SP to vectorTable[0]
#ifdef __ICCARM__
__asm volatile (
"LDR R5,[R0,#0x0] \n"
"MOV SP, R5 \n"
);
#else
__asm volatile (" LDR SP, [R0, #0x0] ");
#endif
// Jump to vectorTable[1]
( (void (*)(void)) (*(vectorTable + 1)) )();
}
我为我找到了一个解决方案,但对我来说,仍然很有趣的是,实施 jumpToPrgEntry()的最佳方法是什么,它不依赖于优化?
此致、
Dimitar