首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

ucosII任务接收串口数据,挂起有关问题

2013-03-13 
ucosII任务接收串口数据,挂起问题采用ucosii操作系统,两个任务,1. 任务一专门接收USART1的数据,然后进行分

ucosII任务接收串口数据,挂起问题
采用ucosii操作系统,两个任务,
1. 任务一专门接收USART1的数据,然后进行分析处理,专门接收上位机数据
2. 巡检下位机,通过USART2定时发送数据通讯,
3. 所有数据的接收和发送都在对应的中断服务程序中接收放入缓冲区,但不处理,由各自任务处理

现在有这样一个问题,任务一被动接收上位机的数据,必须时刻查询接收缓冲区是否有数据,如下


void task1(void)
{
   while(1) {
       ...//查询接收缓冲区数据
      DLY10MS(5); //挂起任务
   }
}
void task2(void)
{
   ...//巡检下位机
   DLY10MS(5);//挂起任务
}


问题出现在task1的任务挂起这里,如果不挂起任务,则task2得不到cpu资源运行,如果挂起,则势必
影响接收上位机的实时性,必须被50ms才能接收一次,对数据必要延迟,这种情况该怎么处理?
ucoss?任务
[解决办法]
接收放中断里啊,定义一全局 Volatile uint32_t Command,在UART中断里对接收的数据进行分析,如果是对应的命令则置Command相应值,然后任务1里不停的检查Command看是否需要响应
[解决办法]
ucos提供了各种必要的同步手段,比如Semaphore, Mutex, EventFlag, MessageQueue等。
你的情况,用Semaphore或MessageQueue比较适合。

/// example of use Semaphore

void UART1_IntHandler (void)
{
   // hardware related operation
   OSSemPost(/* parameters */);
}

void task1 (void)
{
   for (;;)
   {
       OSSemPend(/* parameters */);
       // data arrived, use the data and do your work
   }
}

热点排行