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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详