操作系统μC/OS-Ⅱ读书笔记(2)

本文详细介绍了μC/OS-Ⅱ操作系统中的任务管理,包括任务的基本概念、任务状态转换、任务堆栈、任务控制块、任务调度、任务创建以及初始化。任务是μC/OS-Ⅱ操作系统核心,通过任务控制块和任务堆栈实现任务状态管理,调度器基于任务优先级进行任务切换。文章还讨论了任务的创建、挂起、恢复和删除等操作,以及μC/OS-Ⅱ的初始化和启动流程。
摘要由CSDN通过智能技术生成
第3章μC/OS-Ⅱ中的任务
3.1任务的基本概念
☆μC/OS-Ⅱ操作系统内核的主要工作就是对任务进行管理和调度
☆任务
☆μC/OS-Ⅱ就是能对小任务的运行进行管理和调度的多任务操作系统
☆代码上看,μC/OS-Ⅱ的任务是一个函数,从任务的存储结构上看,μC/OS-Ⅱ的任务由三个部分组成:任务程序代码(函数),任务堆栈和任务控制块。
任务代码:任务的执行部分
任务堆栈:保存任务的工作环境
任务控制块(TCB):任务了任务代码的程序控制块,记录了任务的各个属性

☆μC/OS-Ⅱ的任务(最多含有64个任务):用户任务(应用程序设计者编写的任务,为了解决应用问题而编写的)和系统任务(由系统提供的任务,为应用程序提供某种服务或系统本身服务)
☆任务的状态
任务的状态 说明
睡眠状态 任务只是以代码的形式驻留在程序空间(ROM或RAM),还没有交给操作系统管理时的情况叫做睡眠状态。简单地说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态
就绪状态 如果系统为配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件,这时任务的状态就叫做就绪状态
运行状态 处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态,任何时刻只能有一个任务处于运行状态,就绪的人任务只有当所有优先级高于本任务的任务都转为等待状态时,才能进入运行状态。
等待状态 正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入等待状态。
中断服务状态 一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务,这时任务的状态叫做中断服务状态。

☆任务在不同状态之间的转换图

☆用户任务代码的一般结构
根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫做超循环结构。
示例:
void Mytask (void * pdata)
{
for(;;)
{
可以被中断的用户代码;
OS_ENTER_CRITICAL(); //进入临界段(关中断)
不可以被中断的用户的代码;
OS_EXIT_CRITICAL(); //退出临界段(开中断)
可以被中断得用户代码;
}
}
从程序设计的角度来看,一个μC/OS-Ⅱ任务的代码就是一个C语言函数。同时为了可以传递各种不同类型德 数据甚至是函数,任务的参数是一个void类型的指针。
μC/OS-Ⅱ里定义的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()用以有效地对中断进行控制。
而在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码叫做临界段。在具体应用中可以根据实际需要在一个任务中使用这对宏从而设置多个临界段。
因此,μC/OS-Ⅱ任务的代码结构是一个带有临界段的无限循环。
☆用户应用程序的一般结构
从程序设计来看,用户任务是一个任务(进程)。不会被主函数或其他函数调用,主函数只负责创建和启动它们,而由操作系统负责调度运行它们。
用户应用程序的代码示例:
void MyTask1(void *pdata) //定义用户任务1
{
for(;;)
{
……
}
}
void MyTask2(void *pdata) //定义用户任务2
{
for(;;)
{
……
}
}
void MyTask3(void *pdata) //定义用户任务3
{
for(;;)
{
……
}
}

void main()
{
……
OSInit(); //初始化μC/OS-Ⅱ
……
OSTaskCreate(MyTask1,……); //创建用户任务1
OSTaskCreate(MyTask2,……); //创建用户任务2
OSTaskCreate(MyTask3,……); //创建用户任务3
……
OSSTART(); //启动μC/OS-Ⅱ

……
}
其中,OSTaskCreate()为操作系统μC/OS-Ⅱ提供的用来创建任务的函数;OSStart()为操作系统μC/OS-Ⅱ提供的启动各任务的函数,使用之后,任务就交由操作系统来管理和调度了。
☆系统任务
μC/OS-Ⅱ里所定义的两个应用程序的系统任务:
空闲任务(每个应用程序必须使用的):
在多任务系统运行时,系统经常会在某个时间内无用户任务可运行而处于所谓的空闲态。为使CPU在没有用户任务可执行时有事可做,μC/OS-Ⅱ提供了一种叫做空闲任务OSTaskIdle()的系统任务。
void OSTASKIdle(void * pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif

pdata = pdata; //防止某些编译器报错
for(;;)
{
OS_ENTER_CRITICAL(); //关闭中断
OSdleCtr++; //计数
OS_EXIT_CRITICAL(); //开放中断 <
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
This book describes the design and implementation of mC/OS-II (pronounced "Micro C O S 2") which stands for<br>Micro-Controller Operating System Version 2. μC/OS -II is based on μC/OS, The Real-Time Kernel which was first<br>published in 1992. Thousands of people around the world are using μC/OS in all kinds of applications such as<br>cameras, medical instruments, musical instruments, engine controls, network adapters, highway telephone call boxes,<br>ATM machines, industrial robots, and many more. Nu merous colleges and Universities have also used μC/OS to<br>teach students about real-time systems.<br>μC/OS-II is upward compatible with μC/OS (V1.11) but provides many improvements over μC/OS such as the<br>addition of a fixed-sized memory manager, user definable callouts on task creation, task deletion, task switch and<br>system tick, supports TCB extensions, stack checking and, much more. I also added comments to just about every<br>function and I made μC/OS -II much easier to port to different processors. The source code in μC/OS was found in two<br>source files. Because μC/OS-II contains many new features and functions, I decided to split μC/OS-II in a few source<br>files to make the code easier to maintain.<br>If you currently have an application (i.e. product) that runs with μC/OS, your application should be able to run,<br>virtually unchanged, with μC/OS-II. All of the services (i.e. function calls) provided by μC/OS have been preserved.<br>You may, however, have to change include files and product build files to ‘point’ to the new file names.<br>This book contains ALL the source code for μC/OS-II and a port for the Intel 80x86 processor running in Real-Mode<br>and for the Large Model. The code was developed on a PC running the Microsoft Windows 95 operating system.<br>Examples run in a DOS compatible box under the Windows 95 environment. Development was done using the<br>Borland International C/C++ compiler version 3.1. Although μC/OS-II was developed and tested on a PC, mC/OS-II<br>was actually targeted for embedded systems and can easily be ported to many different processor architectures.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值