嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻

news2024/11/17 3:38:02

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。


嵌入式软件设计

    • 1. 嵌入式软件体系
    • 2. 中断机制与ISR设计
    • 3. 数据共享
    • 4. 看门狗任务
    • 5. 代码共享——可重入函数


专栏:《嵌入式软硬件》


1. 嵌入式软件体系

两种嵌入式软件体系:

  • 逻辑软件:无EOS(嵌入式操作系统),嵌入式软件直接运行在硬件上;
  • 基于EOS的软件:运行在EOS上;

①轮转结构

软件中仅有一个循环结构的代码在执行,该段循环代码顺序查询条件,执行相应的分支。它的优点是,结构简单,在结构中不存在中断,没有数据共享,主循环简单的依次检查每个IO设备,并且为其提供服务。缺点是,不同IO功能要求不同的响应速度,轮转结构很难保证,当分支处理时间达到秒级的时候,操作系统响应变慢,当设备增加的时候,时间片可能变小,单个分支响应变慢,并且如果CPU全速运行,功耗将会比较大,电池供电系统难以承受。其主要应用有:微波炉、电话机、电子玩具等。

②带中断的轮转结构

中断程序可以处理硬件特别紧急的需求,然后设置事件到来标志,主循环轮询这些标志,然后依据需求进行处理。是一种前后台系统,轮询程序是后台,负责具体事务,中断程序是前台,辅助检查服务请求。和轮转结构的区别在于优先级高的请求将得到及时的响应,而轮转结构只能顺序响应。

③基于定时器中断的轮转结构

引入了低功耗模式。

④中断(事件)驱动系统

后台 -- 主程序 -- 初始化系统 -- 进入低功耗模式

⑤函数队列调度结构

中断程序不处理事务,只在函数指针队列中添加相应函数指针。主程序仅仅从该队列中读取相应指针并调用相关函数。main函数不再按顺序执行,而是读队列,并且有优先级。

2. 中断机制与ISR设计

运行过程中,EOS主要通过两种方式快速响应外部事件:

  • 查询方式:降低里吞吐量,增加了功耗,但是需要不断查询。
  • 中断方式。

①中断机制

中断机制是处理器快速响应外部事件的异步机制,可能在系统执行的任何时候随机到来。中断发生过后,处理器识别中断请求(IRQ)并将自动跳转到该中断请求所对应的中断服务程序去执行。

中断检测,中断响应到中断处理的过程可以全部由处理器独立完成。

中断是一种硬件机制,与是否使用操作系统无直接关系。

在宏观上不是一种查询机制,但是在微观上是一种硬件查询机制。

检测:

- 可屏蔽中断:可通过响应寄存器来关闭中断;

- 不可屏蔽中断NMT:不可通过寄存器来操作;

响应:

- 直接中断:处理器查到中断,直接跳转到ISR入口;

- 寄存器间接中断:通过寄存器寻址间接跳转;

- 向量中断:查询中断向量表中的偏移量;

处理:

- 禁止/恢复中断

- 保存/恢复上下文

- 轮询设备的中断状态寄存器,逻辑处理

②EOS终端管理

硬件中断,软件中断以及异常等可能引起程序正常执行流程发生改变的事件,都被广义的定义为中断或异常。

EOS内核中有一个中断接管程序和映射至中断向量表的虚拟中断向量表,中断产生后,中断接管程序接收该中断事件,进而在虚拟中断向量表中查询,获得相应的中断服务程序。

运行中断服务程序前,接管程序保存上下文信息,并在中断栈中设置起始位置。

中断服务程序可以使用被中断任务的堆栈,但是为了提高可靠性,内核通常会为所有中断程序划定一个单独的中断栈。

中断服务程序完成后,接管程序恢复上下文和堆栈,并负责使处理器恢复到之前被中断的任务或中断服务程序继续执行。

③中断程序设计规则

规则1:中断程序不能调用任何可能会阻塞自己的RTOS服务
    
规则2:确保RTOS调用返回中断程序
    
规则3:避免执行分配、释放内存的操作    

3. 数据共享

原子操作是最小单元,不可拆分

disable();
    /*临界区,不可产生中断*/
enable();

4. 看门狗任务

部署一个看门狗任务TWDG来检测系统中的一组关键任务,看门狗使用与逻辑,当一个人物出现故障时,认定整个系统故障。看门狗可以通过定时向被检测任务发送检测信号,或者收集这些任务定期上传的状态来感知每一个被检测任务的运行是否正常,故障时软件定位或通过看门狗电路复位。

①几种监测方法

通用实现方法:

