Rev.2
修改历史
版本
日期
章节
页码
修改记录
Rev.0
2022.11.18
全部
全部
首次发布
Rev.1
2023.06.19
全部
全部
增加了任务调度方法
Rev.2
2023.12.15
全部
全部
优化了任务调度方法,提高了任务切
换效率
Rev.2
目录
1 前言 ...................................................................................................................... 5
2 参考文件 .............................................................................................................. 6
3 嵌入式操作系统原理概述 .................................................................................. 7
4 必要知识点学习 .................................................................................................. 8
4.1 典型 ARM 汇编指令介绍........................................................................ 8
4.2 COTEX-M3 CPU 寄存器介绍 ............................................................... 12
4.2.1 R0-R12:通用寄存器 ..................................................................... 12
4.2.2 Banked R13: 两个堆栈指针 ........................................................... 12
4.2.3 R14:连接寄存器 ........................................................................... 13
4.2.4 R15:程序计数器 ........................................................................... 13
4.2.5 特殊功能寄存器 ............................................................................. 13
4.3 MSP 与 PSP 介绍 ................................................................................... 15
5 整体设计 ............................................................................................................ 17
6 详细设计 ............................................................................................................ 18
6.1 任务创建 ................................................................................................ 18
6.1.1 任务及任务栈创建 ......................................................................... 18
6.1.2 任务栈初始化 ................................................................................. 22
6.2 任务调度 ................................................................................................ 24
6.2.1 创建休眠和就绪任务链表 ............................................................. 24
Rev.2
6.2.1 任务休眠管理 ................................................................................. 26
6.2.2 任务就绪管理 ................................................................................. 27
6.2.3 系统嘀嗒定时中断调度 ................................................................. 28
6.2.4 任务延时调度 ................................................................................. 29
6.3 任务切换 ................................................................................................ 29
7 测试 .................................................................................................................... 31
7.1 功能测试 ................................................................................................ 31
7.2 性能测试 ................................................................................................ 31
Rev.2
1 前言
自从事嵌入式软件开发工作以来,一直采用状态机的编程思想进行软件开
发,在软件开发的过程中不管多大的项目也没有遇到过状态机编程解决不了的
问题,也可以及时有效的实现多任务的并发(单 CPU 不可能实现程序的并
行),因此感觉根本没必要使用嵌入式操作系统,也没对嵌入式操作系统进行
过多的研究(虽然也知道些操作系统的实现任务并发的原理)。
此次对嵌入式操作系统研究的契机是接手了一个软件项目,要求在尽量不
动应用层嵌入式软件的前提下进行硬件替换(硬件是老式 x86 架构),软件包
含最精简的 bios 汇编代码+嵌入式实时操作系统+应用程序(但它们基本是整合
到一块儿的)。虽然觉得移植的可行性微乎其微,但还是得硬着头皮上。在项
目执行过程中已经找到了 bios 引导程序的替换方案(期间了解了一些 x86 相关
的知识,甚至翻译过机器码,后期会在其它文档里将我了解到东西写下来),
但嵌入式实时操作系统也要适配新硬件(尤其涉及到地址相关的,比较麻
烦),并且要找到它和应用层代码的操作接口,因此必须还得研究该操作系统
的实现。由于本人工作以来一直从事的是 arm 架构处理器的嵌入式软件开发
(即使跑 linux 也是基于 arm 平台),因此想要在基于 arm 架构 cotex-m 核的处
理器上研究通用的嵌入式实时操作系统。
大多数中国软件工程师一谈到操作系统底层就会感觉特别神秘,像个黑匣
子一样,以至于对这些未知的领域感到恐惧。其实老外也是将简单技术一点点
积累优化起来,时间长了也就变的复杂了,让人一看就头疼(里面的代码很多
都是地址指针操作,对于指针认识比较浅的工程师,看底层代码还是比较费
劲)。就像数学一样,世界上所有数学原理都是基于最初的几条公理,这几条
公理也是异常简单。这篇文档主要就是想把嵌入式操作系统最底层的公理摘出
来,并形成自己的语言。