怕怕怕怕怕怕怕怕怕怕

在这里插入图片描述

欢迎关注博主 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函数不能由多个任务所共享,除非能确保函数的互斥,或者使用信号量,或在代码关键部分禁用中断。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据,可重入函数要么使用本地变量,要么使用全局变量时保护自己的数据。

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

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

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

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

在这里插入图片描述


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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期望14K,某小公司java社招面试经历

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 面试的是一家几百人的公司,基本面试的考察有八股文,也有按照项目问你的,总的来说比较全面吧 1、java代理模式 …

郑州企业资信评价资质:工程咨询单位专业资信申报材料清单

在郑州企业申请工程咨询单位专业资信评价资质时,需要准备一系列详细的申报材料。以下是根据参考文章中的相关数字和信息,清晰、分点表示和归纳的工程咨询单位专业资信申报材料清单: 一、基础材料 企业法人营业执照:提供企业法人营…

统计nginx访问日志前十名

可用下面五种方式来查看: 1. grep -oP ‘^\S’ access.log |sort -rn |uniq -c |sort -rn |head 命令详细讲解: grep: 是一个文本搜索工具,允许你在文件中搜索特定的模式。 -o: 只输出匹配的部分,而不是整行。 -P: 使用Perl兼容的…

Introducing Index-1.9B

简介 大家好,今天我们很高兴首次发布Index系列模型中的轻量版本:Index-1.9B系列 本次开源的Index-1.9B 系列包含以下模型: Index-1.9B base : 基座模型,具有 19亿 非词嵌入参数量,在2.8T 中英文为主的语料上预训练&…

【JavaEE精炼宝库】多线程(5)单例模式 | 指令重排序 | 阻塞队列

目录 一、单例模式: 1.1 饿汉模式: 1.2 懒汉模式: 1.2.1 线程安全的懒汉模式: 1.2.2 线程安全的懒汉模式的优化: 二、指令重排序 三、阻塞队列 3.1 阻塞队列的概念: 3.2 生产者消费者模型&#xf…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别,箭头函数主要解决什么问题? 箭头函数与普通函数的区别: ⚫ 语法简洁性: ◼ 箭头函数使用>符号定义,省略了 function 关键字,使得语法更为紧凑。 ◼ 对于单行函…

剖析框架代码结构的系统方法(下)

当面对Dubbo、Spring Cloud、Mybatis等开源框架时,我们可以采用一定的系统性的方法来快速把握它们的代码结构。这些系统方法包括对架构演进过程、核心执行流程、基础架构组成和可扩展性设计等维度的讨论。 在上一讲中,我们已经讨论了架构演进过程和核心执行流程这两个系统方法…

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出(含动图) 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

深入解析MySQL的层次化设计

一、基础架构 1.连接器 1.会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接 2.用户密码连接成功之后,会从权限表中拿出你的权限,后续操作权限都依赖于此时拿出的权限,这就意味着当链…

Github 2024-06-14 开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目2Python项目2非开发语言项目2TypeScript项目1Dart项目1Rust项目1Lua项目1Java项目1Jupyter Notebook项目1从零开始构建你喜爱的技…

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 文档讲解:代码随想录 状态:还可以 思路: 如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。 节点值小于low:如果节点的值小于low&#xff…

【机器学习】简答

1.什么是机器学习? 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导 “预测”。计…

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展,我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力,正为我们每个人带来前所未有的红利。 那么,面对数字经济的红利,我们是否已经做好了准备?我们又该如何把握这个时代赋予我们的机…

内存卡提示需要格式化?别急,这样拯救你的数据

一、内存卡突然提示需要格式化 在日常生活中,我们经常会使用到内存卡来存储照片、视频、文档等重要数据。然而,有时当我们试图访问内存卡时,却会遭遇一个令人头疼的问题——系统突然提示“内存卡需要格式化”。这意味着我们无法直接读取或写…

不愧是字节,图像算法面试真细致

这本面试宝典是一份专为大四、研三春招和研二暑假实习生准备的珍贵资料。 涵盖了图像算法领域的核心知识和常见面试题,包括卷积神经网络、实例分割算法、目标检测、图像处理等多个方面。不论你是初学者还是有经验的老手,都能从中找到实用的内容。 通过…

自动控制理论---零点和极点、单位脉冲响应

1、实验设备 PC计算机1台,MATLAB软件1套。 2、实验目的 研究四个具有相同极点分布但不同零点分布的二阶系统对单位脉冲响应的影响。绘制各系统的零点和极点分布图。计算并绘制各系统的单位脉冲响应波形。分析零点分布对单位脉冲响应的影响。 3、实验原理说明&am…

vue3和ant-design 实现前端多种验证密码规则,最全的前端验证密码规则

1、小眼睛可以显示/隐藏明文密码(无法用input typepassword,用css样式实现切换明文) 2、输入长度统计(不是自带的,用div写的,然后定位到框内的) 3、每输入一个字符分别验证每一项规则&#xf…

Talk|CVPR‘24 Oral:超越3D - Point Transformer V3中的多模态特征提取新构想

本期为TechBeat人工智能社区第599期线上Talk。 北京时间6月12日(周三)20:00,香港大学博士生—吴虓杨的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “超越3D - Point Transformer V3中的多模态特征提取新构想”,他通过P…

【React】Lodash---groupBy() 分组

例子 _.groupBy([6.1, 4.2, 6.3], Math.floor); // > { 4: [4.2], 6: [6.1, 6.3] }// The _.property iteratee shorthand. _.groupBy([one, two, three], length); // > { 3: [one, two], 5: [three] }思路分析 来源 定义一个名为groupBy的方法,通过扩展Ar…

同三维TT806-1 USB单路网络视频流/U盘采集卡

同三维TT806-1 USB单路网络视频流/U盘采集卡 (1路网络音视频信号或U盘直播推流器) 支持采集1路网络视频流或U盘音视频信号,USB输出到电脑 同时还可流推2个直播平台,可设置6组定时推流,有线网络 可录像到U盘,支持定时录像 一…