Thread 中讨论的其他器件:TIMAC、 SYSBIOS
我尝试初始化 iCall 栈、类似于 TIMAC 的 MSA 示例(使用此硬件时遇到困难、因此无法进行切换)。 我可以从任务函数正确地进行 iCall 调用。 这一问题似乎常见于许多原因。 在这 种情况下、当应用程序安全堆栈在堆栈中启用时、它被禁用了(我尝试了两种方法、都成功了)。 我不知道如何评估我运行的是哪个堆栈--我是为部署的产品编写这个,所以我完全不喜欢该 ROM 上的任何东西。 这是随附的芯片。
我还观察到先前在程序执行中调用 Task_restore 函数时不会出现问题、因此它本身不是该函数。 我的程序也可以正常工作、没有 ICall 功能(我提供 GPIO、UART 和 i2c 的实用支持)。
该异常重定向到我的处理程序函数、但报告的寄存器没有任何意义。 我想它只是一个指向未初始化内存的指针。
- PC -> 0x20000208 (user0Cfg)
- PC 为什么指向此地址?
- 我在这里设置了一个断点、以防万一、但它永远不会
- SP -> 0x1001B429 (ti_sysbios_KNL_Task_exit___E)
- 为什么 SP 指向 ROM?
单步执行代码并汇编调用链
- Taskfxn (作为来自 main 的任务调用)
- iCall_createRemoteTasks
- 任务恢复
- TI_SysBIOS_KNL_Task_restore__E ():
- iCall_taskEntry
- 跳转至0x9001 (拇指至 ICALL_STACK0_ADDR)
- 跳转至无标签的0x897C (iCall_threadStackSizes + 0x18E4)
- 异常有时会在跳转时发生、有时会在数十步后发生。
- 跳转至0x9001 (拇指至 ICALL_STACK0_ADDR)
- iCall_taskEntry
我迷失在这里做什么或如何理解我的信息。 我甚至不清楚什么是瞬间引起的问题。