uCOSII学习使用记录
最近学习和使用uCOSII, 在这里做一下笔记
- 串口中断
中断处理前添加
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
退出中断后
OSIntExit();
-
有人移植了2.86或者2.88版本后,发现跑的时间长了,会出现某些任务跑步了了,是需要设置将中断改为0就可以了,似乎嵌套多了也会出现这样的问题
-
V2.86版本有一个BUG
86版本是这样的
if (OSLockNesting == 0)
{ /* ... scheduler is not locked */
OS_SchedNew();
if (OSPrioHighRdy != OSPrioCur)
{ /* No Ctx Sw if current task is highest rdy */
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++; /* Increment context switch counter */
OS_TASK_SW(); /* Perform a context switch */
}
}
88版本
if (OSLockNesting == 0u)
{ /* ... scheduler is not locked */
OS_SchedNew();
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
if (OSPrioHighRdy != OSPrioCur)
{ /* No Ctx Sw if current task is highest rdy */
OSCtxSwCtr++; /* Increment context switch counter */
OS_TASK_SW(); /* Perform a context switch */
}
}
- 信号量,邮箱,消息队列,互斥信号量,消耗必须大于建立,邮箱是指针
使能邮箱功能后建立
OS_EVENT * msg_mbox; //事件指针
msg_mbox = OSMboxCreate((void*)0); //创建消息邮箱 将地址返回 msg_mbox中
// 创建事件
OSMboxPost(msg_mbox, &g_msg_value);//将键值发送到邮箱中,邮箱地址msg_mbox
//等待事件
msg = OSMboxPend(msg_mbox, 0, &err);
- 移植编译发现大量错误,去掉ucosii.c文件