【系统架构设计师】四、嵌入式基础知识(软件|软件设计|硬件|式总线逻辑)

目录

一、嵌入式软件

1.1 嵌入式软件分类

1.2 板级支持包(BSP)

1.3 BootLoader

1.4 设备驱动程序

二、嵌入式软件设计

2.1 编码

2.2 交叉编译

2.3 交叉调试

三、嵌入式系统硬件的分类

3.1 根据用途分类

3.2 存储器分类

四、内(外)总线逻辑

五、历年真题练习


一、嵌入式软件

        嵌入式软件是指应用在嵌入式计算机系统当中的各种软件,除了具有通用软件的一般特性,还具有一些与嵌入式系统相关的特点,包括:规模较小、开发难度大、实时性和可靠性要求高、要求固化存储

1.1 嵌入式软件分类

  • 系统软件控制和管理嵌入式系统资源,为嵌入式应用提供支持的各种软件如设备驱动程序、嵌入式操作系统(Linux、Windows、Android、iOS)、嵌入式中间件等。

  • 应用软件:嵌入式系统中的上层软件,定义了嵌入式设备的主要功能和用途并负责与用户交互,一般面向特定的应用领域,如飞行控制软件、手机软件、地图等。

  • 支撑软件辅助软件开发的工具软件,如系统分析设计工具、在线仿真工具交叉编译器等。

1.2 板级支持包(BSP)

        板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。

BSP主要包括两个方面的内容:自引导加载程序BootLoader和设备驱动程序

具体功能包括:

  • 1.单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持;

  • 2.为操作系统提供设备驱动程序和系统中断服务程序;

  • 3.定制操作系统的功能,为软件系统提供一个实时多任务的运行环境;

  • 4.初始化操作系统,为操作系统的正常运行做好准备。

主要具有以下两个特点

  • 1.硬件相关性,因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需为操作系统提供操作和控制具体硬件的方法

  • 2.操作系统相关性,不同的操作系统具有各自的软件层次结构,因此不同操作系统具有特定的硬件接口形式。

1.3 BootLoader

        BootLoader是嵌入式系统加电后运行的第一段软件代码,是在操作系统内核运行之前运行的一小段程序,通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境设置到一个合适的状态,以便为最终调用操作系统内核做好准备。一般包括以下功能:

  • 片级初始化:主要完成微处理器的初始化,包括设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式及其局部总线模式等。片级初始化把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程

  • 板级初始化:通过正确地设置各种寄存器的内容来完成微处理器以外的其他硬件设备的初始化。例如,初始化LED显示设备、初始化定时器、设置中断控制寄存器、初始化串口通信、初始化内存控制器、、建立内存空间的地址映射等。在此过程中,除了要设置各种硬件寄存器以外,还要设置某些软件的数据结构和参数。因此,这是一个同时包含有软件和硬件在内的初始化过程

  • 加载内核(系统级初始化):将操作系统和应用程序的映像从Flash存储器复制到系统的内存当中,然后跳转到系统内核的第一条指令处继续执行。

1.4 设备驱动程序

        在一个嵌入式系统当中,操作系统是可能有也可能无的。但无论如何,设备驱动程序是必不可少的。所谓的设备驱动程序,就是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供良好的访问接口

        对于不同的硬件设备来说,它们的功能是不一样的,所以它们的设备驱动程序也是不一样的。但是一般来说,大多数的设备驱动程序都会具备以下的一些基本功能。

  • 硬件启动:在开机上电或系统重启的时候,对硬件进行初始化。

  • 硬件关闭:将硬件设置为关机状态。

  • 硬件停用:暂停使用这个硬件。

  • 硬件启用:重新启用这个硬件。

  • 读操作:从硬件中读取数据。

  • 写操作:往硬件中写入数据。

二、嵌入式软件设计

基本开发工具是交叉编译器、交叉链接器和源代码调试器

一个典型的交叉平台开发环境,包含三个高度集成的部分:

  • 1.运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。

  • 2.运行在目标机上的高性能、可裁剪的实时操作系统。

  • 3.连接宿主机和目标机的多种通信方式,例如,以太网、USB、串口等。

2.1 编码

        编辑器:用于编写嵌入式源代码程序,从理论上来说,任何一个文本编辑器都可以用来编写源代码。各种集成开发环境会提供功能强大的编辑器,如vs系列、eclipse、keil、css等。常见的独立编辑器:UE、Source insight、vim等。

