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:TI-RTOS 互斥问题

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590106/rtos-ti-rtos-mutex-problem

Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

抱歉、当我使用互斥体时、无论是否具有优先级继承来阻止任务执行、直到互斥体释放时、任务都不会被阻止
我使用下面的简单代码对其进行了测试。

void (myfunc)(void)

while (1)

key=GateMutexPri_enter (gateMutexPri0);

COUNTER++;

//GateMutexPri_leave (gateMutexPri0、key);

当对释放互斥量的最后一行进行注释时、计数器会继续定罪、而不考虑互斥量。

使用的 Code Composer 版本为6.1.2、SYSBIOS 版本为6.40.3.9、XDC 版本为3.31.0.24

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

    您好、Ahmed、

    我们缺少一些信息。

    您使用的是哪种器件?

    TI-RTOS 是否从 ROM 中使用?

    您有多少任务?

    您在哪里声明了关键 变量? 键变量应仅在函数中声明、而不是全局变量。

    您是否说其他任务在尝试进入栅极互斥量时不会被阻止?

    只是为了确保您理解:如果同一任务尝试进入互斥体、则栅极互斥体将允许它进入互斥体。

    如果一个任务进入互斥量、而另一个任务则尝试进入同一互斥量、它应阻止它直到它被释放。

    此致、

    米歇尔

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

    从 ROM 中使用 TI-RTOS 是的。

    使用的器件是 AM437X Sitara 处理器。

    在我的代码中、互斥量在不同任务中调用的函数内使用、以确保它被重新进入、但密钥在另一个文件中全局定义、并在任务执行所在的文件中声明、而不是在本地声明给任务:

    extern IARG 密钥;

    void myfunc()

    key=GateMutexPri_enter (gateMutexPri0);

    //在此处执行一些代码

    GateMutexPri_leave (gateMutexPri0、KEY);

    --------------------------------------------------------------------

    无效的早餐()

    myfunc();

    密钥在 myfunc()实现所在的文件中进行全局声明。

    为了确保我理解您的理解、下一个代码必须做的是非常正确的、这将确保每次调用该函数时在本地定义该密钥。

    void myfunc()

    IARG 键;

    key=GateMutexPri_enter (gateMutexPri0);

    //在此处执行一些代码

    GateMutexPri_leave (gateMutexPri0、KEY);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请回答另一个问题。
    "如果同一任务尝试进入互斥量、则栅极互斥量将允许它。"
    如果在使用栅极互斥量提供的优先级继承时未释放资源、我想停止重新进入同一任务。 我可以使用什么来实现此目的?
    提前感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Ahmed Adel92"]为了确保我理解您的理解是正确的,必须执行的操作是下一个代码,这将确保每次调用该函数时都在本地定义该密钥。

    是的。 没错。

    [引用 user="Ahmed Adel92">如果在使用栅极互斥量提供的优先级继承时未释放资源、我希望停止重新输入相同的任务。 我可以使用什么来执行此操作?

    您在上面描述的内容会导致死锁。

    如果您的任务在事件上被阻止、它如何释放资源、因为您的任务将被阻止并自行等待?

    但是、如果您想这么做、您可以使用最大计数为1的信标来实现这一点。 您还必须将其初始计数初始化为1、以便随时可用。

    此致、

    米歇尔