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/CC1350:如何为 GateMutex 设置 GateMutex_Q_preemping "quot;quot;quot;quot

Guru**** 2604225 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585126/rtos-cc1350-how-does-one-set-the-gatemutex_q_preempting-quality-for-a-gatemutex

器件型号:CC1350

工具/软件:TI-RTOS

您好!

我正在尝试弄清楚如何构建和使用 GateMutex。  API CDOC 描述了 gateMutex 的"质量"概念、它显示了如何查询质量、但我看不到如何设置质量。  具体而言、如何设置 GateMutex_Q_preemping 质量?  我是否只需使用#define 将其设置为2?  这种质量是否适用于所有 GateMutex 实例?

此外、是否有一个代码示例用于说明如何构建和使用 gatemutex?

谢谢、

Ruben

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

    栅极"品质"不可设置。 它们是所使用的栅极类型所固有的。

    Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alan、
    感谢您的回答。 我仍然不清楚"品质"。 请举一个例子、进一步说明所用栅极类型的固有特性。 哪种类型的栅极具有"GateMutex_Q_preemping"质量、哪种类型的栅极具有"GateMutex_Q_Blocking"质量?

    如果有一个参考或代码示例、我将自行研究、请随时向我指出该示例。

    我将简要介绍一下我的应用、也许您可以告诉我栅极互斥量是否合适。 我的系统有两种用户输入形式:按钮和通过 UART 进行远程控制。 我们希望使这两种形式的输入相互排斥、这样、只要远程主机未连接到 UART、用户就可以通过按钮(默认行为)与系统交互、但当主机连接到 UART 时、按钮被禁用。 固件具有一个处理按钮输入的任务和一个处理 UART 的单独任务。 我想使用门多特克斯来实现上述行为、而这正是我的困境所在。 我将按钮任务的优先级设置为低于 UART 任务的优先级。 当按钮任务开始时、我进入栅极并且永不离开、但是我希望在 UART 任务进入栅极时依赖栅极的"抢占质量"来抢占按钮任务。 这是否是一种使用 Gatemutex 的有效方法、还是有更好的方法来实现这一目的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您的按钮任务定期释放门、GateMutex 似乎适合您:

    buttonTask (arg0、arg1){
    while (1){
    GateMutex_enter (myGate);
    (笑声) 检查按钮转换...
    GateMutex_leave (myGate);
    }
    }
    


    这会使栅极保持打开状态、以便较高优先级的 UART 任务获取它并无限期地挂起它:

    uartTask (arg0、arg1){
    (笑声) 阻止、直到发生 UART 中断...
    UART_READ (myUART、buf、1);
    
    /*抓住门,不要让它走*/
    GateMutex_enter (myGate);
    (笑声) 切勿松开安全门
    ...}
    



    Alan

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

    谢谢。  我要尝试一下。  还有一个简单的问题、我需要做的是 构建速率图吗?

    GateMutex_Params_init (&commandMutexParams);
    GateMutex_construct(&commandMutexStruct,&commandMutexParams);
    commandMutexHandle = GateMutex_handle (&commandMutexStruct);
    

    另外、您能不能再简单介绍一下有关"品质"的原始问题? 此时、您更有好奇心、因为您已经为我提供了我认为需要的东西。

    此致、

    Ruben

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alan、
    那是可行的。 感谢你的帮助。 我仍然想了解如何使用门的"品质"、因此、如果在那里的任何人都能回答问题的这一部分、我将不胜感激。

    -Ruben
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将尝试解释一下质量:

    /*!
    *==== Q_blocking =====
    *阻止质量
    *
    *使用此"质量"的门可能会导致调用线程被阻止;
    *即、暂停执行、直到另一个线程离开栅极。
    *
    const int Q_blocking = 1;

    /*!
    *==== q_preemping ===
    *抢占质量
    *
    *具有此"质量"的门允许其他线程抢占线程
    *已进入栅极。
    *
    const int Q_preempting = 2;

    根据上面显示的定义,“阻塞”质量定义是否调用 GateXYZ_ENTER() CAN/will block。 如果阻塞质量为 false,则 GateXYZ_ENTER()永远不会阻塞。 如果分块质量为 true,则如果另一个线程已经调用 GateXYZ_ENTER(),则 GateXYZ_ENTER()将被阻止,并在该线程调用 GateXYZ_leave ()之前保持被阻止。 GateMutex 和 GateMutexPri 是在门已由另一个线程"拥有"时阻止门的示例。

    "抢占"质量定义调用 GateXYZ_ENTER()的线程是否可以被另一个线程挤占,直到调用 GateXYZ_LEV()。 只有 GateHwi 和 GateAll 栅极具有抢占质量为 false。 调用 GateXYZ_ENTER()后,所有其它门都可以被至少一个其它线程类型挤占。

    我希望这种解释有助于澄清这些微妙的话题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alan、
    感谢您对栅极质量的解释。 虽然示例应用会更好、但这很有用。

    再次感谢您提供的有用答案。

    Ruben