怕怕怕怕怕怕怕怕怕怕

在这里插入图片描述

欢迎关注博主 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.mzph.cn/web/26750.shtml

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

相关文章

如何获知lib cell的用途

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 除了databook可以查询cell的用途外,还可以通过在pr工具中获取lib cell属性的方法知晓其用途。 ICC2: report_attribute -app -class lib_cell SDFFXXX 通过看is_…

网络安全等级保护基本要求解读- 安全计算环境-应用系统和数据安全

概述 越来越多的企业用户已将核心业务系统转移到网络上,Web浏览器成为业 务系统的窗口,应用系统面临更多的安全威胁;并且由于各种原因使得其 存在较多的安全漏洞。 在此背景下,如何保障企业的应用安全,尤其是Web应用…

RabbitMQ实践——在管理后台测试消息收发功能

在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中,我们搭建完RabbitMQ服务以及管理后台。本文我们将管理后台,进行一次简单的消息收发实验。 赋予admin账户权限 登录到管理后台,进入到用户admin的管理页面 点击“set permission”&a…

ListView的使用

📖ListView的使用 ✅1. 创建ListView✅2. 创建适配器Adapter✅3. 开始渲染数据 主要3步骤: 创建ListView 创建适配器Adapter,和Adapter对应的视图 开始渲染数据 效果图: ✅1. 创建ListView 例如现有DemoActivity页面&#xf…

Eureka到Nacos迁移实战:解决配置冲突与启动异常

问题:Eureka到Nacos迁移实战:解决配置冲突与启动异常 在进行微服务架构升级,特别是注册中心从Eureka转向Nacos的过程中,我遇到了一个典型的技术挑战。目标是为了减少因配置变更导致的服务重启频率,我决定拥抱Nacos以其…

机器学习实现面部识别的背后技术详解

引言 面部识别技术在身份验证、安全监控和个性化服务等领域具有广泛的应用。随着机器学习技术的进步,尤其是深度学习的发展,面部识别系统的性能得到了显著提升。本文将详细介绍机器学习实现面部识别的技术,并通过代码示例来展示其背后的技术…

云平台DNS故障导致网站访问卡顿异常排查过程,wireshark、strace等工具在实际问题排查过程中的应用方法

一、问题现象 项目上使用华为私有云,前段时间华为升级云平台后,云上用户反馈业务系统出现卡顿,之前几秒可以刷新出来的页面现在需要几十秒。提供了一个比较明显的url和curl调用方法。 10.213.x.xxx:8082/files/login curl -H "Content-…

项目实战--文档搜索引擎

在我们的学习过程中,会阅读很多的文档,例如jdk的API文档,但是在这样的大型文档中,如果没有搜索功能,我们是很难找到我们想查阅的内容的,于是我们可以实现一个搜索引擎来帮助我们阅读文档。 1. 实现思路 1…

依据容器创建本地镜像

1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中。 目录 根据镜像启动…

Java——IO流(一)-(4/8):前置知识-字符集、UTF-8、GBK、ASCII、乱码问题、编码和解码等

目录 常见字符集介绍 标准ASCII字符集 GBK(汉字内码扩展规范,国标) Unicode字符集(统一码,万国码) 小结 字符集的编码、解码操作 方法 实例演示 常见字符集介绍 标准ASCII字符集 ASCll(American St…

Java如何根据对象属性值从对象列表中获取满足条件的对象

实现方式 在java 中,根据对象属性值从对象列表中获取满足条件的对象,可以使用以下2种方法: 使用循环遍历: 手动遍历列表。 使用流(Streams)API: 利用 Java 8 引入的 Streams 来简化代码。 示…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法,主要有均方误差MSE,R方得分等指标,在分类模型中,我们主要应用的是准确率这个评估指标,除此之外,常用的二分类模型的模型评估指标还有召回率(Recall&#xff…

Golang | Leetcode Golang题解之第150题逆波兰表达式求值

题目: 题解: func evalRPN(tokens []string) int {stack : make([]int, (len(tokens)1)/2)index : -1for _, token : range tokens {val, err : strconv.Atoi(token)if err nil {indexstack[index] val} else {index--switch token {case ""…

Maven 核心插件 maven-resources-plugin 使用详解

Maven 核心插件 maven-resources-plugin 负责处理项目中的资源文件。它的主要功能是将资源从源目录(如 src/main/resources)复制到目标目录(如 target/classes),并在此过程中进行必要的过滤和替换操作,如替…

PCL 低阶多项式求解

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用C++实现对二阶和三阶多项式的求解过程(求解多项式的根),其推导过程网上有很多,这里就不多叙述了。 二、实现代码 RootsPolynomial.h #pragma once#include <algorithm> #include <cstdint>…

LeetCode题解:2303. 计算应缴税款总额,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/calculate-amount-paid-in-taxes/ 解题思路&#xff1a; 该题的目标是把收入分层几个区间&#xff0c;每个区间内部的金额单独计算纳税额以[[3,50],[7,10],[12,25]]为例&#xff0c;该题要计算的分别是&#xff1a; [0, 3…

MATLAB神经网络---regressionLayer回归输出层

回归输出层regressionLayer 回归层计算回归任务的半均方误差损失。 Matlab中的regressionLayer函数是一个深度学习工具箱中的函数,用于定义回归问题的损失函数层。它可用于神经网络模型的最后一层&#xff0c;将预测值与目标值进行比较,并计算出损失值。 语法 layer regre…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

MySQL备份与恢复:确保数据的安全与可靠性

引言: 数据的安全性和可靠性的重要性 在现代企业和组织中,数据已经成为了最重要的资产之一。数据的安全性和可靠性对于企业的运营至关重要。首先,数据的安全性保证了敏感信息不会落入错误的手中,防止了潜在的经济损失和法律风险。其次,数据的可靠性则确保了企业能够准确…

AI学习指南机器学习篇-支持向量机超参数调优

AI学习指南机器学习篇-支持向量机超参数调优 在机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种非常常用的监督学习模型。它通过寻找一个最优的超平面来进行分类和回归任务。然而&#xff0c;在实际应用中&#x…