TWDG与第i个被检测的任务Ti共享一个变量f_WDi;Ti执行f_WDi++操作,TWDG执行f_WDi--操作,并判断f_WDi是否小于之前的值,如果小于则Ti任务故障。

任务间通信机制:TWDG任务向Ti任务发送消息,并等待该任务反馈,根据反馈确定状态。

就可靠性来说,看门狗任务大于硬件看门狗电路。

5. 代码共享——可重入函数

text段:只读,存放程序代码,编译时确定。
 
data段:静态存储区,存放在编译阶段(而不是运行时)就能确定的数据,存放赋了初值的全局变量、静态变量、常量。

bss段:存放定义但未赋值的全局变量和静态变量。

代码的可重入性

可重入代码reentrant code,也叫做纯代码,是影响多任务嵌入式系统可靠性的重要方面。它的本质是变量、资源的共享问题,代码不能同时被多个任务调用执行,即可重入问题。

可重入函数是一个能被多个任务调用的函数。可重入函数可以由多个任务并发调用,而不必担心数据错误。不可重入non-reetrant函数不能由多个任务所共享,除非能确保函数的互斥,或者使用信号量,或在代码关键部分禁用中断。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据,可重入函数要么使用本地变量,要么使用全局变量时保护自己的数据。

判断一个函数是否可重入的基本规则:

①一个可重入函数一般用于原子的方法使用变量,除非这些变量存储再调用这个函数的堆栈中或者这些变量是任务的私有变量;

②一个可重入函数一般不调用其他不可重入的函数;

③一个可重入函数一般不用于非原子的方法使用硬件;

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


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

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

相关文章

golang中的md5、sha256数据加密文件md5/sha256值计算步骤和运行内存图解

