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.

[参考译文] RTOS/CC2640R2F:从未调用任务函数

Guru**** 2578945 points
Other Parts Discussed in Thread: CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/585427/rtos-cc2640r2f-task-functions-never-called

部件号:CC2640R2F
主题中讨论的其他部件:CC2640

工具/软件:TI-RTOS

我从CC2640R2 SDK中获取了simpleBLEPeripheral项目,并在我的设备上成功构建和运行了该项目。 之后,我从以前工作过的项目(在CC2640上)中导入了一些应用程序源代码。 现在,在我的主要函数中调用BIOS_START()后,除了iCall_taskEntry和Idle任务外,没有任何创建的任务运行。 所有其他任务显示为"就绪",但从未执行(通过控制台日志记录和断点验证)

BIOS_START()不能启动我的任务有哪些原因? 我已经验证task_construct ()调用了所有return而没有错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这可能是任务优先级问题。
    要运行任务,它必须是可运行的最高优先级任务。
    如果另一个优先级较高的任务正在运行,则所有优先级较低的任务将不会运行,直到优先级较高的任务块。
    已就绪但未运行的任务的优先级是什么?
    在.cfg文件中配置的Task.numPrioritys?
    是否有机会将任务的优先级设置为等于或大于Task.numPriority?

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

    下面是我的当前任务布局:

    task.numPrioris当前为6

    我会尝试将SimpleBLEPeripheral任务优先级提高到5,但我不相信这会有所帮助,因为AdcFxn尚未运行,并且它目前处于最高优先级。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯。 似乎“iCall_taskEntry”任务是第一个运行的任务(在BIOS_START()之后),从未阻止并允许任何其他任务运行(也不包括空闲任务)。

    由于这是一个SimpleBLE示例,我对iCall机制了解甚少,我将把您的问题移到BLE论坛。

    艾伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    作为一项实验,我将最大任务优先级提升到7,并将我的simpleBLEPeripheral任务和ADC任务分配到优先级6。 这使两个任务都能成功运行,但我以前从未在其他项目中这样做过,对此我并不完全满意。 此问题是否有任何更新?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍在等待TI对此问题的回复。 具体来说,为什么iCall_taskEntry不允许任何优先级较低的任务运行?

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

    如果您有要在iCall中注册的任务,则可能需要分配更多实体。 iCall_registerApp()的返回值是多少? 是否在项目配置中增加了ICALL_MAX_NUM_ENUTEDES和ICALL_MAX_NUM_TESS?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    iCall_registerApp()返回成功,并且我当前具有ICALL_MAX_NUM_ENUTES == 3和ICALL_MAX_NUM_TESS == 6

    我正在运行GAPRole任务,SBP任务和ADC任务(非iCall)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Matt,

    是否有任何迹象表明您的处理器正在iCall_entryTask中执行什么? 如果您陷入自旋循环,则可能是断言。 软件指南中有一个调试部分,如果确实得到了Assert,您可以参考该部分。

    您说您有代码在CC2640上工作。 这是您通过移植说明创建的移植项目吗?

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

    感谢您的指针。 iCall_entryTask似乎卡在循环中,但如果您指的是for (;)循环,则它不是该循环。 我会看看我是否可以确定Assert是否已被命中。

    是的,这是使用移植说明创建的移植项目。 对我来说,奇怪的是为什么任务在我将其优先级设置为高于iCall_entryTask时运行,而不是在它们较低时运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看不到正在执行的Assert Handler (函数已定义并注册,EXT_HAL_ASSERT已在堆栈项目中定义)。

    iCall_taskEntry陷入iCall_Wait()的无限循环中,该循环被一些函数调用,这些函数的符号我无法访问。 是否有方法访问显示调用iCall_Wait()的Stack项目调用的栈跟踪?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此问题(以及我遇到的其他几个问题)似乎与堆内存不足有关。 如果TI-RTOS更明确地说明为什么会出现这些问题,那就更好了。