从零开始学习UCOSII操作系统1--UCOSII的基础知识

2023-05-16

从零开始学习UCOSII操作系统1--UCOSII的基础知识


前言:

首先比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料是多很多的。

更重要的原因是自己本身还没有能力深入的研究Linux操作系统。本次学习UCOSII主要是学习内核的设计原理。

此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSIII说出实现的更多功能的代码。


参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》

学习代码的出处:http://bbs.elecfans.com/jishu_345856_1_1.html


1、操作系统的作用

操作系统是计算机硬件系统与应用程序之间的接口,应用程序设计人员只是以操作系统层为基础使用计算机系统,所以程序设计人员

看到和使用的只是一些由计算机操作系统所提供的函数API,至于操作系统的这些底层函数是怎么实现的,作为一个应用开发人员是不需要

管的。


2、嵌入式系统的特点:

(1)专用性强:嵌入式系统通常是面向某个特定的应用的,所以嵌入式系统的硬件是特定用户群来设计的

(2)可以裁剪:Linux系统有很多网络协议栈之类的,有些做个数码相框的,没有必要的话,那么直接把那段源码去掉也是可以的

(3)实时性与可靠性:所谓的实时性不是指,你代码写的东西必须要马上执行,而是你写的代码可以

在合适的时间中执行,因为操作系统有很多机制,比如资源的强占,优先级低的任务是不可能实现

只要申请资源就马上得到的。



3、裸机和操作系统最大的区别:

裸机是在一个main函数中不断的执行,除了有中断才会跳转到别的相应的代码中执行的。不然运行的指针就会按照

地址的不断的加4来执行。顺序的执行结构,就是你可以通过代码的找到相应的执行流程。


操作系统之后,main函数,当通过函数堆栈切换的跳转到第一个任务之后,通过优先级的判断

优先级高的任务可以得到优先的执行,就好像有多个main函数在一起执行的假象(并行)



4、任务的C语言表示:

任务是不需要返回的无类型函数。

void  task1(void * param)
{
	for( ; ;)
        {
                             //用户编写的代码
        }
}

当然有人就觉得奇怪了,为什么你在一个函数里面添加一个死循环,那么函数不会就在这个任务中不断的执行吗?

当然这需要在里面添加中断的代码的,以便于它能跳转到其他的任务中执行,切换任务的时候,判断优先级进行任务之间的切换的工作。



5、嵌入式实时操作系统的基本功能:

(1)内存管理:

内存管理主要是动态内存的管理,当应用程序需要使用内存的时候,可以利用操作系统所提供

内存分配函数来获得足够的内存空间。

动态内存就是指malloc、free函数的分配,就是从堆里面拿内存,因为我们本来嵌入式系统的内存分配就比较

少,所以这里很关键。


(2)多任务管理:

裸机就是一个单任务的前后台的程序,就是一个任务加上中断的机器的实现方法。

程序设计人员就可以按照多线程来设计自己的程序,程序的耦合性和单元测试方面就会比较的容易。

关键就是程序的可复用性会更加的好。


(3)外围资源管理:

除了本身自己必须需要的东西,内存和CPU,还有很多输入型设备和输出型设备需要管理。

由于资源是有限的,因此操作系统必须对这些资源进行合理的调度和管理,才能保证每个要使用

资源的任务在运行时可以获得足够的资源。


6、UCOS的代码结构:

这个是UCOS的代码结构,首先我们认识一个东西,需要从它的整体分析一下,因为有一些东西

我们是在UCOS中不需要深入理解的。

















本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始学习UCOSII操作系统1--UCOSII的基础知识 的相关文章

