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/TM4C1294NCPDT:RTOS 驱动程序是线程安全的还是不安全的

Guru**** 2422790 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/614610/rtos-tm4c1294ncpdt-rtos-drivers-are-thread-safe-or-not

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

您好!

我正在使用来自该位置的驾驶员呼叫 /products/tidrivers_ /packages/ti/drivers、它在 TI RTOS 用户指南中提到驱动程序调用是线程安全的。

我将使用类似下面的函数、该函数调用 I2C 驱动程序函数调用、

i2cWrite()

I2C_Params_init (&stI2cParams);

 stI2cHandle = I2C_open (stI2cConfig->vui8I2cBus、&stI2cParams);

I2C_transfer (stI2cHandle、stI2cTransaction)

I2C_Close (stI2cHandle);

问题:

是为每个函数单独执行的安全线程机制、还是为 I2C 驱动器中的所有函数执行的单个安全线程。

2.如果我再次为 i2cWrite 函数创建安全线程、会发生什么情况。

此致、

Manohar

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

    您好、Manohar、

    每个 I2C 实例的使用都是线程安全的。 例如、如果您使用 Board_I2C0 (实际上是 EK_TM4C129EXL_I2C7)索引调用 I2C_open、则会返回 I2C_Handle。 让我们将其称为 i2cHandle0。

    多个任务可以使用 i2cHandle0来启动传输。 在 I2C_transfer 内部(实际上在较低级别的 i2c 驱动器中)、信标用作互斥量、以确保一次只设置传输一个任务。 这是 i2cTiva.c 文件中的代码行

    Semaphore_pend (Semaphore_handle (&(object->mutex)))、BIOS_wait_forever);

    现在、驱动程序设置传输并在单独的信标上调用 Semaphore_pend (将其称为传输完成的信标)。 传输完成后、Hwi 在传输完成信号量上调用 Semaphore_post。 这将释放被阻止的任务。 现在、它将调用以下命令  

    Semaphore_post (semaphore_handle (&(object->mutex)));

    以允许任何其他任务执行 A 传输(如果一个任务在上面列出的 Semaphore_pend 函数上被阻止)。

    如果您有不同的 I2C 实例(将其称为 i2cHandle1)。 如果 i2cHandle0有一个传输在进行中、您仍然可以为 i2cHandle1进行传输、因为它们具有不同的信标来提供线程安全。

    Todd