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.

[参考译文] CC1310:在其他任务中创建任务

Guru**** 2484615 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1196846/cc1310-creating-tasks-within-other-tasks

器件型号:CC1310

您好!

我非常不熟悉 RTOS 编程、并且获得了一个已经完成一些工作的项目(也是由具有有限 RTOS 经验的人员完成的)。 它主要是从各种不同的 SDK 示例编译的代码。 它现在都在工作、所以这不是问题。 我只是对线程/任务创建有一些一般性问题、在文档中找不到答案。  

我们的当前设置如下所示:  

int main() 
{
    pthread_create( ..., *thread_A, ...);  // created in detached state
    BIOS_start();
}

void *thread_A()
{
    GPIO_init();
    ...

    pthread_create( ..., *thread_B, ...);  // created in detached state
    pthread_create( ..., *thread_C, ...);  // created in detached state
    
}

首先、我不确定这个"线程内的线程"结构来自哪里。 这是做它的方法吗?这是不是错误的、它还没有中断? 一位同事认为这与设置内核和空闲任务有关、所有其他线程应在 Thread_A 中创建 在从 pthread 切换到任务时也是如此? 您能否从其他任务中创建任务、或者这是否会使调度和调试(即执行分析)变得混乱?  

我们的任务基本上会永远运行。 在启动时、系统以何种模式运行、以及需要执行哪些任务。 您能否在另一个任务中"捆绑"任务并根据状态(与上面的代码类似)启动这一个任务? 或者、您是否以"平坦"的方式(从主程序中)启动任务并决定是否需要启动每个任务?  

很抱歉、有很多问题、但我在文档或论坛中找不到答案。  

谢谢、大家好、

最大

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

    尊敬的 Max:  

    感谢您的提问!

    任务中的任务创建通常不应成为问题。 在任务永久运行的情况下、似乎不会产生任何问题。

    但是、当您谈论捆绑任务时、您的案例中是否需要多任务并发? 或者、在父任务本身中执行任务的实际工作是否合适?  

    这是一个您可能感兴趣的主题。 它还引用另一个有关任务切换的线程。  

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/545482/creating-new-tasks-within-a-task

    此致、

    SID

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

    您好 Sid、

    好的、感谢您提供的信息。  

    我们有不同的模式(例如调试、校准、应用、节电等)、并且根据模式、需要启动(或不启动)某些传感器读取线程。 我忘记了、你可以在常规函数调用中"捆绑"它们以启动线程。   

    尝试一下、绕一个地方玩一下、看看会发生什么情况。  

    您是否需要为 Task_A 堆栈中的 Task_B 和 Task_C (如上面的示例所示)分配足够的堆栈空间? 或者、它们是否得到分配的"平坦"、即不在 Task_A 堆栈中?  

    您好!

    最大

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

    尊敬的 Max:  

    这不是必需的。 该任务应足够大、以便在发生中断时处理所需的上下文保存。 此外、它应该足够大、能够处理任务函数中的所有函数调用。 但是、当您使用自己的堆栈创建另一个任务时、它应该能够独立地处理上下文切换。  

    使用最小代码和小于子任务的父任务的小任务的快速测试可能会很有用。  

    此致、

    SID