- 嵌入式操作系统的特点:
必要性:嵌入式系统软件愈加庞大复杂。
微型化、可裁剪:软、硬件小而精,够用即可。
实时性:抢占式管理策略,满足时件正确性。
可靠性:无人值守、自动化设备的使用要求。
易移植:便于应用到多种的硬件平台。
微内核:完成OS主要功能的代码很小。
- 嵌入式操作系统的基本功能:
多任务管理:丰富的多任务管理函数供目标系 统设计者容易完成多任务应用设计。
内存管理:动态内存管理充分利用硬件资源。
外设管理:例如I2C、UART、Timer、SPI等设 备的驱动。
- 实时操作系统VS分时操作系统
实时性:计时性,能够在要求的时间内响应并处理完系统事件。
实时系统的正确性:既要逻辑正确,还要时间正确。
- uC/OS-II的两种任务:系统任务、用户任务。
- μC/OS_II进行任务调度的思想是“近似地每时每 刻总是让优先级最高的就绪任务处于运行状 态” 。为了保证这一点,它在系统或用户任务 调用系统函数及执行中断服务程序结束时总是 调用调度器,来确定应该运行的任务并运行它 。
- 任务的5种状态:
Sleep(睡眠状态):任务没有被配备任务控制块或被剥夺了任务控制块的状态
Ready(就绪状态):系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记。
Running(运行状态):处于就绪状态的任务如果经调度器判断获得了CPU的使用权。
Wait(等待状态):正在运行的任务,需要等待一段事件或需要等待一个事件发生在运行的使用权。。。
ISR_Sta(中断服务状态):一个正在运行任务一旦响应中断申请就会中止运行而去执行中断服务程序。
- 任务的有限权和有限级别:
uC/OS-II的每一个任务都必须有唯一的优先级。
uC/OS-II最多可以管理64个优先级别分配给64个任务。
uC/OS-II 中用一个8b的整型数(低6b有效)来表示优先级 别,数字越小,优先级越高,prio = 0 的任务优先级最高。
uC/OS-II 中使用任务的优先级(prio)作为任务句柄。
系统任务
- 空闲任务(OS_Taskdle())使用说明:
uC/OS-II规定用户程序中必须使用空闲任务。
该任务不能通过程序来删除。
该任务是uC/OS-II初始化时自动创建,其任务优先级固定为 最低级,用户也可修改该任务的业务。
目的 ---- 使 CPU 在没有用户任务可执行时也有事可做。
- 统计任务(OS_TaskStat())使用说明:
- 该任务固定拥有次末任务优先级。
- 任务的组成:
任务控制块 —— uC/OS-II进行任务管理用的一个数据结构。
任务代码 —— 描述任务算法的程序编码。
任务堆栈 —— 任务的工作现场环境。
- 任务堆栈的使用注意事项 :存在两种堆栈形式
递减堆栈 ---- 进栈操作向小 地址方向发展。(向上增长)
递增堆栈 ---- 进栈操作向大地 址9方向发展。(向下增长)
- 空任务控制块链表
当进行系统初始化时,初始化函数 OSInit()会按用户提供的任务数为系 统创建具有相应数量的任务控制块并 把它们链接为一个链表。
由于这些任务控制块还没有对应的 任务,故这个链表叫做空任务块链表。 即相当于是一些空白的身份证。
当应用程序调用函数OSTaskCreate( )创建一个任务时,这个函数内部会调用系统函数 OSTCBInit( )来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表 获取一个任务控制块,然后用任务的属性对任 务控制块各个成员进行赋值,最后再把这个任 务控制块链入到任务控制块链表的头部。
任何OS都要提供一个周期性的信号源,如用于系统定 时、延时、超时判断等,这个周期性的信号叫时钟,定时 通常由硬件定时器实现。
uC/OS-II与大多数计算机系统一样,用硬件定时器产生 一个周期为毫秒级别的周期性中断来实现系统时钟。
最小的时钟单位就是两次中断之间相间隔的时间,这个最小的时钟单位叫做时钟节拍(Time Tick)。
硬件定时器以时钟节拍为周期定时地产生中断,该中断的中断服务程序叫做OSTickISR(),通过调用 OSTimeTick( ) 函数,完成每个OS节拍的系统工作。
任务件的同步和时间控制块
任务之间的这种相互制约、相互合作的运行机制称为 “任务间的同步”
uC/OS-II系统中任务之间通过相互传递事件,来实现任 务的同步、依次协作。
- 任务间的同步和事件控制块
互斥信号量是一个二值信号量,主要用于 “独占式共享 资源” 的管理(例如:打印机)。
计数型信号量用于 “多个同类型资源” 的管理,通常用 一个计数器实现。(“>0”就说明有资源可用)
- 事件——消息邮箱(Mbox)
- 在多任务OS中采用消息传送的方式实现任务间的 “单批次数据” 通信,这个数据称为 “消息” 。
- 事件——消息队列
- 用于解决任务间的 “多个数据” 传送问题。(定义 一个指针数组,让指针数组的每个元素都存放一个消 息缓冲区指针)
三类事件:信号量/互斥信号量、消息邮箱、消息队列。
互斥型信号和任务优先级反转:
- 解决问题的办法之一,是使获得信号量任务的优先级别在使用共享资源期间暂时提 升到所有任务最高优先级的高一个级别上, 以使该任务不被其他的任务所打断,从而 能尽快地使用完共享资源并释放信号量, 然后在释放了信号量之后再恢复该任务原 来的优先级别。
互斥型信号量是一个二值信号量,是 一种解决“任务优先级反转”现象的特 殊信号量,主要用于处理任务对共享资 源独占问题。为此,“事件” 数据结构 上有一些特殊:
消息邮箱功能:用于在任务件传递一个数据;
- 消息邮箱使用传递变量指针的手段在任务之间进行通信。
- 消息队列:用于任务或ISR向其他任务传送多条数据;
在实际应用中,任务常需要与多个事件同步。即需要根据多个逻辑信号量组合作用(逻辑运算)的结果来决定任务的运行方式。uC/OS-II中定义了一种特殊的数据结构——信号量集,来专用于此类 事务的管理。
位图默认16位,每一位都对应一个信号量,用来接收并保存其他任务发送来的信号量,值,可以看做输入信号暂存器。
uC/OS-II为什么要进行动态内存管理?
答:合理有效地对内存存储器进行分配和管理,是衡量一个操作系统品质的指标之一,比较完善的操作系统必须具有动态分配内存的能力。
uC/OS-II改进了标准C用来动态和释放内存的函数malloc()和free(),实现了动态内存分配管理的实时性要求,保证系统在动态内存分配时,执行时间时可确定的。
- uC/OS-II对内存进行两级管理:
- uC/OS-II中将连续的大块内存按分区来管理,称之为 “内存
- 嵌入式操作系统的特点:
必要性:嵌入式系统软件愈加庞大复杂。
微型化、可裁剪:软、硬件小而精,够用即可。
实时性:抢占式管理策略,满足时件正确性。
可靠性:无人值守、自动化设备的使用要求。
易移植:便于应用到多种的硬件平台。
微内核:完成OS主要功能的代码很小。
- 嵌入式操作系统的基本功能:
多任务管理:丰富的多任务管理函数供目标系 统设计者容易完成多任务应用设计。
内存管理:动态内存管理充分利用硬件资源。
外设管理:例如I2C、UART、Timer、SPI等设 备的驱动。
- 实时操作系统VS分时操作系统
实时性:计时性,能够在要求的时间内响应并处理完系统事件。
实时系统的正确性:既要逻辑正确,还要时间正确。
- uC/OS-II的两种任务:系统任务、用户任务。
- μC/OS_II进行任务调度的思想是“近似地每时每 刻总是让优先级最高的就绪任务处于运行状 态” 。为了保证这一点,它在系统或用户任务 调用系统函数及执行中断服务程序结束时总是 调用调度器,来确定应该运行的任务并运行它 。
- 任务的5种状态:
Sleep(睡眠状态):任务没有被配备任务控制块或被剥夺了任务控制块的状态
Ready(就绪状态):系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记。
Running(运行状态):处于就绪状态的任务如果经调度器判断获得了CPU的使用权。
Wait(等待状态):正在运行的任务,需要等待一段事件或需要等待一个事件发生在运行的使用权。。。
ISR_Sta(中断服务状态):一个正在运行任务一旦响应中断申请就会中止运行而去执行中断服务程序。
- 任务的有限权和有限级别:
uC/OS-II的每一个任务都必须有唯一的优先级。
uC/OS-II最多可以管理64个优先级别分配给64个任务。
uC/OS-II 中用一个8b的整型数(低6b有效)来表示优先级 别,数字越小,优先级越高,prio = 0 的任务优先级最高。
uC/OS-II 中使用任务的优先级(prio)作为任务句柄。
系统任务
- 空闲任务(OS_Taskdle())使用说明:
uC/OS-II规定用户程序中必须使用空闲任务。
该任务不能通过程序来删除。
该任务是uC/OS-II初始化时自动创建,其任务优先级固定为 最低级,用户也可修改该任务的业务。
目的 ---- 使 CPU 在没有用户任务可执行时也有事可做。
- 统计任务(OS_TaskStat())使用说明:
- 该任务固定拥有次末任务优先级。
- 任务的组成:
任务控制块 —— uC/OS-II进行任务管理用的一个数据结构。
任务代码 —— 描述任务算法的程序编码。
任务堆栈 —— 任务的工作现场环境。
- 任务堆栈的使用注意事项 :存在两种堆栈形式
递减堆栈 ---- 进栈操作向小 地址方向发展。(向上增长)
递增堆栈 ---- 进栈操作向大地 址9方向发展。(向下增长)
- 空任务控制块链表
当进行系统初始化时,初始化函数 OSInit()会按用户提供的任务数为系 统创建具有相应数量的任务控制块并 把它们链接为一个链表。
由于这些任务控制块还没有对应的 任务,故这个链表叫做空任务块链表。 即相当于是一些空白的身份证。
当应用程序调用函数OSTaskCreate( )创建一个任务时,这个函数内部会调用系统函数 OSTCBInit( )来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表 获取一个任务控制块,然后用任务的属性对任 务控制块各个成员进行赋值,最后再把这个任 务控制块链入到任务控制块链表的头部。
任何OS都要提供一个周期性的信号源,如用于系统定 时、延时、超时判断等,这个周期性的信号叫时钟,定时 通常由硬件定时器实现。
uC/OS-II与大多数计算机系统一样,用硬件定时器产生 一个周期为毫秒级别的周期性中断来实现系统时钟。
最小的时钟单位就是两次中断之间相间隔的时间,这个最小的时钟单位叫做时钟节拍(Time Tick)。
硬件定时器以时钟节拍为周期定时地产生中断,该中断的中断服务程序叫做OSTickISR(),通过调用 OSTimeTick( ) 函数,完成每个OS节拍的系统工作。
任务件的同步和时间控制块
任务之间的这种相互制约、相互合作的运行机制称为 “任务间的同步”
uC/OS-II系统中任务之间通过相互传递事件,来实现任 务的同步、依次协作。
- 任务间的同步和事件控制块
互斥信号量是一个二值信号量,主要用于 “独占式共享 资源” 的管理(例如:打印机)。
计数型信号量用于 “多个同类型资源” 的管理,通常用 一个计数器实现。(“>0”就说明有资源可用)
- 事件——消息邮箱(Mbox)
- 在多任务OS中采用消息传送的方式实现任务间的 “单批次数据” 通信,这个数据称为 “消息” 。
- 事件——消息队列
- 用于解决任务间的 “多个数据” 传送问题。(定义 一个指针数组,让指针数组的每个元素都存放一个消 息缓冲区指针)
三类事件:信号量/互斥信号量、消息邮箱、消息队列。
互斥型信号和任务优先级反转:
- 解决问题的办法之一,是使获得信号量任务的优先级别在使用共享资源期间暂时提 升到所有任务最高优先级的高一个级别上, 以使该任务不被其他的任务所打断,从而 能尽快地使用完共享资源并释放信号量, 然后在释放了信号量之后再恢复该任务原 来的优先级别。
互斥型信号量是一个二值信号量,是 一种解决“任务优先级反转”现象的特 殊信号量,主要用于处理任务对共享资 源独占问题。为此,“事件” 数据结构 上有一些特殊:
消息邮箱功能:用于在任务件传递一个数据;
- 消息邮箱使用传递变量指针的手段在任务之间进行通信。
- 消息队列:用于任务或ISR向其他任务传送多条数据;
在实际应用中,任务常需要与多个事件同步。即需要根据多个逻辑信号量组合作用(逻辑运算)的结果来决定任务的运行方式。uC/OS-II中定义了一种特殊的数据结构——信号量集,来专用于此类 事务的管理。
位图默认16位,每一位都对应一个信号量,用来接收并保存其他任务发送来的信号量,值,可以看做输入信号暂存器。
uC/OS-II为什么要进行动态内存管理?
答:合理有效地对内存存储器进行分配和管理,是衡量一个操作系统品质的指标之一,比较完善的操作系统必须具有动态分配内存的能力。
uC/OS-II改进了标准C用来动态和释放内存的函数malloc()和free(),实现了动态内存分配管理的实时性要求,保证系统在动态内存分配时,执行时间时可确定的。
- uC/OS-II对内存进行两级管理:
- uC/OS-II中将连续的大块内存按分区来管理,称之为 “内存