ucosii基础知识

文章目录

  • 1. 嵌入式实时操作系统的基本概念
  • 2. 预备知识
    • 2.1. 指针
    • 2.2. 函数指针
    • 2.3. typedef常用方法

1. 嵌入式实时操作系统的基本概念

  • 操作系统的概念:

    操作系统(Operating System, OS)是一种系统软件。它在计算机硬件与计算机应用程序之间,通过提供应用程序接口(Application Programming Interface, API),屏蔽了计算机硬件工作的一些细节,从而使应用程序的设计人员得以在一个友好的平台上进行应用程序的设计和开发,大大提高了应用程序的开发效率。

  • 操作系统的作用:

    计算机的操作系统为应用程序提供了一个界面友好,性能稳定、安全,效率高,操作方便的虚拟计算机。

  • 操作系统的功能:

    • 处理器的管理: 一是对中断的管理,二是对处理器的工作进行调度

      因为处理器硬件只能发现外部事件的中断申请,而不能对中断进行管理和处理,于是对中断的管理和处理只能由操作系统来承担。

      现代计算机应用程序大多是多道程序结构,那么一个处理器如何来运行这多道程序就是一个较为复杂的问题。它要求操作系统应该能按照某种规则对处理器的使用进行合理的分配,这样才能使多道应用程序协调有秩序的运行,这就是操作系统所应该具有的处理器调度功能。

    • 存储器的管理: 存储器是计算机的重要资源,如何合理地分配和使用该资源当然是计算机操作系统责无旁贷的重要责任。

    • 设备的管理: 计算机系统一般都配有外部设备,因此计算机操作系统还必须有对这些外部设备管理的功能,以便完成用户提出的I/O)请求,加快输入/输出的速度,提高I/O设备的利用率。当然,作为一个完善的计算机操作系统还要提供外部设备的驱动程序。

    • 文件的管理: 在计算机中,程序和数据通常都以文件的形式存储在外存(例如硬盘、光盘等)中,由于在这些外存中文件量极其巨大,如果对它们没有良好的管理方式,就会导致严重的后果。为此,计算机操作系统必须具备文件管理功能。

    • 网络和通信的管理: 使用网络的计算机除了需要配备连网硬件之外,其操作系统必须还要具有管理网上资源、通过网络进行通信、故障管理、安全管理、性能管理等网络功能。

    • 提供用户接口: 计算机操作系统除了提供以上所说的各项功能之外,还要为用户提供良好使用上述功能的接口,以便用户能方便地使用操作系统的功能,从而能有效地组织作业及其工作,并使系统能高效地运行。

  • 嵌入式系统:

    嵌入式系统是对对象进行自动控制而使其具有智能化并可嵌入对象体系中的专用计算机系统。

  • 嵌入式系统的特点:

    • 专用性强;
    • 可裁剪性好;
    • 实时性与可靠性好;
    • 功耗低。
  • 实时操作系统的要求:

    第一,实时系统的计算必须产生正确的结果,称为逻辑或功能正确(Logical or Functional Correctness);第二,实时系统的计算必须在预定的时间内完成,称为时间正确(Timing Correctness)。

  • 实时操作系统的条件:

    1. 实时操作系统必须是多任务系统。
    2. 任务的切换时间应与系统中的任务数无关。
    3. 中断延迟的时间可预知并尽可能短。
  • 嵌入式系统与嵌入式操作系统的区别与联系:

    区别:

    1. 定义和范围:

      • 嵌入式系统(Embedded System): 是一个专用的计算机系统,设计用于执行特定任务。它通常包括硬件和软件,并且嵌入在更大的设备中。嵌入式系统的硬件部分包括处理器、存储器、输入输出接口等,而软件部分包括固件和操作系统。
      • 嵌入式操作系统(Embedded Operating System): 是专为嵌入式系统设计的操作系统,用于管理硬件资源和运行应用程序。嵌入式操作系统具有轻量级、实时性和高效能等特点,常见的嵌入式操作系统有FreeRTOSVxWorksμC/OS等。
    2. 功能和职责:

      • 嵌入式系统: 执行特定的功能或任务,如家电控制、汽车发动机管理、工业自动化控制等。嵌入式系统的设计注重实时性、低功耗、可靠性等。
      • 嵌入式操作系统: 提供任务调度、资源管理、内存管理、中断处理等功能,使嵌入式系统能够高效地运行多个任务,并确保实时性和稳定性。
    3. 组成部分:

      • 嵌入式系统: 包括硬件和软件两部分。硬件部分包含处理器、传感器、接口等;软件部分包含操作系统、应用程序、驱动程序等。
      • 嵌入式操作系统: 仅指软件部分,负责硬件抽象、任务调度、资源分配等。
    4. 开发复杂度:

      • 嵌入式系统: 开发包括硬件设计、软件开发和系统集成,需要跨学科的知识。
      • 嵌入式操作系统: 专注于软件开发,重点在于系统软件的设计和优化。

    联系:

    1. 共存关系:

      • 嵌入式操作系统是嵌入式系统的重要组成部分。大多数复杂的嵌入式系统都需要一个嵌入式操作系统来管理系统资源和调度任务。
    2. 相互依赖:

      • 嵌入式系统的硬件需要嵌入式操作系统来提供抽象层,使应用程序能够访问底层硬件。而嵌入式操作系统需要嵌入式系统的硬件平台来运行。
    3. 共同目标:

      • 二者都致力于实现特定任务的高效、稳定和实时执行。嵌入式操作系统通过提供轻量级、实时的操作系统内核,帮助嵌入式系统满足这些要求。
    4. 优化设计:

      • 嵌入式操作系统通常针对特定的嵌入式系统硬件进行优化,以确保在资源受限的环境下能够高效运行。

