刚刚开始打算学习下usOS,看了几集极客学院的关于ucOS的基本概念,特此记录一下
uc/os-|| 是专门为计算机的嵌入式应用设计的操作系统,绝大部分是用C语言编写。CPU硬件相关部分是用汇编语言编写。具有很强的可移植性。
组成::系统核心(包含任务调度),任务管理,时间管理,多任务同步和通信,内存管理,CPU移植等部分。
核心(OSCore.c):处理核心,包括初始化,启动,中断管理,时钟中断,任务调度及事件处理等用于系统基本维持的函数。
任务管理(OSTask.c):包括与任务操作密切相关的函数,包括任务建立,删除,挂起及恢复,uc/os以任务为基本单位进行调度。
时钟部分(OSTime.c):ucos中以最小的时钟单位是timetick(时钟节拍),其中包含时间延迟,时钟设置及时钟恢复等与时钟相关的函数。
多任务同步与通信():包含事件管理函数,涉及Mbox,msgQ(消息队列),Sem,Mutex,Flag等。
内存管理部分():主要用于构建私有的内存分区管理机制,其中包含创建memPart,申请/释放menPart,获取分区信息等函数。
CPU接口部分:ucos 针对特定CPU的移植部分,由于涉及到SP等系统指针,通常用汇编编写,包括任务切换,中断处理等内容。
OSInit()是一个重要的函数,是OS运行的第一个函数。完成各初始变量的初始化,建立任务空闲键表OSTCBFreeList,建立事件空闲键表OSEventFreeList.创建一个空闲任务OS_TaskIdle等。
void OSTimeSet(INT32U ticks):无论时钟节拍何时发生,ucos都会将一个32位的计数器加1.这个计数器用户调用OSStart()初始化多任务的时候从0开始计数。
void OSStart(void)函数是ucos任务调度的引导函数,它调用更底层的函数OSStartHighRdy来完成最初的任务切换。
ucos主任务创建:
任务就是一个线程。
任务组成:任务控制块——保存任务的属性。
任务堆栈——保存了任务的工作环境。
OSTaskCreate():建立任务,可在多任务调度开始之前建立,也可以在其他任务的执行过程中被建立。在开始多任务调度之前,用户必须建立至少一个任务。任务不能由中断服务程序建立。
ucos的任务栈:
栈的作用:栈实际就是一个内存空间。函数调用需要用栈来保存现场。
任务栈:OSTaskStkInit——初始化堆栈
(1)任务的切换就是一个任务的信息保存和另一个任务的信息回复。
(2)函数可重入指,一个函数可被多个任务调用
心得:玩了一年多的ARM单片机,总是在跑裸机,于是想学学系统,由此RealTimeOS的ucOS就成了我学习系统的第一站,有点难其实,慢慢开始理解。