大家好,我们又见面了,我是你们的朋友全栈君。
前言:
首先,比较主流的操作系统包括UCOSII、FREERTOS和linux等,其中UCOSII的资料相对丰富得多。
更重要的是,我目前还没有能力深入研究linux操作系统。因此,本次学习UCOSII主要是了解内核的设计原理。
本专栏涉及的API使用非常少,仅作为我的学习记录。后续也会对比UCOSIII,介绍更多功能的实现代码。
参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》
学习代码来源:https://www.php.cn/link/330add99531b6d578cc1c18e8444b10a
1、操作系统的作用
操作系统是计算机硬件系统与应用程序之间的接口。应用程序开发人员主要通过操作系统提供的API来使用计算机系统,而不需要关心这些底层函数是如何实现的。
2、嵌入式系统的特点:
(1)专用性强:嵌入式系统通常针对特定应用设计,因此硬件是为特定用户群体定制的。
(2)可裁剪性:例如,Linux系统有许多网络协议栈,对于数码相框这样的应用,如果不需要这些功能,可以直接移除相应的源码。
(3)实时性与可靠性:实时性并不意味着代码必须立即执行,而是指代码可以在适当的时间内执行。由于操作系统的机制,如资源抢占,低优先级任务无法立即获得所需资源。
3、裸机与操作系统的最大区别:
裸机是在main函数中连续执行,只有中断会跳转到其他代码。执行顺序是线性的,可以通过代码追踪执行流程。
引入操作系统后,main函数通过函数堆栈切换到第一个任务。高优先级任务优先执行,形成多个main函数并行执行的假象。
4、任务的c语言表示:
任务是无返回值的函数,通常通过死循环实现。
void task1(void * param){ for(;;){ // 用户编写的代码 } }
有人可能会奇怪,为什么在函数中添加死循环?这是因为需要在循环中添加中断代码,以便在任务切换时根据优先级进行切换。
5、嵌入式实时操作系统的基本功能:
(1)内存管理:
内存管理主要是动态内存管理。应用程序可以通过操作系统提供的内存分配函数获取所需的内存空间。动态内存分配如malloc和free函数,从堆中获取内存,这对于内存有限的嵌入式系统尤为重要。
(2)多任务管理:
裸机是单任务的前后台程序,即一个任务加上中断。引入操作系统后,开发人员可以按多线程设计程序,提高程序的耦合性和单元测试的便利性,增强代码的可复用性。
(3)外围资源管理:
除了内存和CPU,操作系统还需要管理各种输入输出设备。由于资源有限,操作系统必须合理调度和管理这些资源,确保每个任务在运行时能获得所需的资源。
6、UCOS的代码结构:
我们需要从整体上分析UCOS的代码结构,因为有些部分在UCOS中不需要深入理解。
发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/09d1d2fa86fbc25c85269b522d96b9a9