![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
操作系统学习及开发经验分享
_Amen
自律自由
展开
-
实时操作系统UCOS学习笔记15----存储管理
作为一个操作系统,内存管理是其必备的功能,在UCOSIII中也有内存管理模块,使用内存管理模块可以动态的分配和释放内存,这样可以高效的使用“昂贵”的内存资源,本章讲解一下UCOSIII的内存管理。1、存储管理简介内存管理是一个操作系统必备的系统模块,我们在用VC++或者visual studio学习C语言的时候会使用malloc()函数和free()函数来申请和释放内存。我们在使用MDK编写STM32程序的时候就可以使用malloc()和free(),但是不建议这么用,这样的操作会将原来大块内存逐渐的分原创 2020-10-16 14:41:39 · 553 阅读 · 0 评论 -
实时操作系统UCOS学习笔记14----同时等待多个内核对象
在前几章中讲解了任务如何等待单个对象,比如信号量、互斥信号量、消息队列和事件标志组等。本章讲解一下UCOSIII如何同时等待多个内核对象,在UCOSIII中只支持同时等待多个信号量和消息队列,不支持同时等待多个事件标志组和互斥信号量。1、同时等待多个内核对象UCOSIII中一个任务可以同时等待任意数量的信号量或者消息队列,当只要等到其中的任意一个的时候就会导致该任务进入就绪态,如下图所示。在上图中任务通过调用函数OSPendMulti()来等待多个内核对象,我们可以设定一个等待超时值,如果在指定的时原创 2020-10-15 17:20:09 · 414 阅读 · 0 评论 -
实时操作系统UCOS学习笔记13----事件标志组
前面讲过可以使用信号量来完成任务同步,这里再讲解一下另外一种任务同步的方法,就是事件标志组,事件标志组用来解决一个任务和多个事件之间的同步。1、事件标志组有时候一个任务可能需要和多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间是有2种同步机制:“或”同步和“与”同步,当任何一个事件发生,任务都被同步的同步机制是“或”同步;需要所有的事件都能发生任务才会被同步的同步机制是“与”同步,这2种同步机制如下图所示。在UCOSIII中事件标志组是OS_FLAG_GRP,在os.h文件中有定义原创 2020-10-15 16:38:32 · 894 阅读 · 0 评论 -
实时操作系统UCOS学习笔记12---UCOSIII消息传递
有时候一个任务要和另外一个或者几个任务进行“交流”,这个“交流”就是消息的传递,也称为任务间通信,在UCOSIII中消息可以通过消息队列作为中介发布给任务,也可以直接发布给任务,本章讲解一个UCOSIII中的消息传递。1、消息队列消息一般包含:指向数据的指针,表明数据长度的变量和记录消息发布时刻的时间戳,指针指向的可以是一块数据区或者甚至是一个函数,消息的内容必须一直保持可见性,因为发布数据采用的是引用传递是指针传递而不是值传递,也就是说,发布的数据本身不产生数据拷贝。在UCOSII中有消息邮箱和消息原创 2020-10-15 11:18:38 · 1384 阅读 · 1 评论 -
实时操作系统UCOS学习笔记11----UCOSIII信号量(Sem)和互斥信号量(Mutex)
在UCOSIII中有可能会有多个任务会访问共享资源,因此信号量最早用来控制任务存取共享资源,现在信号量也被用来实现任务间的同步以及任务和ISR间同步。在可剥夺的内核中,当任务独占式使用共享资源的时候,会出现低优先级的任务先于高优先级任务运行的现象,这个现象被称为优先级反转,为了解决优先级反转这个问题,UCOSIII引入了互斥信号量这个概念。本章,就来讲解一下UCOSIII的信号量和互斥信号量。1、信号量信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被原创 2020-09-04 11:40:06 · 2312 阅读 · 2 评论 -
实时操作系统UCOS学习笔记10----软件定时器
在学习单片机的时候会使用定时器来做很多定时任务,这个定时器是单片机自带的,也就是硬件定时器,在UCOSIII中提供了软件定时器,我们可以使用这些软件定时器完成一些功能,本章讲解一些UCOSIII的软件定时器。定时器工作模式定时器其实就是一个递减计数器,当计数器递减到0的时候就会触发一个动作,这个动作就是回调函数,当定时器计时完成时就会自动的调用这个回调函数。因此我们可以使用这个回调函数来完成一些设计。比如,定时10秒后打开某个外设等等,在回调函数中应避免任何可以阻塞或者删除定时任务的函数。如果要使用定时原创 2020-09-01 17:37:33 · 497 阅读 · 0 评论 -
实时操作系统UCOS学习笔记9----UCOSIII 中断和时间管理
本章讲解UCOSIII的中断处理和时间管理,在使用UCOS操作系统的时候我们对于中断服务程序的处理就要做一点修改,这个和我们不使用操作系统的时候是不同的。我们在对某些任务做延时的时候会使用到一些延时函数,本章就讲解一下这两个知识点。1、中断管理1.1 UCOSIII 中断处理过程在STM32中是支持中断的,中断是一个硬件机制,主要用来向CPU通知一个异步事件发生了,这时CPU就会将当前CPU寄存器值入栈,然后转而执行中断服务程序,在CPU执行中断服务程序的时候有可能有更高优先级的任务就绪,那么当退出原创 2020-08-18 11:59:31 · 1081 阅读 · 0 评论 -
实时操作系统UCOS学习笔记8----UCOSIII 五个系统内部任务
在UCOSII中我们知道有两个系统任务:统计任务和空闲任务,在UCOSIII中系统内部任务扩展到了5个,本章我们就详细的讲解一下UCOSIII中的这5个系统任务。1、空闲任务首先来看一下空闲任务:OS_IdleTask(),在os_core.c文件中定义。任务OS_IdleTask()是必须创建的,不过不需要手动创建,在调用OS_Init()初始化UCOS的时候就会被创建。打开OS_Init()函数,可以看到,在OS_Init()中调用了函数OS_IdleTaskInit(),打开函数OS_IdleTa原创 2020-07-19 11:42:50 · 754 阅读 · 0 评论 -
实时操作系统UCOS学习笔记7----UCOSIII任务相关API函数使用
在上一章我们讲解了UCOSIII的任务管理,我们学习的目的就是为了使用,这一节我们就讲解一下UCOSIII如何创建任务和任务相关函数的使用。1、任务创建和删除实验① OSTaskCreate()函数UCOSIII是多任务系统,那么肯定要能创建任务,创建任务就是将任务控制块、任务堆栈、任务代码等联系在一起,并且初始化任务控制块的相应字段。在UCOSIII中我们通过函数OSTaskCreate()来创建任务,OSTaskCreate()函数原型如下(在os_task.c中有定义)。调用OSTaskCrea原创 2020-07-07 22:01:43 · 466 阅读 · 0 评论 -
实时操作系统UCOS学习笔记6----UCOSIII任务管理
多任务操作系统最主要的就是对任务的管理,包括任务的创建、挂起、删除和调度等,因此对于UCOSIII操作系统中任务管理的理解就显得尤为重要。本章就讲解UCOSIII中的任务管理。1、UCOSIII启动和初始化在使用UCOSIII的时候,我们要按照一定的顺序初始化并打开UCOSIII,按照下面的顺序:最先肯定是要调用OSInit()初始化UCOSIII。创建任务,一般我们在main函数中只创建一个start_task任务,其他任务都在start_task任务中创建,在调用OSTaskCreate()函原创 2020-07-04 10:34:57 · 754 阅读 · 1 评论 -
实时操作系统UCOS学习笔记5----UCOSIII移植
在2009年Micrium公司推出了UCOSIII,相对于UCOSII性能有了进一步的提升,支持时间片轮转调度,极短的关中断事件等。本章讲解如何在STM32F103开发板上移植UCOSIII操作系统。1、UCOSIII简介UCOSIII是一个可裁剪、可固化、可剥夺的多任务操作系统,没有任务数目的限制,是UCOS的第三代内核,UCOSIII有以下几个重要的特性:可剥夺多任务管理:UCOSIII和UCOSII一样都属于可剥夺的多任务内核,总是执行当前就绪的最高优先级任务。同优先级的时间片轮转调度:UC原创 2020-07-01 10:51:22 · 1270 阅读 · 0 评论 -
实时操作系统UCOS学习笔记4----移植文件讲解
之前讲解了UCOSII在STM32F103开发板上的移植过程和Cortex-M3处理器的一些基础知识。本章结合前两章内容讲解一下在UCOSII移植过程中的一些重要文件和移植UCOSII的过程中都做了哪些工作。1、滴答定时器SysTick滴答定时器是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中自动重装载定时器初值,只要不把它在systick控制以及状态寄存器中的使能位清零,就将永久不息。systick的最大使命,就是定期地产生异常请求作为系统的时基。OS都需要这种“滴答”来推动任务和时间原创 2020-06-29 10:52:02 · 577 阅读 · 0 评论 -
实时操作系统UCOS学习笔记3----Cortex-M3基础
上一章讲解了如何在STM32F103开发板上移植UCOSII操作系统,在移植操作系统的时候一定要对处理器的架构有一定的了解,本章就讲解一下Cortex-M3的基础知识,了解了处理器的基础知识后就能够看懂移植过程的一些重要文件,因为这些文件都是和处理器密切相关的。1、Cortex-M3通用寄存器2、操作模式和特权级别3、堆栈4、SVC和PendSV异常...原创 2020-06-27 17:10:47 · 357 阅读 · 0 评论 -
实时操作系统UCOS学习笔记2----UCOSII移植
1、移植准备工作1.1 准备基础工程(准备流水灯实验工程)1.2下载UCOSII源码(从Micrium官网下载)2、UCOSII移植2.1向工程中添加相应文件在工程目录下新建UCOSII文件夹,并在该文件夹下另外新建三个文件夹:CONFIG, CORE, PORT。2.2向CORE文件夹中添加文件在CORE文件夹中添加UCOSII源码,打开UCOSII源码的source文件夹,里面一共有14个文件,除了os_cfg_r.h和os_dbg_r.c这两个文件外,其他的文件都复制到CORE文件夹下原创 2020-06-26 10:31:08 · 1005 阅读 · 0 评论 -
实时操作系统UCOS学习笔记1----UCOSII简介
前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核)。UCOSII简介UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS的源码发布在该杂志的BBS上。目前最新的版本:UCOSIII已经出来,但是现在使用最为广泛的还是UCOSII,本章主要针对UCOSII进行介绍。UCOSII是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务内核原创 2020-06-23 16:20:11 · 3774 阅读 · 0 评论