【嵌入式】[原创]µC/OS-II嵌入式操作系统的实践新体验
0赞最近都在弄Linux和Wince,这方面可能大家比较熟悉,今天就写写µC/OS-II嵌入式操作系统,与大家共勉。
主要特点
UC/OS是一个非常小巧的实时操作系统;整个代码分为内核层以及移植层,这样使得它的植性很方便。
提供了邮箱、消息队列、信号量、内存管理、时间管理等系统服务。
智能仪器
mC/OS-II的内核结构主要包括:
临界段(Critical Sections):
这两个宏的定义取决于所用的微处理器,每种微处理器都有自己的OS_CPU.H文件。
任务(task):
一个任务通常是一个无限的循环:
void mytask(void *pdata)
{
do init
while (1) {
do something;
waiting;
do something;
}
}
用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级。优先级号越低,任务的优先级越高。
μC/OS中的中断处理:
void OSIntEnter (void)
{
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
}
OSIntExit:
OS_ENTER_CRITICAL();
if ((--OSIntNesting | OSLockNesting) == 0) {
OSIntExitY = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((OSIntExitY << 3) +
OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if (OSPrioHighRdy != OSPrioCur) {
OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
OSIntCtxSw(); }
}
OS_EXIT_CRITICAL();
中断与时钟节拍:
时钟节拍是一种特殊的中断,操作系统的心脏。对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,最后进行上下文切换。
用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。
OSTickISR:
void OSTickISR(void)
{
保存处理器寄存器的值;
调用OSIntEnter()或是将OSIntNesting加1;
调用OSTimeTick();
调用OSIntExit();
恢复处理器寄存器的值;
执行中断返回指令;
}
μC/OS-Ⅱ初始化:
μC/OS-Ⅱ还初始化了4个空数据结构缓冲区。
μC/OS-Ⅱ的启动:
OSInit(); /* 初始化uC/OS-II*/
……
调用OSTaskCreate()或OSTaskCreateExt();
……
OSStart(); /*开始多任务调度!永不返回 */
这样就完成了μC/OS-Ⅱ的初始化的介绍,这方面我还准备在写几篇,多个操作系统比较大家才能有更深入的体会,夏天真的来了,好热。