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.

[参考译文] TM4C1294KCPDT:关于使用 GateMutex 和 GateMutexPri 基于"quot;quot;quot;

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

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/849951/tm4c1294kcpdt-regarding-mutex-create-using-gatemutex-and-gatemutexpri-based-on-quality

器件型号:TM4C1294KCPDT
Thread 中讨论的其他器件:SYSBIOS

您好!

我们可以具有互斥的阻塞或抢占质量。

我的问题是、

由于质量是针对栅极配置的、我可以创建具有不同质量的互斥量、还是必须对整个应用中的所有互斥量使用单质量?

例如、

我想为 MutexCreate、MutexEnter、MutexLeave、MutexDelete 函数创建通用函数。 从这些函数中、我将根据一个标志调用 GateMutex 或 GateMutexPri 函数。

如果标志为 FIFO、

然后、我想使用"GateMutex_Creation"函数创建互斥体、并将质量设置为"blocking"。

如果标志为优先级、

我想使用"GateMutexPri_Create"函数创建互斥体、并将质量设置为"blocking"。

如果标志为 InvisionSafe、

我想使用"GateMutexPri_Create"函数创建互斥体、并将质量设置为"preemping"。

 

在 params_init()调用期间执行任何参数配置是否可以实现此操作?

此致、

Iyyappan。

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

    您可以在应用程序中创建不同类型的逻辑门、然后对其进行升级并使用 IGateProvider 模块。 例如

    #include
    #include
    #include
    #include

    任务{ 
    GateMutex_Params gmParams; GateMutex_handle gmHandle; GateMutexPri_Params gmpParams; GateMutexPri_handle gmpHandle; IGateProvider_handle gateHandle1; IGateProvider_handle gateHandle2; IArg 键1; IArg 键2;
    /*创建一个 GateMutex 实例和 upCast。 由于此模块没有参数、因此参数是可选的。 * GateMutex_Params_init (&gmParams); gmHandle = GateMutex_create (&gmParams、Error_Ignore); gateHandle1 = GateMutex_handle_upCast (gmHandle);
    /*创建一个 GateMutexPri 实例和 upCast。 这里的参数是可选的... *
    GateMutexPri_Params_init (&gmpParams); gmpHandle = GateMutexPri_create (&gmpParams、Error_Ignore); gateHandle2 = GateMutexPri_handle_upCast (gmpHandle); /*通用使用两个不同门的示例*/
    key1 = IGateProvider_enter (gateHandle1); key2 = IGateProvider_enter (gateHandle2); IGateProvider_leave (gateHandle2、key2); IGateProvider_leave (gateHandle1、key1);

    您也可以使用 IGateProvider 模块来查询 GATE 模块的质量。

    Todd

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

    您好 Todd、

    感谢您的回复。 我接受了您的建议。 我创建了互斥量、这是你在答复中建议的。  

    创建后、我调用 了 IGateProvider_query 以获取质量。 尽管我传递了不同的品质进行检查、但返回值始终为 true。 我开始调试了。 当我们调用 IGateProvider_query 函数时、它将仅转到以下函数。

    此函数可在 C:\ti\xdctools_3_32_01_22_core\packages\XDC\runruntime \IGateProvider.h 位置中使用。

    在此__inst->query 中,仅指向 GateMutexPri_query 和 GateMutex_query (请参阅下面的内容)。

      

    以上两项功能的位置

    C:\ti_tirtos_tivac_2_16_00_08\products\BIOS_6_45_01_29\packages/ti\SysBIOS\gates\GateMutex.c、用于 GateMutex_query 函数。

    C:\ti_tirtos_tivac_2_16_00_08\products\BIOS_6_45_01_29\packages/ti\SysBIOS\Gates\GateMutexPrI.c、用于 GateMutexPri_query 函数。

    这些函数始终仅返回 true。 我在这些函数中放置断点并进行检查。

    如果是这种情况、意味着我们将如何获得质量的准确使用?

    我使用的是 TI-RTOS 版本- 2.16和 BIOS 版本6.45。

    此致、

    Iyyappan。

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

    Iyyappan、

    GateMutex 和 GateMutexPri 都可以"阻止"调用任务(调用它 TaskA)。 按"块"、我是说其他一些任务可能已经进入栅极、因此任务 A 将在 GateMutex_enter (或 GateMutexPri_enter)调用中的信标上阻止。

    与"抢占"质量类似。 让一个任务(再次调用它任务 A)拥有逻辑门(例如、已成功从 GateMutex_enter (或 GateMutexPri_enter 或 IGateProvider_enter)返回)、如果一个较高优先级的线程(例如 Hwi、Swi 或较高优先级的任务)准备好运行、则较高优先级的线程将优先于任务 A。

    查询何时返回 false? GateHwi 禁用 GateHwi_enter 中的中断。 因此、当运行的线程调用 GateHwi_enter 时、它不会被阻止、因为它是运行的任务。 一旦你从 GateHwi_enter 返回、拥有该栅极的线程就不能被抢先、因为所有中断都被禁用(并且你在拥有栅极时不应该进行影响调度程序的内核调用)。

    我们提供了查询函数、以防您使用 IGateProvider_handle、并且在使用它之前需要了解有关它的更多信息。

    Todd

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

    您好 Todd、

    我理解您的说法。 但我的疑问仍然没有得到解决。 我的问题是"我们能否显式创建两个优先级互斥量实例、一个具有质量阻止功能、另一个具有质量抢先式功能?"。

    此致、

    Iyyappan。

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

    你好,lyypappan。

    否 这些是 GateMutex 和 GateMutexPri 模块的只读属性。

    Todd