2. 预备知识

2.1. 指针

  • 指针是一个程序实体所占用内存空间的首地址。
  • 指针变量是用来保存指针的变量。
  • 指针变量必须赋值之后才能使用。

2.2. 函数指针

一个函数就是一段代码,C编译器会为这段代码分配一段连续内存空间,同时把首地址作为常量值赋予以函数名定义的常量。这就是说,函数名就是该函数的指针。

  • 函数指针的定义:

    返回值类型 (* 变量名) (参数1类型,参数2类型,……);

    其中,返回值类型 (*) (参数1类型,参数2类型,……); 为函数指针变量的类型

    # include<stdio.h>int function_1(int, float)
    {printf("%d\n", "function_1");return 0;
    }int function_2(int, float)
    {printf("%d\n", "function_2");return 0;
    }//定义函数指针pf
    int (* pf) (int, float);int main()
    {pf = function_1;pf(10, 3,14);pf = function_2;pf(100, 63.24);return 0;
    }
    

    通过函数指针变量来间接调用函数,而且同一个函数指针变量还可以随时通过改变与之关联的函数名来改变它所指向的函数,因而使得同一个指针变量可以调用不同的函数,只要它们的返回类型和参数类型相同。

  • 函数指针作为函数参数及回调函数

    void function(int (* pf)(int,float))
    {pf(10,8.888);
    }
    

    函数的参数pf就是一个函数指针,其类型为int(*)(int,float)。即具有如下返回值及参数类型的函数的函数名(函数指针)均可以作为上述function()函数的实参,例如int usr_I(int,float)、int usr_2(int,float)、int usr_3(int,float),等等。

    #include <stdio.h>int usr_1(int, float)
    {printf("%s\n", "usr_1");return 0;
    }int usr_2(int, float)
    {printf("%s\n", "usr_2");return 0;
    }int usr_3(int, float)
    {printf("%s\n", "usr_3");return 0;
    }int (* pf)(int, float);//以函数指针为参数的函数
    void sys_function(int (* pf)(int, float))
    {printf("这是function函数中调用用户函数:");pf(10, 8,888);printf("本函数自己的功能\n");
    }int main()
    {sys_function(usr_1);sys_function(usr_2);sys_function(usr_3);return 0;
    }
    

    将函数指针作为函数参数,可以将一个函数传递到另一个函数内来调用。这种用法在操作系统这类系统软件中应用得相当频繁,因为操作系统的某些函数的功能需要用户配合才能实现,常需要调用用户提供的函数。目前,大致有两种方法来实现用户函数的调用:一种方法就是像上例中的sys_function()那样以函数指针来传递被调用的用户函数;另一种方法就是在系统函数中设置所谓的“钩子函数”,即在系统函数中需要调用用户功能的地方调用一个空函数,然后由用户去实现这个空函数的功能。在第一种方法中,由于是系统函数调用用户函数,与常用的用户程序调用系统函数的调用方向不同,故人们将这种调用叫做“回调”,而被系统调用的这个函数就叫做“回调函数”。

