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.

[参考译文] CC3200SDK:UART 读回功能

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/808956/cc3200sdk-uart-read-call---back-functionality

器件型号:CC3200SDK

您好!

我正在尝试通过回调功能找到一个 UART 读取示例。 是否曾通过设置 readMode = UART_MODE_CALLACK 对读取进行过测试?  

我在 UARTCC32XX.c 中跟踪了驱动程序代码...

 UARTCC32XX_Object -> state ->  

结构{
布尔 打开:1; /* obj 是否已打开*/
UART_Mode 读取模式:1; 所有读取呼叫的/*模式*/ 
UART_Mode 写模式:1; 针对所有写入调用的/*模式*/
UART_DataMode readDataMode:1;/*正在读取的数据类型*/
UART_DataMode writeDataMode:1;/*正在写入的数据类型*/
UART_ReturnMode readReturnMode:1;/*接收返回模式*
UART_Echo ReadEcho:1; /*回显接收到的数据*/
/*
} 州; 

我认为这些被保存为 bool 类型、并且在函数 UARTCC32XX_Read 中进行比较时。 第583行

if ((object->state.readMode =uart_mode_callback)&& object->readSize)... 第一条语句 object->state.readMode == UART_MODE_callback 计算为0而不是1。 为-1!= 1。

我在函数 readIsrBinaryCallback 中放置了一个断点、程序永远不会在那里停止。  

安装了 SimpleLink CC32xx SDK (3.10.00.04)。 下面是我尝试运行的代码。 从不会从 UART 收到任何回拨。  

#define MAX_STR_SIZE 256
pthread_mutex_t scanMutex;
UART_Handle uartHandle;
char pcBuffer[MAX_STR_SIZE]="";

void Initialize (){//默认设置
UART_Params uartParams;
UART_PARAMS_INIT (uartParams);
uartParams.readMode = UART_MODE_CALLACK;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_NEWLINE;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 115200;
uartParams.readCallback = ReadCallback_fxn;

UART_INIT();

uartHandle = UART_OPEN (uartPort、uartParams);
/*从 LPDS 依赖项中删除 UART 接收*/
UART_CONTROL (uartHandle、UART_CMD_RXDISABLE、空);

int retc;
retc = pthread_mutex_init (&scanMutex、NULL);
如果(retc!= 0){
/* pthread_mutex_init()失败*/
//TODO
}
}

void main_thread( void ){

int retc;
size_t pcBufflen;

char scanBuffer[MAX_STR_SIZE];
retc = UART_Read (uartHandle、scanBuffer、MAX_STR_SIZE);
如果(retc =-1)
{
日志("扫描 UART 错误!");
}

while (true)
{
pthread_mutex_lock (&scanMutex);
pcBufflen = strlen (pcBuffer);

if (pcBufflen >0)
{
scanQueue.send(pcBuffer、pcBufflen);

memset ((void*) pcBuffer、0、MAX_STR_SIZE);

pthread_mutex_unlock (&scanMutex);

retc = UART_Read (uartHandle、scanBuffer、MAX_STR_SIZE);

如果(retc =-1)
{
日志("扫描 UART 错误!");
}
}
其他
{
pthread_mutex_unlock (&scanMutex);
线程:睡眠(0.5);
}
}


void ReadCallback_fxn (UART_Handle handle、void *buf、size_t count)
{
if (count < MAX_STR_SIZE)
{
pthread_mutex_lock (&scanMutex);
strncpy (pcBuffer,(char*) buf,count);
pthread_mutex_unlock (&scanMutex);
}
其他
{
log ("扫描的%d 个字符长于最大值-%d 个字符!"、MAX_STR_SIZE、COUNT);
};
} 

任何帮助都非常感谢。  

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

    Tashfique、

    是否发送新的行字符以便返回函数? 如果您将其更改为二进制、您是否仍有问题?

    BR、

    Vince

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

    所以我调用了控制函数、这正是导致问题的原因。 现在它的工作非常好!

    只需删除此行。

    /* remove UART receive from LPDS dependency */
            UART_control(uartHandle, UART_CMD_RXDISABLE, NULL);
    我仍然认为驱动程序代码中存在错误。

    UARTCC32XX_READ。 第583行

    if ((object->state.readMode =uart_mode_callback)&& object->readSize)... 第一条语句 object->state.readMode == UART_MODE_callback 计算为0而不是1。 为-1!= 1。

    周.