采用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
}
}