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:TI-RTOS 中以1ms 的时间进行计时器和 UART 通信

Guru**** 2472990 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679586/rtos-tm4c1294ncpdt-timer-and-uart-communication-at-1-ms-in-ti-rtos

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

尊敬的先生/女士:

我希望每1ms 进行一次 UART 通信。 我创建了1ms 计时器线程。 但是、当我尝试调用任何与 UART 相关的函数、例如 UART_WRITE 等或 用于进行 UART 通信的 my_UART 函数时、我会得到以下错误。

n 失败:a_badContext:调用上下文错误。 有关详细信息、请参阅 GateMutex API 文档。
xdc.runtime.Error.raise:终止执行

我知道我遇到这个错误是因为我正在尝试调用诸如 create、delete from Hwi 线程之类的函数。 那么、这个问题的解决方案是什么?  如何继续编程?

此致、

Digvijay

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

    大家好、Digvijay、

    计时器回调在中断上下文中执行。 在此上下文中不能调用 UART_WRITE。 必须在任务中调用它(我假设您使用的是 TI-RTOS)。 您可以使用 UART_writePolling。

    更常见的方法是使用一个任务来执行类似此伪代码的任务

    任务

      while (1){

        Semaphore_pend (semHandle);

        UART_WRITE (...)

      }

    然后创建一个调用 Semaphore_post (semHandle)的时钟对象。 将时钟对象设置为在1ms 运行。 注意:默认情况下、TI-RTOS 使用计时器来驱动1ms 的节拍(周期是可配置的、但大多数客户将其保留在1ms)。

    Todd

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

    谢谢、

    此致、

    Digvijay。