2.2 交叉编译

        嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是一个平台上生成可以在另一个平台上执行的代码。编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。

        嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码

        编译器gcc:编译阶段的工作是用交叉编译工具处理源代码,生成可执行的标文件,在嵌入式系统中,由于宿主机和目标机系统不一样,需要使用交叉编译,GNU C/C++(gcc)是目前常用的一种交叉编译器,支持非常多的宿主机/目标机组合。

2.3 交叉调试

        嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。

        在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态并能够改变被调试进程的运行状态。

        调试器gdb:gdb是GNU开源组织发布的一个强大的程序调试工具

三、嵌入式系统硬件的分类

  • 根据嵌入式微处理器的字长宽度,可分为4位、8位、16 位、32 位和64 位。
    • 16 位及以下的称为嵌入式微控制器(Embedded Micro Controller);

    • 32 位及以上的称为嵌入式微处理器

  • 按系统集成度划分,可分为两类:
    • 一种是微处理器内部仅包含单纯的中央处理器单元,称为一般用途型微处理器

    • 另一种则是将CPU、ROM、RAM 及1/0 等部件集成到同一个芯片上,称为单芯片微控制器(Single chipMicrocontroller)。

3.1 根据用途分类

  1. 嵌入式微控制器MCU;

  2. 嵌入式微处理器MPU;

  3. 嵌入式数字信号处理器DSP;

  4. 嵌入式片上系统SOC等。

  • 微控制器(Microcontroller Unit,MCU):又称单片机,把核心存储器和部分外设封装在片内。优点是单片化、体积小、功耗和成本下降,可靠性提高。包括 8501,P5IXA,MCS-251,MCS-96/196/296,C166/167,MC68HC05/11/12/16,68300 和数目众多的 ARM 系列。

  • 微处理器(Microprocessor Unit,MPU):微处理器+专门设计的电路板,集成度低、可靠性高,主要有:Am186/88、386EX、SC-400、PowerPC、68000、MIPS、ARM 系列等。

  • 数字信号处理器(Digital Signal Processing,DSP):采用哈佛结构,对系统结构和指令进行了特殊设计,适合执行大量数据处理。包括 TMS320 系列(含 C2000、C5000、C6000、C8000系列)、DSP56000 系列、实时 DSP 处理器等。

  • 片上系统(System on Chip,SoC):由个具有特定功能的集成电路组合在一个芯片上形成的系统或产品,其中包含完整的硬件系统,如处理器、IP(Intellectual Property)核、存储器等及其承载的嵌入式软件,如操作系统和定制的用户软件

3.2 存储器分类

  1. 随机存取存储器(Random Access Memory,RAM)。工作需要持续电力提供,可随机读写。
    • 动态随机存取存储器(Dynamic RAM,DRAM),采用电容存储信息。
      • 优点是集成度高、容量大、成本低。

      • 缺点是访问速度较慢、需要定期刷新常作主存

    • 静态随机存取存储器(Static RAM,SRAM),采用多个晶体管自锁的方式保存状态。
      • 优点是访问速度快、不需要刷新

      • 缺点是集成度低、容量小、成本高。常用作高速缓存

  2. 只读存储器(Read Only Memory,ROM),存储的数据不会因掉电而丢失,读取的速度比 RAM 快,常见的有以下几种:
    • 掩膜型只读存储器(Mask Programmed ROM,MROM)
      • 优点是通过掩膜大批量制造、成本低。

      • 缺点是同批数据全部一致且不可修改,只适合大批量生产。

    • 可编程只读存储器(Programmable ROM,PROM),可以用专用编程设备一次性烧录数据,适合少量制造。

    • 可擦可编程只读存储器(Erasable Programmable ROM,EPROM),优点是写入的数据可以通过紫外线擦除重写。

    • 电可擦可编程只读存储器(Electrically Erasable Programmable ROM,EEPROM),优点是写入的数据可以通过电压来清除,但是清除的速度很慢。

    • 快闪存储器(Flash Memory),优点是可以联机擦写数据且擦写的次数多、速度快,缺点是读取的速度慢(相对其他 ROM 的速度而言)。

四、内(外)总线逻辑

各类总线在嵌入式系统的位置