2.3. typedef常用方法

  • 复杂的数据类型名称的简化

    typedef void(* PFON)(int,int);
    PFON function;  =  void(* function)(int, int);void (* b[10])(void (*)(int,int));
    //由于这个定义中的程序实体名称为b,因为其后面有一个数组符号“[]”,所以这一定是一个名称为b的数组定义。为了方便,先把数组符号“[]”去掉,那么剩下的便是如下的样子:
    void (* b)(void (*)(int,int));
    //所以它的右边括号里的void(*)(int,int)是一个类型,并且是一个指针类型,于是先为这个指针类型定义一个别名:
    typedef void (* pFunParam)(int,int);
    //于是原来的初始定义就可以写成如下形式:
    void (* b)(pFunParam);
    //b是一个无返回值,参数类型为pFunParam的函数指针,如果在该定义前使用typedef,并用pFunx代替变量名b:
    typedef void (* pFunx)(pFunParam);
    //于是这个函数指针类型别名就是这个pFux,原来声明语句就可表示成如下语句:
    pFunx b[10];
    //即声明的是一个其元素为函数指针的数组。
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【qt】CAD下

目录 一.前言二.缩放1.逻辑2.获取图形项选中的个数3.获取图形项并放大4.视图缩放5.完整代码6.效果展示7.缩小完整代码 三.旋转1.图形项进行旋转2.视图的旋转3.完整代码4.效果展示5.右转代码 四.恢复1.图形项复原2.视图复原3.完整代码4.效果展示 五.前后置1.设置z轴的值2.后置代…

C++ 中,extern c 是什么意思?

在C编程中&#xff0c;extern "C"是一个常见的声明&#xff0c;它主要用于解决C与C语言的互操作性问题。本文将深入探讨extern "C"的含义、用途和实现方式&#xff0c;帮助读者更好地理解和运用这一概念。 一、extern "C"的引入背景 C支持函数…

Linux 扩容 根分区

CentOS7&#xff0c;LVM根分区扩容步骤&#xff1a; LVM扩容思维流程&#xff1a;创建一个物理分区–>将这个物理分区转换为物理卷–>把这个物理卷添加到要扩展的卷组中–>然后才能用extend命令扩展此卷组中的逻辑卷 1.查看现有分区大小 df -TH 2.关机增加大小为40G(…

appinventor2中求某个值在列表中的索引用什么方法?

使用“求对象在列表中的位置”方法就可以了&#xff1a; 返回指定对象在列表中的位置&#xff0c;从 1 开始&#xff0c;如果不在列表中&#xff0c;则返回 0。 相应地&#xff0c;知道了索引&#xff0c;从列表中取值得方法是&#xff1a;选择列表中索引值对应的列表项 返回…

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

昇思MindSpore学习总结二——张量

1、张量 张量tensor表示的是一个多维的矩阵&#xff0c;比如零维就是一个点&#xff0c;一维就是向量&#xff0c;二维就是一般的矩阵&#xff0c;多维就相当于一个多维的数组&#xff0c;这和numpy是对应的&#xff0c;而且PyTorch的Tensor和numpy的ndarray可以相互转换&#…

Python | Leetcode Python题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution:def dfs(self, grid, r, c):grid[r][c] 0nr, nc len(grid), len(grid[0])for x, y in [(r - 1, c), (r 1, c), (r, c - 1), (r, c 1)]:if 0 < x < nr and 0 < y < nc and grid[x][y] "1":self.d…

MyBatis(7)MyBatis 是如何进行分页

MyBatis 本身没有内置的分页处理&#xff0c;但它提供了使用分页插件或通过手动编写分页SQL语句的机制来实现分页功能。分页插件如 PageHelper 是常用来与 MyBatis 配合进行分页的工具。 手动分页 在不使用分页插件的情况下&#xff0c;可以通过编写特定的分页SQL语句来手动实…

【论文速读】|MEDFUZZ:探索大语言模型在医学问题回答中的鲁棒性

本次分享论文&#xff1a;MEDFUZZ: EXPLORING THE ROBUSTNESS OF LARGE LANGUAGE MODELS IN MEDICAL QUESTION ANSWERING 基本信息 原文作者&#xff1a;Robert Osazuwa Ness, Katie Matton, Hayden Helm, Sheng Zhang, Junaid Bajwa, Carey E. Priebe, Eric Horvitz 作者单…

