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**** 2583735 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/736667/re-rtos-msp432e401y-semaphore-for-uart-read

尊敬的 Bob:
很抱歉耽误你的回答。
实际上、在我的应用中、每当我向传感器发送命令时、该命令将回复一些数据。 我需要对其进行捕获。
在我之前使用 Atmel AVR 微控制器(以及一些其他控制器)时,有些 ISR 功能会在数据来自传感器时自动执行。 在该函数中、我已经根据我的应用编写了代码。

但是、在本例中、我需要在"UART 写入"之后每次调用"UART 读取"。 我认为这会导致时序问题。

请告诉我,如何编写代码以确保不会出现任何计时问题。 我在前面的帖子中看到过、有一些函数、如"Semaphore _post & pend"。
实际上、我不熟悉该线程编程。
请就此为我提供帮助。

谢谢你

此致
Kalyan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是该线程的延续。 e2e.ti.com/.../719325

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否将您编写的有问题的代码发送给我? 此外、您是否可以包含用于跟踪目的的上一帖子的链接?
    谢谢、
    Bob L.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Kalyan、

    您可以在该 E2E 帖子(TI-RTOS 上的 UART 回调)中看到如何设置回调。   这是 uartecho TI 驱动程序示例的更改版本 、展示了如何发送字节、然后提供一种在可用时让系统接收字节的方法、而不会阻止您进行其他活动。  

    这就是所有可用的示例。

    -Bob L.

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

    Bob、您好!

    感谢你的答复。

    我已经尝试过类似的东西,但我没有成功。

    我正在使用 TCP 回显示例将数据从以太网传输到串行、从串行传输到以太网。 正确进行以太网到串行传输、串行到以太网 传输不正确。

    我随附了代码、请指导我解决此问题。

    空 tcpworker (uint32_t arg0、uint32_t arg1)
    {
    int clientfd =(int) arg0;
    int bytesRcvd;
    // int bytesSent;
    // char buffer[TCPPACKETSIZE];
    
    UART_READ (uart4、&buffer1、1);
    while (1)
    {
    while ((bytesRcvd = recv (clientfd、buffer、TCPPACKETSIZE、0))> 0) //以太网2串行
    {
    // bytesSent = send (clientfd、buffer、bytesRcvd、0);
    UART_WRITE (uart4、&buffer、bytesRcvd);
    }
    
    if (rx_FLAG = 1)
    {
    SEND (clientfd、buffer1、1、0); //串行2以太网
    RX_FLAG = 0;
    }
    
    }
    
    close (clientfd);
    }/*******
    
    
    用于串行到以太网传输的 TCP 工作站2 ///void
    Serial2Ethernet (uint32_t arg0、uint32_t arg1)
    //{
    // int clientfd =(int) arg0;
    // if (uart_read (uart4、&buffer、1)> 0)
    //{
    // SEND (clientfd、buffer、1、0);
    //}
    //
    // uart_readCancel (uart4);
    // uart4、&buffer、1);
    // if (rx_FLAG = 1)
    //{
    // SEND (clientfd、buffer、1、0);
    ////}
    //关闭(clientfd);
    //}
    
    /******* UART 读就绪功能******** /
    void uart4_read_ready_ready_fxn (uart_handle uart4、void * buffer、size_t num)
    {
    // send (clientfd_Rx、buffer1、1、0);
    RX_FLAG = 1;
    // UART_readCancel (uart4);
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob、您好!
    请帮我处理此代码。
    谢谢你

    Kalyan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好。
    我是否能在我发布的这个代码示例上为我提供帮助?

    谢谢你
    Kalyan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    针对有关信标的原始查询、请参阅 SimpleLink Academy 培训、了解 RTOS 要点和 TI-RTOS 基础知识。 您将找到不同 RTOS 组件的示例和说明。

    dev.ti.com/.../

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    感谢你的答复。
    您能否看到代码并建议我获得所需的输出。

    此致
    Kalyan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在尝试使两端都正常工作时,串行->以太网和以太网->串行是否在单独的线程中运行?
    很难从这里得知、因为您只需注释掉串口转以太网部分。
    -Bob L
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:
    感谢你的答复。
    否、我不使用不同的线程。 这种情况也是我尝试过但无法成功的。
    现在、我使用的是单个线程、我正在检查一个标志。 如果是1、则我将尝试从串行发送到以太网。
    它是实现它的正确方法。

    此致
    Kalyan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使其正常工作、那么这是正确的方法! 只需确保您不会让一个方向(即串行转以太网)阻止另一个方向。
    Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    首先、感谢您的回答。

    在这里、以太网到串行的工作非常完美。

    但是、只有当我尝试从以太网发送某些数据时才会进行串行到以太网传输(然后只有我能够接收数据、我之前尝试从 UART 发送数据、位于以太网侧)。

    这里的问题是、每当我从串行端口发送数据时、我们都没有任何 ISR 函数可直接执行。

    如果我使用两个与我在程序或任何其他想法中评论的线程一样的线程。

    谢谢你

    此致

    Kalyan。

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

    Kalyan、

     以下是我们的一位以太网专家的一些反馈:

    看起来他在 tcpworker 任务中读取 UART。 这意味着只有当调用 tcpworker 任务时、UART_Read 才起作用。

    UART_READ 应位于另一个任务或处理程序函数中。 应使用队列和邮箱等机制将接收到的数据发送到 tcpworker 任务(全局变量是一个坏主意)。

    -Bob L.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:
    感谢你的答复。
    我尝试使用多任务处理。

    此致
    Kalyan。