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.

[参考译文] CC2630:iCall_createRemoteTasks 在 Task_restore 调用时除外、i'm 不知道如何处理数据。

Guru**** 2460850 points
Other Parts Discussed in Thread: TIMAC, SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1245864/cc2630-icall_createremotetasks-excepts-on-task_restore-call-i-m-not-sure-what-to-make-of-the-data

器件型号:CC2630
Thread 中讨论的其他器件:TIMACSYSBIOS

我尝试初始化 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?

单步执行代码并汇编调用链

  1. Taskfxn (作为来自 main 的任务调用)
  2. iCall_createRemoteTasks
    1. 任务恢复
    2.  TI_SysBIOS_KNL_Task_restore__E ():
      1. iCall_taskEntry
        1. 跳转至0x9001 (拇指至 ICALL_STACK0_ADDR)
          1. 跳转至无标签的0x897C (iCall_threadStackSizes + 0x18E4)
          2. 异常有时会在跳转时发生、有时会在数十步后发生。

我迷失在这里做什么或如何理解我的信息。 我甚至不清楚什么是瞬间引起的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

    您是否评估了默认 MSA 示例并验证了它是否有效?  您是否正在尝试 CC26xx MAC 示例应用软件设计的第2.1.2节:

    ICall 表示间接函数调用调度程序。 ICall 使无线电堆栈软件能够同时支持 OSAL 和 TI-RTOS、并允许独立更新应用程序映像和堆栈软件映像。 ICall 通过独立于实际处理程序函数地址工作来隐藏 OSAL 和 TI-RTOS 差异。 换句话说、ICall 分离 OSAL 和 TI-RTOS 域、允许单独升级任一域并通过间接函数调用在两个域之间提供接口。  

    和第3.2节:

    堆栈 API 通过 ICall 为 MAC 堆栈提供 MSA 应用程序接口。 ‘MAPI 和消息格式在"acStackMSG.h"中列出。 ‘M的‘应‘M"iCall.h"、"MacS.h"和"acStackMSG.h"头文件以使用堆栈 API。 ‘mAPI 允许 MSA 或用户的应用程序调用 MAC 堆栈、使用"AC_API.h"中列出的 MAC 旧 API 的一对一匹配函数名称和数据结构。

    您是否尝试在没有 TIMAC 的情况下使用 ICall 或在 MSA 之外创建应用程序?  无论哪种方式、我都建议从工作 MSA 示例开始、并从那里构建您的应用程序。  确保您正在对堆栈和应用程序映像进行编译和编程(请遵循 C:\ti\simplelink\TIMAC_1_05_02_43299\documents 中的 MAC 用户指南)、因为缺少堆栈映像可能会导致符号丢失 、从而导致您的器件进入未知状态。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    堆栈就是问题所在。 我从 MSA 示例中刷入了堆栈项目、但它突然开始工作。 我曾认为这些调用已经在 ROM 中。

    我仍然不清楚将什么放在何处。 这个项目所生成的文件正在闪存到9000-D050地址--如果我没记错的话,那就是闪存而不是 ROM。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    并非所有15.4-Stack 资源都存在于 ROM 中、必须在闪存中加以考虑。

    此致、
    瑞安