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实现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详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github