各类总线在嵌入式系统的位置

  1. 根据传输的信息种类分类,可分为以下几种。

    1. 数据总线,用于传送需要处理或者需要存储的数据。

    2. 地址总线,用于指定在 RAM 之中存储的数据的地址。

    3. 控制总线,将微处理器控制单元的信号传送到周边设备。

  2. 根据连接部件分类,可分为以下几种。

    • 片内总线,连接芯片内部各元件。

    • 系统总线(板级总线),连接计算机系统的核心组件。

    • 局部总线,连接局部少数组件。

    • 通信总线,主机连接外设的总线。

  3. 按照数据传输的方向,总线可以分为单工总线和双工总线

    • 单工总线只能从一端向另一端传输而不能反向

    • 双工总线能在两个方向传输

  4. 双工总线又分为半双工总线和全双工总线

    • 半双工总线只能轮流向两个方向传输;

    • 全双工总线可以同时在两个方向传输。

  5. 按照总线使用的信号类型,总线可以分为并行总线和串行总线

    • 并行总线包含多位传输线,在同一时刻可以传输多位数据,但一致性要求高,传输距离较近

    • 串行总线只使用一位传输线,同一时刻只传输一位数据,但距离可以较远

五、历年真题练习

  • 5.1 嵌入式处理器是嵌入式系统的核心部件,一般可分为嵌入式微处理器(MPU)、微控制器(MCU)、数字信号处理器(DSP)和片上系统(SOC)。以下叙述中,错误的是()

    • A.MPU在安全性和可靠性等方面进行增强,适用于运算量较大的智能系统

    • B.MCU典型代表是单片机,体积小从而使功耗和成本下降

    • C.DSP处理器对系统结构和指令进行了特殊设计,适合数字信号处理

    • D.SOC是一个有专用目标的集成电路,其中包括完整系统并有嵌入式软件的全部内容

  • 5.2 以下关于嵌入式系统开发的叙述,正确的是()

    • A.宿主机与目标机之间只需要建立逻辑连接

    • B.宿主机与目标机之间只能采用串口通信方式

    • C.在宿主机上必须采用交叉编译器来生成目标机的可执行代码

    • D.调试器与被调试程序必须安装在同一台机器上

  • 5.3 以下描述中,()不是嵌入式操作系统的特点。

    • A.面向应用,可以进行裁剪和移植

    • B.用于特定领域,不需要支持多任务

    • C.可靠性高,无需人工干预独立运行,并处理各类事件和故障

    • D.要求编码体积小,能够在嵌入式系统的有效存储空间内运行

答案

  • 5.1 A

  • 5.2 C

  • 5.3 B

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

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

相关文章

uni-app系列:uni.navigateTo传值跳转

文章目录 1. 使用URL参数2. 使用页面栈注意事项:uni.navigateTo API 参数详细说明回调函数参数 在uni-app中,如果想要通过uni.navigateTo方法跳转到另一个页面并传递参数,可以使用页面路由的URL参数或者页面栈的方式来传递。但是,…

分享一个解决 EF 性能低的思路,通过 Python 访问心跳侦测 API 保持 EF 在线

前言 .NET FrameWork EF(Entity Framework)是一个很优秀的 ORM 框架,对于提高工作效率很有帮助,但由于底层原因,在程序启动时,EF 需要初始化和加载模型及其对应的数据库元数据等等,涉及到数据库…

20240507-招商证券 基于鳄鱼线的指数择时及轮动策略

动量震荡指标构造 动量震荡指标为交易者提供了获利的钥匙。动量震荡指标测算了5根价格柱相对于34根价格柱的动量变化。首先计算最近5根价格柱的最高价和最低价间的中点的简单移动平均值,即(最高价最低价)12的简单移动平均,将得出的值减去最近34根价格柱…

urfread学Linux|基本操作

切换界面 如何在VMware切换到命令行界面、切回图形化界面、释放鼠标和键盘 使用ctrlalt可以释放虚拟机对鼠标键盘的控制——就是你可以按这个键切出来到windows 使用ctrlaltF1可以切到图形化界面 使用ctrlaltF2可以切到命令行界面 文件夹相关操作 创建:mkdir文件…

Odoo OWL组件简介

Odoo OWL是Odoo框架中的一个前端开发工具,它被设计用来创建高效、可维护的用户界面组件。OWL利用现代JavaScript的特性,如组件、钩子(Hooks)和虚拟DOM,来提高开发效率和用户体验。OWL组件是构建Odoo前端的基础&#xf…

Cephalo:专门用于仿生设计的多模态视觉大型语言模型

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

linux库函数 gettimeofday() localtime 使用demo

