ucos ii系统的理解及与一个分时OS的对比

2024-04-06 08:38

本文主要是介绍ucos ii系统的理解及与一个分时OS的对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本人对自己的定义一直是电子工程师,大学硬件水平一般,动手能力极差。不过业余喜欢自学,偏偏有点懒,但也算三天打鱼两天晒网的掌握了AVR、51、PIC的开发。

 2014年,又开始了学习ucos ii(先学的是任哲的ucos ii那本书),学了一段时间,吭哧了好久,把任务那一章看了2遍,还是迷迷糊糊,然后就停下了。

 2015年换了家公司后,熟悉了32的结构,也对公司用的OS有了一定的体会。

 昨天,台风登陆深圳,闲着没事,又拿起了任哲的ucos ii,结合source insight里ucos ii的源码以及对公司OS的理解,总算对ucos ii有了个系统的了解,后来又瞟了几页邵贝贝的书,现在写下自己的体会。

  各位别嫌我啰嗦,其实这主要是给我自己看的,省的以后再重新看一遍,再重新总结,打铁要趁热嘛。

  ucos ii其实主要说了这几个东西:任务、任务之间的通信、时间与中断、内存管理 、各种控制块与控制块单向链表(不同处理器上的ucos ii移植)。

 1)任务:任务代码:处理具体事务;任务堆栈:存储任务的状态等各种信息(因为他是利用中断来切换任务,中断有现场的保护和恢复);任务控制块:即一个用来连接任务代码和任务堆栈的数据结构;任务的新建:这里有一个要注意,必须要有空闲任务,而且我记得貌似是在空闲任务里,在新建其他的任务

  2)任务之间的通信:通信方式有,计数信号量(8bits or 16bits or 32bits) 互斥信号量(只有0和1)消息邮箱(数据缓冲区,or理解成一个一维数组) 消息队列 (消息邮箱构成的数组)信号量集(多个标志位的AND/OR),总结来说就是:只需查看flag,不需要传输具体内容的,用信号类(计数信号量、互斥信号量、事件标志组)通信,需要传输具体内容的,用消息类(消息邮箱、消息队列)通信。

 3)时间与中断:时间,系统调度任务所用的参考时钟也是由硬件中断实现的;中断:任务的切换也是模仿的中断的现场保护和恢复,对于一些不想打断的代码,要在代码前后加入进入临界区和退出临界区的宏,而且这块代码,最好不要调用其他。

  4) 内存管理:内存分配的原理,内存控制块,内存的相关函数

     分配原理:内存=N个内存分区=N*M个内存块()内存分区和内存块的数据类型一致,同一内存分区的内存块的字节数一致),再为每个内存块分配一个NEXT指针,指向它的下一个内存块即可,如此就形成内存块的单向链表

     内存控制块:又是一个结构体,存储了这个分配了的内存的一些信息,如长度、自己数、内存首地址、单向链表的指针的首地址==

     内存的相关函数:一般来说都是先建立一个二维数组,2个下标对应内存分区书和内存块数,然后再调用ucos ii提供的内存分配和释放函数等即可。

 5)各种控制块与控制块单向链表:

     ucos ii里的各种控制块都会形成单向链表,初始化时初始化成空的单向控制块链表,具体使用时,再将某个拿出,对其填充信息,形成非空的有效的控制块。

  公司的OS应该算分时OS,主要是任务没有优先级。

    1.定时器中断产生时间基准,同ucos ii;

     2.系统初始化时初始化所有任务,同ucos ii;

     3.死循环中顺序执行各个任务,不同于ucos ii,ucos ii的 任务有优先级;

     4.各个任务会分很多个步骤,每个步骤对应不同的Dly时间,,同ucos ii中就绪态待时间之后转为运行态;

     5.部分任务之间会用到全局的标志位或缓冲区数组,同ucos ii的任务之间的通信:信号量、信号量集成、消息邮箱及消息队列;

      6.各种任务里的各种结构体,同ucos ii的各种控制块

    总之,主要是差了任务的优先级(内存管理其实也可以添加到公司的OS),这样导致实时性稍差,所以我认为公司的OS应该算是一种分时OS,

 

  

这篇关于ucos ii系统的理解及与一个分时OS的对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879495

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