主题中讨论的其他器件: SysConfig
工具与软件:
我 在 定制板上有一个使用 CC2652R7与 SDK 6.30 和自定义引导加载程序的项目。 应用项目基于 simplePeripheral TI-RTOS 示例、而引导加载程序基于 no-RTOS nvsExternal 示例。 引导加载程序执行其操作、然后使用对 jumpToPrgEntry (0x00000000)的调用跳转到应用程序;
void jumpToPrgEntry(uint32_t prgEntry) { static uint32_t temp; temp = prgEntry; // Reset the stack pointer, temp +=4; asm(" LDR SP, [R0, #0x0] "); ((void (*)(void))(*((uint32_t*)temp)))(); }
此过程正常运行、应用程序代码运行。 当我们为引导加载程序下载新版本以进行安装时, 应用程序会调用 SysCtrlSystemReset(); 这是不起作用的部分,我确信它与重置矢量的配置方式有关。 我一直在尝试更改应用程序的复位矢量以指向引导加载程序、并显示了各种结果、我想要的都不是一个。 我已经让它只是重新启动应用程序(跳过引导加载程序)、我已经让它在 FaultISR 中挂起、我已经让它在 WaitHibProdNext()中挂起、但我从来没有让它自己返回到引导加载程序。 我要指出的是、我知道"halt in boot"、即使在下电上电后、也会在调试器上发生挂起。 借助调试器、如果我在 CCS 中按 CPU 复位按钮、它会在应用程序代码中进入_c_int00 ()、但如果我单击复位按钮、它会进入引导加载程序中的 main ()。
似乎有6个不同的地方来定义所有这些东西,我找不到任何文档,实际上指定了哪一个控制什么。 我可以附加链接器命令文件、但有人能向我解释一下所有这些文件实际上有什么作用吗?
- 连接器命令文件:
- 应用程序和引导加载程序:
- /*保留中断矢量表变量*/
--retain=g_pfnVectors.
- /*保留中断矢量表变量*/
- 应用程序和引导加载程序:
- 连接器命令文件:
- 应用:
- /*覆盖默认入口点。 */
-- entry_point 重新设置 ISR
- /*覆盖默认入口点。 */
- 引导加载程序:
- /*覆盖默认入口点。 */
-- entry_point resetisr
- /*覆盖默认入口点。 */
- 请注意、这些函数是不同的函数、大小写不同、TI 在其各自的 示例项目中的其他部分进行了定义
- 应用:
- 连接器命令文件:
- 应用程序(FLASH_START = 0x00000000:
- 部分中)
{
.intvecs :> flash_start
- 部分中)
- 引导加载程序(BOOTLOAD_BASE = 0x000AA100):
- 部分中)
{
intvecs :> bootload_base
- 部分中)
- 应用程序(FLASH_START = 0x00000000:
- 连接器命令文件:
- 应用:
-
-u_c_int00
-保留"*(.resetVecs )"
-- retain "*(.vecs)"部分中)
{
.resetVecs:加载> 0
.vecs:载入> 0x20000000、类型=无载入
.ramVecs:> SRAM、type = NoLoad、align (256)
}
-
- 引导加载程序:
- 除.resetVecs 外相同:load > bootload_BASE
- 应用:
- SysConfig GUI 编辑器
- "Device Configuration"
- "设置闪存矢量表的地址"
- "Device Configuration"
- SysConfig 文本文件
- 仅限应用、来自示例工程:
- hwi.resetVectorAddress = system.utils.BIGINT ("00000090"、16);
- 仅限应用、来自示例工程:
有这么多的参考向量,他们似乎有点矛盾,我甚至不知道最后一个,直到我找到了相关的问题,而尝试在这里首先搜索。 所有这些做什么、我实际需要哪些?