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

从零开始学习UCOSII操作系统1–UCOSII的基础知识从零开始学习UCOSII操作系统1–UCOSII的基础知识前言:首先比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料是多很多的。更重要的原因是自己本身还没有能力深入的研究Linux操作系统。本次学习UCOSII主要是学习内核的设计原理。此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSIII说出实…

大家好,又见面了,我是你们的朋友全栈君。

从零开始学习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中不需要深入理解的。

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
















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135869.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot 线程池

    SpringBoot 线程池SpringBoot线程池简介使用开启配置使用SpringBoot默认线程池@Async自定义线程池扩展ThreadPoolTaskScheduler和ThreadPoolTaskExecutor继承关系结构Reject策略预定义总结简介程序、线程和线程池进程是资源分配最小单位,线程是程序执行的最小单位。计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。总结:进程是资源分配最小单位,线程

    2022年6月29日
    141
  • 琶音的正确弹奏法

    琶音的正确弹奏法

    2021年6月6日
    143
  • java输出数组的方法_java怎样输出数组中的所有元素

    java输出数组的方法_java怎样输出数组中的所有元素文章目录数组的输出的三种方式一维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法二维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法数组的输出的三种方式一维数组:定义一个数组int[]array={1,2,3,4,5};1.传统的for循环方式for(inti=0;i<array.length;i++){System.out.println(array

    2022年10月11日
    1
  • vue调用js文件_vue调用其他js文件中的方法

    vue调用js文件_vue调用其他js文件中的方法本文主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1、vue-cliwebpack全局引入jquery(1)首先npminstalljquery–save(–save的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。)(2)在webpack.base.conf.js里加入varwebpack=require(“webpack”)(3)在module

    2022年10月8日
    2
  • Matlab fitrsvm自带支持向量回归[通俗易懂]

    Matlab fitrsvm自带支持向量回归[通俗易懂]简介fitrsvm在中低维预测变量数据集上训练或交叉验证支持向量机(SVM)回归模型。fitrsvm支持使用内核函数映射预测变量数据,并支持通过二次编程实现目标函数最小化。要在高维数据集(即包含许多预测变量的数据集)上训练线性SVM回归模型,请改用fitrlinear。用法Mdl=fitrsvm(Tbl,ResponseVarName)返回使用表Tbl中的自变量值和表中对应变量名…

    2022年5月26日
    39
  • 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件

    编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件

    2022年1月24日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号