随机推荐

  • "symbol lookup error"问题解决

    http www linuxquestions org questions slackware 14 symbol lookup error usr lib libgtk x11 2 0 so 0 undefined symbol 4343
  • 如何自定义一个通信协议

    借鉴简单的OSI和TCP IP通信模型来讨论如何自定义一个适应自己的通信协议 文章目录 64 toc 1 前言2 经典的OSI七层模型2 1 TCP IP模型解析2 1 1 整体介绍2 2 2 数据链路层2 2 3 网络层2 2 4 传输层
  • 程序员每天工作多少个小时_程序员每天实际工作几个小时?

    程序员每天工作多少个小时 您如何看待 xff0c 程序员每天实际工作多长时间 xff1f 大多数人会说答案是8到9个小时 有人说他们每天工作12个小时或更长时间 尽管这是正确的 xff0c 但它并不是大多数程序员实际工作的数量 xff0c
  • 九轴姿态传感器的介绍和应用

    总体设计 姿态传感器是基于MEMS技术的高性能三维运动姿态测量系统 它包含三轴陀螺仪 三轴加速度计 xff0c 三轴电子罗盘等运动传感器 xff0c 通过内嵌的低功耗ARM处理器得到经过温度补偿的三维姿态与方位等数据 利用基于四元数的三维算
  • CAN总线简单介绍

    什么是CAN总线 xff1f Controller Area Network xff0c 简称CAN或者CAN bus 是一种功能丰富的串行总线标准 xff0c 最早的CAN控制芯片在奔驰车上应用并量产 xff0c 因为支持多主机 xff0
  • Ubuntu18.04 下realsense编译与安装

    相机型号 xff1a realsense SR300 系统环境 xff1a Ubuntu18 04 我这里是下载并编译源码的方式进行编译安装 具体编译安装可以参照https github com IntelRealSense libreal
  • Linux gvim 编辑器修改配色方案、字体、字号

    1 gvim相比于vim xff0c 目前知道gvim是可以单独窗口运行的 xff0c 像gedit一样 vim打开的文件貌似只能显示在终端内 但是二者安装的位置以及配置文件是很有联系的 xff0c 暂时的感觉是gvim是对vim的封装 x
  • 【路径规划】(3) RRT 算法求解最短路,附python完整代码

    大家好 xff0c 今天和各位分享一下机器人路径规划中的 RRT 算法 xff0c 感兴趣的点个关注 xff0c 文末有 python 代码 xff0c 那我们开始吧 1 算法介绍 RRT 算法是由学者 S M LaValle 提出来的路径
  • 【自动化测试】【安卓android】python 发送adb命令方法

    command 命令列表 xff0c 可以传入任意命令 xff0c 类型为list cmdMode可以选择发送命令方式为直接发送adb 命令还是先进入shell def sendAdbcmd command deviceID 61 34 3
  • 选择恐惧症的福音!教你认清MVC,MVP和MVVM

    相信大家对MVC xff0c MVP和MVVM都不陌生 xff0c 作为三个最耳熟能详的Android框架 xff0c 它们的应用可以是非常广泛的 xff0c 但是对于一些新手来说 xff0c 可能对于区分它们三个都有困难 xff0c 更别
  • FreeRtos嵌入式操作系统学习1--操作系统原理初探

    这里由于是第一篇文章 xff0c 不讲复杂的数据机构 xff0c 也不进行代码分析 xff0c 只讲嵌入式操作系统原理 先看下面一个简单的程序 xff1a void task1 while 1 Led1 1 xff08 1 xff09 de
  • 初学四旋翼之定高

    本项目使用US 100超声波模块测高 xff0c 与飞控的通讯方式为UART 硬件连接应注意 xff1a 通常飞控的发送管脚连超声波的接收管脚 xff0c 飞控的接收管脚连超声波的发送管脚 xff08 即tx rx xff1b rx tx
  • 初学四旋翼之光流定点

    本项目使用px4flow模块测速 xff0c 与飞控的通讯方式为I2C 安装时因注意光流模块与飞控的方向 xff08 一 xff09 为什么使用光流模块 xff1f 在悬停时 xff0c 若采用开环控制 xff0c 由于一些不可控的外界因素
  • 初学JetsonTX2之部署YOLO

    本人准备使用 YOLO进行人脸检测 xff0c 硬件设备为 Jetson TX2 查阅 YOLO 官网 xff0c 要部署 YOLO xff0c 首先要安装 CUDA CUDNN OPENCV xff0c 然后部署 Darknet xff0
  • C语言,超过10位数的字符串转整型函数

    include lt stdio h gt static long str2int const char str long temp 61 0 const char p 61 str if str 61 61 NULL return 0 i
  • C语言去掉MAC地址中的冒号

    include lt stdio h gt include lt string h gt void strdel char s char del x char p char q for p 61 s q 61 s p 61 39 0 39
  • Jetson Xavier NX 套件将系统装到SSD

    目录 第一步 xff1a 虚拟机 第二步 xff1a 装SDK Manager 第三步 xff1a 将系统装到eMMC 第四步 xff1a 将系统装到SSD内 xff0c 我以新买的500G硬盘为例 第五步 xff1a 装各种库 解决问题时
  • MySQL使用.ibd文件恢复或者迁移数据库

    使用86的Alice数据库的 ibd文件备份 恢复到76数据库 xff0c 该数据库版本为8 0 17 1 创建一个表确认与原始表结构一致 将86数据库的表结构导出 xff0c 在76上执行 xff08 注 xff1a 在5 5 26版本需
  • 学习ARM反汇编工具objdump和一个简单实例

    学习ARM反汇编工具objdump和一个简单实例 参考朱有鹏ARM裸机编程 1 反汇编的原理 amp 为什么需要反汇编 arm linux objdump D led elf gt led elf dis objdump是gcc工具链中的反
  • 从零开始学习UCOSII操作系统1--UCOSII的基础知识

    从零开始学习UCOSII操作系统1 UCOSII的基础知识 前言 xff1a 首先比较主流的操作系统有UCOSII FREERTOS LINUX等 xff0c UCOSII的资料相对比其余的两个操作系统的资料是多很多的 更重要的原因是自己本