从0到1教你写UCOS-III
从0到1教你写UCOS-III
Sumjess
嵌入式
展开
-
从0到1教你写UCOS-III 第十部分:就绪列表
在 uC/OS-III 中,任务被创建后,任务的 TCB 会被放入就绪列表中,表示任务在就绪,随时可能被运行。就绪列表包含一个表示任务优先级的优先级表,一个存储任务 TCB 的TCB双向链表。10.1 优先级表: 优先级表在代码层面上来看,就是一个数组,在文件 os_prio.c(os_prio.c 第一次使用需要自行在文件夹 uCOS-III\Source ...原创 2019-05-02 21:59:00 · 1212 阅读 · 0 评论 -
从0到1教你写UCOS-III 第十五部分:任务的删除
本章开始,我们让 OS 的任务支持删除操作,一个任务被删除后就进入休眠态, 要想继续运行必须创新创建。15.1 实现任务删除15.1.1 编写任务删除函数1. OSTaskDel()函数 任务删除函数 OSTaskDel()用于删除一个指定的任务,也可以删除自身,在 os_task.c中定义,具体实现见代码清单 15-1。代码清单 15-1 OSTaskD...原创 2019-05-07 21:48:39 · 670 阅读 · 0 评论 -
从0到1教你写UCOS-III 第八部分:时间戳
本章实现时间戳用的是 ARM Cortex-M 系列内核中的 DWT 这个外设的功能,有关这个外设的功能和寄存器说明具体见手册“STM32F10xxx Cortex-M3 programming manual”8.1 时间戳简介: 在 uC/OS-III中,很多地方的代码都加入了时间测量的功能,比如任务关中断的时间,关调度器的时间等。知道了某段代码的运行时间,...原创 2019-04-30 15:10:31 · 2544 阅读 · 0 评论 -
从0到1教你写UCOS-III 第七部分:阻塞延时与空闲任务
在上一章节中,任务体内的延时使用的是软件延时,即还是让 CPU 空等来达到延时的效果。使用 RTOS 的很大优势就是榨干 CPU 的性能,永远不能让它闲着,任务如果需要延时也就不能再让 CPU 空等来实现延时的效果。 RTOS 中的延时叫阻塞延时,即任务需要延时的时候,任务会放弃 CPU的使用权, CPU可以去干其它的事情,当任务延时时间到,重新获取 CPU使用权,任务继续运行,这样...原创 2019-04-30 09:05:01 · 1043 阅读 · 0 评论 -
从0到1教你写UCOS-III 第六部分:任务时间片运行
本章在上一章的基础上,加入 SysTick 中断,在 SysTick中断服务函数里面进行任务切换,从而实现双任务的时间片运行,即每个任务运行的时间都是一样的。6.1 SysTick 简介: RTOS 需要一个时基来驱动, 系统任务调度的频率等于该时基的频率。 通常该时基由一个定时器来提供,也可以从其它周期性的信号源获得。刚好 Cortex-M 内核中有一个系...原创 2019-04-30 08:32:14 · 1330 阅读 · 0 评论 -
从0到1教你写UCOS-III 第四部分:裸机系统与多任务系统
在真正开始动手写 RTOS 之前,我们先来讲解下单片机编程中的裸机系统和多任务系统的区别。4.1 裸机系统 裸机系统通常分成轮询系统和前后台系统,有关这两者的具体实现方式请看下面的讲解。4.1.1 轮询系统 轮询系统即是在裸机编程的时候, 先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环, 顺序地做各种事情,大概的伪代码具体见代码清单 4...原创 2019-04-24 21:59:20 · 1189 阅读 · 0 评论 -
从0到1教你写UCOS-III 第三部分:新建工程-软件仿真
在开始写 RTOS 之前,我们先新建一个工程, Device 选择 Cortex-M3 内核的处理器,调试方式选择软件仿真,到最后写完整个 RTOS 之后,我们再把 RTOS 移植到野火 STM32开发板上,到了最后的移植其实已经非常简单,只需要换一下启动文件和添加 bsp 驱动就行。3.1 新建本地工程文件夹: 在开始新建工程之前,我们先在本地电脑端新建一个文件...原创 2019-04-24 21:57:17 · 1621 阅读 · 1 评论 -
从0到1教你写UCOS-III 第二部分:如何学习RTOS?
2.1 为什么要学习 RTOS? 当我们进入嵌入式这个领域的时候, 往往首先接触的都是单片机编程, 单片机编程又首选 51 单片机来入门。 这里面说的单片机编程通常都是指裸机编程,即不加入任何 RTOS(Real Time Operation System 实时操作系统) 的程序。 常用的 RTOS 有国外的 FreeRTOS、ucOS、 RTX和国内的 Huawei LiteOS、...原创 2019-04-24 21:56:13 · 1259 阅读 · 0 评论 -
从0到1教你写UCOS-III 第五部分:任务的定义与任务切换的实现
5.1 本章目标: 本章是我们真正从从 0 到 1 写 RTOS 的第一章, 属于基础中的基础, 必须要学会创建任务,并重点掌握任务是如何切换的。 因为任务的切换是由汇编代码来完成的,所以代码看起来比较难懂,但是我会尽力把代码讲得透彻。 如果本章内容学不会,后面的内容根本无从下手。 在这章中, 我们会创建两个任务,并让这两个任务不断地切换,任务的主体都是让一个变量按...原创 2019-04-29 00:23:56 · 3292 阅读 · 0 评论 -
从0到1教你写UCOS-III 第十三部分:实现时间片
本章开始,我们让 OS 支持同一个优先级下可以有多个任务的功能,这些任务可以分配不同的时间片,当任务时间片用完的时候,任务会从链表的头部移动到尾部,让下一个任务共享时间片,以此循环。13.1 实现时间片:13.1.1 修改任务 TCB: 为了实现时间片功能,我们需要先在任务控制块 TCB 中添加两个时间片相关的变量,具体见代码清单 13-1 的加粗部分。代码...原创 2019-05-03 21:49:35 · 1116 阅读 · 1 评论 -
从0到1教你写UCOS-III 第十二部分:实现时基列表
从本章开始,我们在 OS 中加入时基列表,时基列表是跟时间相关的, 处于延时的任务和等待事件有超时限制的任务都会从就绪列表中移除,然后插入到时基列表。 时基列表在 OSTimeTick 中更新,如果任务的延时时间结束或者超时到期,就会让任务就绪,从时基列表除,插入到就绪列表。 到目前为止,我们在 OS 中只实现了两个列表,一个是就绪列表,一个是本章将要实现的时基列表,在本章之前,任务...原创 2019-05-03 21:49:06 · 1288 阅读 · 1 评论 -
从0到1教你写UCOS-III 第十一部分:支持多优先级
在本章之前, OS 还没有到优先级,只支持两个任务互相切换,从本章开始, 任务中我们开始加入优先级的功能。在 uC/OS-III 中,数字优先级越小,逻辑优先级越高。11.1 定义优先级相关全局变量: 在支持任务多优先级的时候,需要在 os.h 头文件添加两个优先级相关的全局变量,具体定义见代码清单 11-1。代码清单 11-1 定义优先级相关全局变量/...原创 2019-05-03 21:48:41 · 809 阅读 · 0 评论 -
从0到1教你写UCOS-III 第九部分:临界段
9.1 临界段简介: 临界段代码,也称作临界域,是一段不可分割的代码。 uCOS 中包含了很多临界段代码。如果临界段可能被中断,那么就需要关中断以保护临界段。如果临界段可能被任务级代码打断,那么需要锁调度器保护临界段。 临界段用一句话概括就是一段在执行的时候不能被中断的代码段。在 uCOS 里面,这个临界段最常出现的就是对全局变量的操作,全局变量就好像是一个枪把子,...原创 2019-05-02 21:59:30 · 1538 阅读 · 0 评论 -
从0到1教你写UCOS-III 第十四部分:任务的挂起和恢复
本章开始,我们让 OS 的任务支持挂起和恢复的功能,挂起就相当于暂停,暂停后任务从就绪列表中移除,恢复即重新将任务插入到就绪列表。 一个任务挂起多少次就要被恢复多少次才能重新运行。14.1 实现任务的挂起和恢复14.1.1 定义任务的状态 在任务实现挂起和恢复的时候,要根据任务的状态来操作,任务的状态不同,操作也不同,有关任务状态的宏定义在 os.h 中实现,总...原创 2019-05-07 21:48:52 · 887 阅读 · 0 评论