在go语言中对数据计算一个md5,或sha256和其他语言 如java, php中的使用方式稍有不同, 那就是要加密的数据必须通过流的形式写入到你创建的Hash对象中。 Hash数据加密步骤 1. 先使用对应的加密算法包中的New函数创建一个Hash对象,(这个也就是…

linux经典定时任务

在使用时记得替换为自己的脚本路径。请在相应的脚本第一行加上#!/bin/bash,否则脚本在定时任务中无法执行。 1、在每天凌晨2点执行 0 2 * * * /bin/sh bashup.sh 2、每天执行两次 下面的示例命令将在每天上午5点和下午5点执行。您可以通过逗号分隔指定多个时间戳…

vue中的$nextTick和过渡与动画

一.vue中的$nextTick 简述与用法:这是一个生命周期钩子 1.语法:this.$nextTick(回调函数) 2.作用:在下一次DOM更新结束后执行其指定的回调 3.什么时候用:当修改数据后,要基于更新后的新dom进行某些操作时,…

vue.js基础组件4--下

1.动态组件 1.定义动态组件 利用动态组件可以动态切换页面中显示的组件。使用<component>标签可以定义动态组件&#xff0c;语法格式如下。 <component is"要渲染的组件"></component>上述语法格式中&#xff0c;<component>标签必须配合i…

爬山算法全解析:掌握优化技巧,攀登技术高峰!

一、引言 爬山算法是一种局部搜索算法&#xff0c;它基于当前解的邻域中进行搜索&#xff0c;通过比较当前解与邻域解的优劣来更新当前解&#xff0c;从而逐步逼近最优解。本文将对爬山算法进行详细的介绍。 二、爬山算法简介 爬山算法是一种基于贪心策略的优化算法&#xff…

Modular military character

角色具有31个模块化骨架网格,每个模块具有多个蒙皮: 3个头(4skins) 3件衬衫(9skins) 3条裤子(9skins) 3只靴子(9skins) 7件战术背心(3skins) 4只手和手臂(2skins) 3顶帽子和头盔(9skins) 2个背包(3skins) 3支步枪(3skins) 模块允许您组装超过200万个不同的…

SW手势定义

crtle:独立; T:测量;R隐藏;视图>用户界面>动态显示父子关系 crtld:相同零件; alte:草图显示; altw:基准面显示; ALTZ:上一视图;

Docker笔记-一种在非交互式方式中加载环境变量的方法

背景 我遇到的现象是这样的&#xff0c;我在docker安装了dm python的客户端&#xff0c;但dm python实际上是对libdmdpi.so的调用&#xff0c;在交互式环境中&#xff08;/bin/bash&#xff09;调用python 连接达梦是没有任何问题的&#xff0c;但在非交互环境直接调用&#x…

Mac配置node环境

1.下载nvm(node版本管理工具&#xff0c;同Anaconda对Python的关系&#xff09;。 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash 2.配置vi ~/.zshrc文件&#xff0c;添加如下配置&#xff1a; export NVM_DIR"$HOME/.nvm" [ -…

软考 系统架构设计师系列知识点之SOME/IP与DDS(1)

本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#xff08;1&#xff09;—— 概述_some ip-CSDN博客 深入浅出SOME/IP协议&#xff1a;基本概念和原理-…

酷开科技相伴童年 | 酷开系统六一特辑:亲子共赏,启迪成长

六一儿童节&#xff0c;属于每个茁壮成长的孩子&#xff0c;也属于每个童心未泯的“少年”。《小王子》里说&#xff0c;使生活如此美丽的是我们藏起来的真诚和童心。马上就到六一儿童节了&#xff0c;就让我们用温柔而富有童真的笔触&#xff0c;唤醒那份沉睡已久的童心吧。 在…

gitlab没有合并权限、发起合并请求

1.选择项目 2.发起合并请求 3.选择需要合并的分支&#xff0c;第一个是被合并的分支&#xff0c;第二个是合并上哪个分支 4.选择有合并权限的管理人 5.发起请求&#xff0c;通知、等待管理人合并

【Docker实战】进入四大数据库的命令行模式

上一篇我们讲了docker exec命令&#xff0c;这一次我们使用docker exec命令来进入四大数据库的命令行模式。 我们进行游戏开发或软件开发是离不开四大数据库的&#xff0c;这四大数据库分别是关系型数据库mysql、postgres&#xff0c;nosql数据库redis、mongodb。将它们容器化…

GNSS的经纬度使用float还是doubble数据类型存储传输?

1. 背景 当你在使用导航、打车、定位等等场景下&#xff0c;一定会有形或者无形的使用位置服务&#xff0c;位置服务的基础功能功能就是向你提供位置信息&#xff0c;而经纬度是位置信息的主要信息&#xff0c;一般情况可以简单的认为位置信息就是经纬度信息。经纬度使用小数进…

静态随机存储器(SRAM)

目录 介绍 基本的 SRAM 存储单元阵列 1. SRAM 存储单元 2. SRAM 阵列 3. SRAM 阵列的读写操作 4. SRAM 阵列的扩展 5. SRAM 阵列的应用 6. SRAM 阵列的优缺点 基本的 SRAM 逻辑结构 1. 存储单元 2. 存储单元阵列 3. 译码器 4. 读写电路 5. 控制逻辑 6. SRAM 逻辑…

多旋翼+发电机:国债应急系留照明无人机技术详解

多旋翼发电机技术的应急系留照明无人机是一种集成了先进飞行技术、发电技术和照明技术的无人机系统。这种无人机具有高度的灵活性、移动性和适应性&#xff0c;能够在各种复杂环境下迅速部署&#xff0c;为夜间搜救、救援等应急任务提供高效、可靠的照明支持。 无人机参数&…

微软改进WSL子系统 新版将支持镜像宿主机网络接口及使用外部DNS

Windows SubSystem for Linux (即 WSL) 是微软在 Windows 10/11 中开发的子系统功能&#xff0c;该功能允许用户在 Windows 上安装 Linux 系统和相关环境&#xff0c;对开发者来说可以构建 Linux 开发环境进行工作。不过 WSL 系统在功能上也有不少缺点&#xff0c;典型的就是默…

18.并发编程原子性、可见性、有序性原理

文章目录 原子性、可见性、有序性原理1.CPU物理缓存结构1.1.寄存器1.2.缓存1.3.物理内存 2.并发编程的三大问题2.1.原子性2.2.可见性2.3.有序性2.3.1.指令重排 2.4.总结 原子性、可见性、有序性原理 原子性&#xff0c;可见性&#xff0c;有序性&#xff0c;是并发编程中所面临…

四轮麦轮平衡车四个轮子安放位置要求,以及编码器测速注意事项(强调,否则无法正常平移)——基于STM32F103ZET6

轮子推荐ABBA&#xff0c;当然BAAB也可以 如图安放&#xff1a; 这两种安防位置可以实现平移效果 若要实现平移则需要先实现PID控制平衡&#xff0c;这里用到520编码电机&#xff0c;相较于370电机他的动力更足&#xff0c;在调节PID时能节约不少时间而且更加容易。 需要注意…

AI应用案例:AI就是这么牛,聊天就能分析股票。

今天给大家介绍一个可能跟你切身相关的案例“大模型股票分析“&#xff01;首先申明这不是教你怎么炒股的方法&#xff0c;而是告诉你可以通过AI协助你去分析股票。 像我是程序员出身&#xff0c;有数据给我&#xff0c;我可以写SQL语句查数据库&#xff0c;或者通过写代码来分…