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.

[FAQ] [参考译文] [常见问题解答] TI-RTOS:应用程序应如何创建内核对象?

Guru**** 1785650 points
Other Parts Discussed in Thread: TI-RTOS-MCU
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/830500/faq-ti-rtos-how-should-an-application-create-kernel-objects

主题中讨论的其他器件:TI-RTOS-MCU

我想使用 TI-RTOS 内核(SYS/BIOS)创建一个应用。 创建内核对象需要哪些选项?

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

    创建 TI-RTOS 内核对象的方法有三种:

    • 动态创建: 应用程序可以“创建”内核对象。 API 将始终需要一个堆来分配对象。 所有模块创建都需要一个 Error_Block。
    • 动态构造: 应用程序可以“构造”内核对象。 API 采用该结构、而不是从堆中分配该结构。 许多结构不需要 Error_Block、这也有助于减小代码占用空间。 某些结构可能会在内部分配内存。 有关更多详细信息,请参见特定 API (例如,Task_construct,如果不提供堆栈,则将分配堆栈)。
    • 静态创建: 在应用程序的.cfg 文件中,您可以“静态创建”内核对象。 静态分配的对象不需要堆。 “填充”结构被添加到生成的大源文件中。

    以下是每种方法的示例:

    动态创建

    #include 
    (笑声)
    Semaphore_handle semaphore0;
    Semaphore_Params semaphoreParams;
    Error_Block EB; 
    ERROR_INIT (&EB);
    Semaphore_Params_init (&SemaphoreParams);
    Semaphore0 = Semaphore_create (0、&SemaphoreParams、&EB);
    if (信标0 = NULL){
    …μ A
    Semaphore_post (Semaphore0); 

    动态构造

    #include 
    (笑声)
    Semaphore_Structe Semaphore0Struct;
    Semaphore_Params semaphoreParams; 
    Semaphore_Params_init (&semaphoreParams);
    Semaphore_con构(&semaphore0Struct, 0,&semaphoreParams);
    …
    Semaphore_post (semaphore_handle (&semaphore0Struct)); 

    注意:构造的对象必须转换为要使用的句柄。

    静态创建

    下面显示了在.cfg 文件中创建的信号量。

    var semaphore0Params = new semaphore.Params ();
    Program.global.semaphore0 = semaphore.create (0、semaphore0Params); 

    这里是在应用程序中使用此信标的代码

    #include //需要从.cfg 文件
    #include 获取全局变量 
    …μ A
    Semaphore_post (Semaphore0); 

    应使用哪种方法来创建内核对象?

    TI-RTOS 示例使用构造机制、因为它似乎是静态和动态创建之间的良好折衷。  

    • 使用动态创建的原因
      • 您希望在应用中实现灵活性
      • 您需要一个简单的编程流程
      • 动态内存分配功能正常
      • ROV 始终工作
    • 使用动态构造的原因
      • 您希望在应用中实现灵活性
      • 您正在管理内核结构(而不仅仅是句柄)
      • 您希望最小化/消除动态内存分配
      • 大多数模块构造调用不会失败(有关完整的详细信息、请参阅特定 API)
      • 注意:ROV 不显示嵌入在应用程序结构或堆栈中的禁忌对象
    • 使用静态创建的原因
      • 您有一个非常固定的系统
      • 您需要最小的代码占用空间
      • 您希望最小化/消除动态内存分配
      • ROV 始终工作
      • 您不介意使用.cfg 文件来创建对象
      • 注:不能删除静态对象以释放内存

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

    做得很好-但是"主题/标题"可能会受益于轻微的改进吗?

    出发地:"TI-RTOS-MCU:应用程序应如何创建内核对象?"

    更改为   "应用帮助-创建内核对象时可用的选项!"

    尽管——尤其是——“观众”是被束缚的…… 最好是"发表您的观点"、因为它 必须与"眼睛/观点"竞争。   (您的高质量写作值得高度评价!)

    您可能会注意到我编写的主题(从顶部第3个)是在这种"无源语音"中开始的(&几乎没有注意到!)    一天或两天之后-主题转变为"活动"-发布了"眼图/视图"  (128.7K &计数!)

    [编辑]在10天内、这个"常见问题"似乎"不常被查看"。   (即仅获得100次访问)  与此相反-具有更"活跃"主题(标题)的帖子吸引了超过1、000次访问!