您好!
我正在尝试通过回调功能找到一个 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);
};
}
任何帮助都非常感谢。