Thread 中讨论的其他器件:SYSBIOS
各位专家:
我尝试通过显示函数为第二个 UART 构建一个任务、并通过回调构建使用第一个(XDS) UART 的主任务、但以下代码不能按预期工作、因此请查看该代码并点击以查找缺失的点
*==== uart2callback.c ===
*
#include
#include
/* POSIX 头文件*/
#include
/*驱动程序头文件*/
#include
#include
/*驱动程序配置*/
#include "ti_drivers_config.h"
//导入显示驱动程序定义
#include
#include
#include
#include
#define task_stack_size 512
#define task_priority 6.
/*任务的堆栈*/
uint8_t sbcTaskStack[task_stack_size];
/*任务对象(待构建)*/
Task_Structtask0;
静态 SEM_t SEM;
静态易失性 size_t numBytesRead;
const size_t RX_size = 128;
静态 uint8_t RX_COM1 [128];
/*
*==== callbackFxn ====
*
void callbackFxn (UART2_Handle handle、void * buffer、size_t count、void * userArg, int_fast16_t status)
{
if (status!= UART2_STATUS_SUCCESS)
{
/* UART2_READ()中出现 RX 错误*/
while (1){}
}
numBytesRead = count;
SEM_post (&SEM);
}
/*任务函数*/
空任务功能(UARg arg0、UARg arg1)
{
字符输入;
const char echoPrompt[]="回显字符:\r\n";
UART2_Handle UART;
UART2_Params uartParams;
int32_t semStatus;
uint32_t status = UART2_STATUS_SUCCESS;
/*配置 LED 引脚*/
// GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*创建信标*/
semStatus = SEM_INIT (&SEM、0、0);
if (semStatus!= 0)
{
/*创建信标时出错*/
while (1){}
}
/*在回调读取模式下创建 UART */
UART2_Params_init (uartParams);
uartParams.readMode = UART2_Mode_callback;
uartParams.readCallback = callbackFxn;
uartParams.baudrate = 115200;
UART = UART2_open (CONFIG_UART2_1、uartParams);
如果(UART == NULL)
{
/* UART2_open()失败*/
while (1){}
}
/*对 bytesWritten 传递 NULL,因为它未在本示例中使用*/
UART2_WRITE (UART、echoPrompt、sizeof (echoPrompt)、NULL);
while (1)/*永远运行循环(除非终止)*/
{
/*对 bytesRead 传递 NULL,因为它未在本示例中使用*/
// status = UART2_read (UART、INPUT、1、NULL);
STATUS = UART2_READ (UART、&RX_COM1、RX_SIZE、NULL);
if (status!= UART2_STATUS_SUCCESS)
{
/* UART2_READ()失败*/
while (1){}
}
/*在执行读回调之前不要写入*/
SEM_WAIT (SEM);
如果(numBytesRead >0)
{
//status = UART2_WRITE (UART、INPUT、1、NULL);
STATUS = UART2_WRITE (UART、&RX_COM1、numBytesRead、NULL);
// Display_printf (handle、1、0、"您%s 的状态如何?"、RX_COM1);
if (status!= UART2_STATUS_SUCCESS)
{
/* UART2_write()失败*/
while (1){}
}
}
}
}
/*
*==== mainThread ====
*
void * mainThread (void * arg0)
{
/*调用驱动程序初始化函数*/
GPIO_init();
Task_Params taskParams;
//配置任务
Task_Params_init (&taskParams);
taskParams.stack = sbcTaskStack;
taskParams.STACKSIZE = task_stack_size;
taskParams.priority = task_priority;
Task_construct(&task0、taskFunction、&taskParams、NULL);
BIOS_start();
//初始化可选的显示参数
Display_Handle handle;
Display_Params 参数;
Display_Params_init (¶ms);
//打开显示实现
Display_open (Display_Type_UART、params);
//输出到显示
Display_printf (handle、1、0、"Hello World");
/*打开用户 LED 指示初始化成功*/
//GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
/*循环永久回显*/
while (1)
{
如果(numBytesRead >0)
{
//Display_printf (handle、1、0、"您%s 是如何的?"、RX_COM1);
Display_printf (handle、1、0、"Hello World");
numBytesRead = 0;
}
}
}
此致
Surya

