引言
我第一次听到操作系统这个概念的时候,感觉很抽象,理解不了。虽然生活中常常提到Windows操作系统,安卓操作系统,IOS操作系统,可是从技术层面上讲,究竟什么才是操作系统。我开始把操作系统理解成不同的规则,想要在这个操作系统下运行的程序就要遵守这个操作系统的规则。后来又把操作系统理解成管家,用来管理这些程序。假如你就是CPU的话,任务就是你要做的事,操作系统就是你的管家秘书,安排你的行程,使你工作更有效率。作为一只程序猿,其实这些操作系统就只是代码而已。看这些代码需要的C语言基础:数组、结构体、函数、指针、链表。请重点学习一下这些部分。
任务管理
操作系统里的任务其实就是各种程序,每个人物都要包括堆栈、控制块、函数三个部分。
任务堆栈
堆栈其实就是数组,用来保存被中断的任务的工作环境,当中断结束后,还原该任务的工作现场,继续工作。
任务栈的创建
每个任务都有自己的堆栈,穿件堆栈分为两个部分,首先确定栈的大小,然后定义是哪个任务的栈。
# define START_STK_SIZE 512;//栈的大小
CPU_STK START_TASK_STK(START_STK_SIZE);//任务堆栈
堆栈的使用
OSTASKCreate()函数中调用了堆栈,具体函数代码请查阅《UC/OS-III参考手册》。
任务控制块
任务控制块实际上是一个结构体,用来描述任务的属性,用户不能直接访问该结构体的成员,有一些成员需要条件编译。具体的成员含义参考《
UC/OS-III参考手册》
初始化
任务控制块的初始化在
OSTASKCreate()函数中实现,具体代码参考《UC/OS-III参考手册》。
任务函数
任务函数由用户编写,是用来实现你想实现的功能。
void XXX_Task(void *p_arg)
{
while
{
......;//任务处理过程
}
}
其他
系统任务:空闲任务、时钟节拍任务、统计任务、定时任务、中断服务管理任务;
任务状态:休眠、就绪、运行、等待、中断。五个任务之间的转换参考《嵌入式实时操作系统UC/OS-III》的60页。
任务就绪表:简单理解成找到优先级最高的任务,而且按照优先级排好了先后运行顺序。
更多精彩内容,欢迎关注微信公众号【跟单片机谈恋爱】