uC/OS-II系统学习笔记(4)—— uC/OS-II概述上篇

本文介绍了uC/OS-II实时操作系统中的临界段处理,任务的定义及其无限循环特性,任务状态包括休眠、就绪等,并详细探讨了任务控制块(OS_TCBs)的作用和结构,包括栈顶指针、任务栈大小和指针、任务选项等关键要素。此外,还提及了任务创建和删除的细节以及任务状态管理。
摘要由CSDN通过智能技术生成

1 临界段

uC/OS-II在处理临界段代码时,是需要关闭中断的,处理完毕之后再开中断,这使得uC/OS-II能够避免同时有其他任务或中断服务进入临界代码段。

uC/OS-II定义了两个宏(macros)来关中断和开中断,以便避开不同C编译器厂商使用不同的方法来处理关中断和开中断。uC/OS-II的这两个宏调用分别是:

OS_ENTER_CRITICAL();

OS_EXIT_CRITICAL();

两个宏顾名思义,即进入临界段,退出临界段。这两个宏的定义是取决于所用的微处理器,所以在OS_CPU.H中可以找到定义。

2 任务

首先,任务必须是一个无限循环的函数,所以它永远也不会退出的,所以它的返回值必须为空。如下为一个任务的函数结构

void YourTask (void *pdata)     (1)
{
    for (;;) 
        {                       (2)
        /* user code */
        OSMboxPend();
        OSQPend();
        OSSemPend();
        OSTaskDel(OS_PRIO_SELF);
        OSTaskSuspend(OS_PRIO_SELF);
        OSTimeDly();
        OSTimeDlyHMSM();
        /* user code */
    }
}

OS开头的这些函数,都是uC/OS-II可以调用的服务。当然可以调用的服务远不止这些,在以后会慢慢来的。

为什么应用要是个死循环呢,因为我们在操作系统上跑程序,肯定不是希望程序跑一遍就结束了,所以要不断的重复跑任务,这个和前后台系统中的后台是一样的,都是死循环。那么如果我不希望这个任务工作,该如何处理?只需要把任务删除就好了,uC/OS-II系统也提供了删除函数:

OSTaskDel(OS_PRIO_SELF);

其中OS_PRIO_SELF就是你需要删除的任务的优先级。需要注意一点,任务被删除不代表它不存在了,只是不会被再执行而已了,它实际上是进入了任务五种状态之一的休眠态。休眠的任务可以通过调用以下函数被再次唤醒进入就绪态:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值