嵌入式系统概述

嵌入式系统(Embedded system)

嵌入式系统在应用非常广泛,应用于电信系统、电子类产品、医疗设备、智能家居等领域,常见的有手机、MP3、智能电饭煲等等。

嵌入式系统可以定义为:嵌入到对象体系中的专用计算机应用系统

现代嵌入式系统通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器(使用外部存储芯片和外设接口电路)也很常见。大致组成如图所示:
在这里插入图片描述
根据嵌入式系统的定义,可以看出其三个基本的特征:

  • 嵌入性,专指计算机嵌入到对象体系中(执行装置),实现对其的智能控制。
  • 专用性,指在满足对象控制要求及环境要求下的软、硬件裁剪性。
  • 计算机,是对象智能化的控制的根本保证,能实现对象系统的计算机智能化控制能力。

嵌入式处理器

嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元,直接关系到整个嵌入式系统的性能。可分为以下四种类型:

  • 嵌入式微处理器(Micro Processor Unit,MPU)

  嵌入式处理器由通用计算机的CPU演变而来,但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,大幅度减小系统体积和功耗。和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。

  • 嵌入式微控制器(Microcontroller Unit,MCU)

  嵌入式微控制器典型代表,单片机。一般以某种微处理器内核为核心,集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。

  • 嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP)

  嵌入式DSP处理器在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令的执行速度,更适用于DSP算法,是专门用于信号处理的处理器。在数字滤波、FFT、谱分析等各种仪器上DSP有着了大规模的应用。

  • 嵌入式片上系统(System On Chip,SOC)

  SOC指的是在单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。所谓完整的系统一般包括中央处理器(CPU)、存储器、以及外围电路等。SOC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。而且SOC具有极高的综合性,在一个硅片内部运用VHDL等硬件描述语言,实现一个复杂的系统。常见有Kirin 990、Snapdragon 855。

嵌入式操作系统(Embedded Operating System)

嵌入式操作系统是指用于嵌入式系统的操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。

分类

  • 实时操作系统(Real Time Operating System,RTOS)

  实时操作系统是保证在一定时间限制内完成特定功能的操作系统,强调的是实时性可靠性灵活性。当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务。

从实时系统的应用特点来看可分为:一般实时操作系统嵌入式实时操作系统

电气和电子工程师协会(IEEE)认为RTOS应该具备以下特点:

  1. 异步事件的响应
  2. 切换时间和中断延迟时间确定
  3. 优先级中断和调度
  4. 抢占式调度
  5. 内存锁定
  6. 连续文件
  7. 同步

基本概念

  • 前后台系统

  应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为,后台程序掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。而前台程序通过中断来处理事件。一般情况下,后台程序也叫事件处理任务,前台程序也叫中断级任务。

  • 操作系统

  操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。

在这里插入图片描述

  • 任务/任务切换

  一个任务,也称作一个进程,是一个简单的程序,该程序可以认为CPU完全属于该程序自己。 实时应用程序的设计过程,包括如何把问题分割 成多个任务,每个任务都是整个应用的某一部分, 每个任务被赋予一定的优先级,有它自己的一套 CPU寄存器和自己的栈空间。任务切换也称进程切换,就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。

  • 资源/共享资源

  程序运行时可使用的软、硬件环境统称为资 源。资源可以是输入输出设备,例如打印机、键 盘、显示器。资源也可以是一个变量、一个结构 或一个数组等。可以被多个任务使用的资源称为共享资源。

  • 代码的临界区

  临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用。

  • 内核

  多任务系统中,内核负责管理各个任务,或 者说为每个任务分配CPU时间,并且负责任务之 间的通信。内核提供的基本服务是任务切换。

  • 调度

  调度是内核的主要职责之一。调度就是决定该 轮到哪个任务运行了。多数实时内核是基于优先级 调度法的。每个任务根据其重要程序的不同被赋予 一定的优先级。

  • 任务优先级

  任务的优先级是表示任务被调度的优先程度。 每个任务都具有优先级。任务越重要,赋予的优 先级应越高,越容易被调度而进入运行态。

  • 中断

  中断是一种硬件机制,用于通知CPU有个异步 事件发生了。中断一旦被识别,CPU保存部分(或 全部)上下文即部分或全部寄存器的值,跳转到专 门的子程序,称为中断服务子程序(ISR)。

  • 占先式内核/非占先式内核

  占先式内核一般多为实时系统,高优先级任务一旦就绪便立刻抢占CPU资源,而被打断的低优先级任务将退出运行,进入排队等待下一次调度。非占先式内核的当前执行任务虽然同样可以被中断,但并不完全失去CPU的使用权,当中断完毕后将恢复此任务的执行。只有当前任务执行完毕后才交出CPU资源给其他任务。

韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页