Lua博客网站支持搜索、评论、登录注册

该简易博客示例用于学习网站的基础知识与MySQL数据库。 简述&#xff1a;开源Lua网站开发服务(FastWeb)支持&#xff1a;注册、登录、文章分页、评论分页、简易权限管理和搜索功能。发帖功能支持Markdown(支持记忆功能)图示&#xff1a;

Java之线程相关应用实现

后台线程 一个进程中只有后台进程运行&#xff0c;该进程将会结束。 新创建的线程默认为前台线程&#xff0c;Java中只要有一个前台线程运行&#xff0c;就不会结束程序&#xff0c;如果只有后台线程运行&#xff0c;程序就会结束&#xff0c;可以在线程对象启动前执行setDae…

【js + ckeditor】插入base64格式的图片

一、需求说明 直接把图片转成base64插入到富文本 二、需求分析 1、富文本图片格式处理位置 在ckeidtor的目录下有个plugins文件夹&#xff0c;在plugins下新建一个文件夹&#xff08;自己命名&#xff0c;如simpleupload&#xff09;&#xff0c;进入simpleupload文件夹&…

《Windows API每日一练》6.3 非客户区鼠标消息

上一节我们讨论客户区的鼠标消息&#xff0c;本节我们讨论非客户区鼠标消息。如果鼠标位于窗口内部除客户区外的其他区域&#xff0c;Windows就会向窗口过程发送一个“非客户区”鼠标消息。窗口的非客户区包括标题栏、菜单和窗口滚动条。 本节必须掌握的知识点&#xff1a; 非…

微服务和kafka

一、微服务简介 1.单体架构 分布式--微服务--云原生 传统架构&#xff08;单机系统&#xff09;&#xff0c;一个项目一个工程&#xff1a;比如商品、订单、支付、库存、登录、注册等等&#xff0c;统一部署&#xff0c;一个进程 all in one的架构方式&#xff0c;把所有的…

深入探讨C++的高级反射机制(2):写个能用的反射库

在现代软件开发中&#xff0c;反射是一种强大的特性&#xff0c;它可以支持程序在运行时查询和调用对象的属性和方法。 但是在C中&#xff0c;没有内置的反射机制。我们可以通过一些巧妙的技术模拟反射的部分功能。 上一篇文章写了个简单的反射功能&#xff0c;这回完善一下&a…

Vue3实现记住密码功能

1.首先安装 js-cookie、jsencrypt npm i js-cookie // 使用Cookie来实现记住密码功能 npm i jsencrypt //使用jsencrypt进行加密解密 2.完整代码 注:在此我使用了ant-design-vue组件库 若使用源码请自行配置ant-design-vue <template><h2 :style"{margin…

3.PyQt6常用基本控件

目录 常用控件 1.文本类控件 1.QLable标签控件 1.设置标签文本 2.设置标签文本和对齐方式 3.换行显示 4.添加超链接 5.为标签设置图片 6.获取标签文本 2.QLineEdit单行文本控件 3.QTextEdit多行富文本控件 4.QPlainTextEdit纯文本控件 5.QSpinBox整数数字选择控件 …

开发板以电脑为跳板连接互联网

标题 开发板以电脑为跳板连接互联网网络共享方式桥接方式 开发板以电脑为跳板连接互联网 分享下用网线直连电脑的开发板如何以电脑为跳板连接互联网的两个方法。 网络共享方式桥接方式 补充下&#xff0c;我的电脑连接的是无线网络&#xff0c;开发板和电脑是用网线进行连接的…

【第3章】MyBatis-Plus持久层接口之Service Interface(上)

文章目录 前言一、save1. 示例&#xff08;save&#xff09;2. 示例&#xff08;saveBatch&#xff09;3. 示例&#xff08;saveBatch 指定批次大小&#xff09; 二、saveOrUpdate1.示例&#xff08;saveOrUpdate&#xff09;2.示例&#xff08;saveOrUpdateBatch&#xff09;3…

Python 高级编程:文件操作与错误处理

在前几篇文章中&#xff0c;我们介绍了Python的基本语法、函数和模块以及面向对象编程。这些知识对于大部分日常编程问题已经足够&#xff0c;但对于需要分析大数据的人来说&#xff0c;这些还不够。本章将介绍Python的文件操作以及错误处理与调试。 目录 文件操作读文件写文…