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/MSP432E401Y:多线程 UART 写入

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/812943/rtos-msp432e401y-uart-write-in-multi-thread

器件型号:MSP432E401Y

工具/软件:TI-RTOS

您好!

我在我的应用中使用两个线程。

一个线程用于根据 IO 在 UART1上传输数据。

另一个线程具有较高的优先级、用于从外部器件接收 UART2上的数据并通过 UART1进行传输。

我的代码如下所示:

void * Thread2 (void * arg0)

while (1){

UART_READ (uart2、&INPUT、1);

UART_WRITE (uart1、&INPUT、1);

void * Thread1 (void * arg0)

while (1){

开关(COND)       //根据开关位置

UART_WRITE (uart1、&INPUT、1);

在这里、如果我操作 IO、则 Thread2在该操作之后不会执行。 我想、它被震撼了、因为 uart1已经在其他线程中打开以进行写入操作。

是否有人可以解释如何使"UART_write"在两个线程中都工作?  

我尝试使用信标、但我没有成功。 我在线程2中的 uatr_write 之后放置了"semaphore_post"  

和"Semaphore_pend"之后的线程1中的开关条件。

此致

Kalyan。

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

    您好 Kalyan、

    您只需调用 UART_open 一次、然后让两个线程共享返回的句柄。 您可以同时写入多个任务(针对读取的 ditto)。 请查看 突出显示部分的 TI 驱动程序 API 参考:dev.ti.com/.../node

    您可以在 UART_writes_write 周围使用信标或门、以确保它们不会同时尝试写入。

    Todd

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

    您好 Todd、

    非常感谢您的回答。

    请解释一下我们如何使用信标。 我尝试使用但是...

    我对这个基于线程的编程非常陌生。

    Kalyan。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include 
    
    Semaphore_handle;
    Semaphore_Params semParams;
    bool RC;
    
    //创建信标。 默认类型为 counting...in 本例
    //这并不重要。 从1开始计数、使其
    可用//。
    Semaphore_Params_init (&semParams);
    semHandle = Semaphore_create (1、&semParams、&EB);
    if (semHandle = NULL){
    system_abort ("创建失败");
    }
    
    //将一个挂起/ POST 环绕在多个 UART_Writes 周围
    //检查返回代码(我省略了该代码)。
    Semaphore_pend (semHandle、BIOS_WAIT_FOREVE);
    UART_WRITE (...);
    Semaphore_POST (semHandle); 

    也可以使用 GateMutex 模块。 创建方式与上述类似(参数、句柄等)。 然后是呼叫

    KEY = GateMutex_enter (gateHandle);

    UART_WRITE (...)

    GateMutex_leave (gateHandle、key);

    我更喜欢 GateMutex 方法、但有些人更喜欢信标。 这两种情况都没关系。

    Todd

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

    您好 Todd、

    _________________________________________________________

    您只需调用 UART_open 一次、然后让两个线程共享返回的句柄。

    您可以同时写入多个任务(针对读取的 ditto)。 了解一下 TI 驱动程序 API。

    _________________________________________________________

    我只使用了一次 UART 打开函数、在 main 函数中使用了该函数。 我尝试在不同的线程中使用 UART 写入函数、但它不起作用。

    回到信标、我将尝试并返回。

    谢谢你

    此致

    Kalyan。