1. 基本说明 /* linux库函数 gettimeofday 1. 头文件#include <sys/time.h> 2. 函数形式int gettimeofday(struct timeval *tv, struct timezone *tz); 3. 返回值Returns 0 on success, or –1 on error 4. 参数tv&#xff1a;虽然tv_usec字段提供微秒级精度&#xff0…

代码随想录训练营第十七天 654最大二叉树 617合并二叉树 700二叉树搜索树的搜索

第一题&#xff1a; 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先找到这个数组中的最大值的下标。 然后将数组分为左右两个区间。 然后进行递归。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

审美进阶:7个小程序模板,助你提高设计感!

小程序是一种无需下载和安装即可使用的应用程序。小程序实现了应用程序“触手可及”的梦想。用户可以通过扫描或搜索打开应用程序。对于开发者来说&#xff0c;小程序也大大降低了开发成本。因此&#xff0c;越来越多的品牌争相制作小程序应用程序。本文将为您带来优秀的微信小…

安卓开发,获取本机手机号

用免费云服务器&#xff0c;三丰云记录安卓开发过程 以下是使用 Android 开发获取本机手机号的示例代码&#xff08;需要相关权限&#xff09;&#xff1a; java 复制 import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; i…

ubuntu安装qtcreator与环境配置

sudo apt-get update sudo apt-get install gcc g # 两个编译器 sudo apt-get install build-essential # 编译c/c所需要的软件包 sudo apt-get install libgl1-mesa-dev # 安装mesa&#xff0c;Mesa 实际上是一个库&#xff0c;它实现了多种图形 API 规范 sudo apt-get insta…

[pycrypto][python]pycrypto所有whl文件下载地址汇总

PyCrypto是一个强大的Python加密库&#xff0c;专为密码学和数据安全提供了一系列工具。以下是关于PyCrypto的详细介绍&#xff1a; 项目简介&#xff1a; PyCrypto是一个广泛使用的开源Python库&#xff0c;它包含了多种经典和现代的加密算法&#xff0c;如AES&#xff08;高级…

IOPaint前后端框架

IOPaint 前后端框架 IOPaint 是一个图像修复工具&#xff0c;使用了先进的AI模型进行图像编辑。以下是其前后端所使用的框架&#xff1a; 前端框架 IOPaint 的前端使用了 Node.js 和 npm 进行依赖管理和构建。具体步骤如下&#xff1a; 克隆仓库并进入 web_app 目录&#x…

微信小程序设置时间缓存限制,一段时间后自动清除缓存内容

在原生微信小程序的 app.js 文件里的 onShow (生命周期回调-监听小程序启动或切前台)进行设置 在 uni-app 的 App.vue 文件里的 onShow (生命周期回调-监听小程序启动或切前台)进行设置 onShow() {// 存入初次打开小程序的时间&#xff0c;为后面清除缓存使用const dataExpir…

MFC结构体定义中使用CString类型

MFC的结构体定义中字符串可以使用CString类型&#xff1b; struct MyStruct {int x;int y;CString str; }; ...... void CTttView::OnDraw(CDC* pDC) {CTttDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;MyStruct m_…

React 组件通信-案例

React 组件通信是构建复杂应用的核心部分&#xff0c;涉及到不同组件之间的数据传递和事件处理。以下提供了相应的案例代码。 1. 父组件向子组件传递数据&#xff08;父传子&#xff09; 父组件通过 props 向子组件传递数据。 // ParentComponent.js import React from reac…

Android中的导航navigation的使用方式

在 Android 中&#xff0c;导航&#xff08;Navigation&#xff09;组件是一种用于管理应用内导航和屏幕之间关系的框架&#xff0c;它可以帮助你以一种更一致和结构化的方式管理应用的各个页面或片段&#xff08;Fragments&#xff09;之间的跳转和导航。下面是使用导航组件的…

vue配置中的process.env

项目中的.env开头的文件是否知道是干什么的呢 主要是为了区分测试环境还是生产环境env.development为测试环境 # 测试环境 NODE_ENV development VUE_APP_BASE_API http://xxxxxxxxx // 命名一定要以 VUE_APP_ 开头&#xff0c;要不然根本取不到 .env.production为生产环境…

C++ 内存分配可视化

GitHub - archibate/mallocvis: allocation visualization in svg graph 正常连续内存分配 #include <vector>int main() {// 堆mallocstd::vector<int> memory;for (int i 0; i < 1000; i) {memory.emplace_back(i*10);}return 0; } 主动内存分配释放 #in…

微信小程序简易录音机

首先先创建一个项目&#xff08;想必大家都会啦那就直接开干&#xff09; 首先上html结构 <view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view>&l…