当前位置: 首页 > news >正文

嵌入式开发之嵌入式系统架构如何搭建?

嵌入式系统架构的搭建的好坏决定了整个嵌入式底层设计的可靠性,稳定性以及需求契合性,是非常重要的一环,马虎不得,轻心不得。一般嵌入式系统的架构搭建涉及硬件和软件两个方面,以下是详细介绍:

硬件架构搭建

  • 选择微处理器 / 微控制器:根据项目的性能、功耗、成本等要求选择合适的芯片。如对于简单的控制任务,可选择低功耗、低成本的单片机;对于处理复杂图像、视频等数据的任务,可能需要高性能的 ARM 处理器或 DSP。
  • 配置存储设备:包括易失性存储器(如 RAM)和非易失性存储器(如闪存、EEPROM)。RAM 用于运行程序和存储临时数据,非易失性存储器用于存储程序代码、配置信息和重要数据。
  • 设计输入 / 输出接口:根据连接的外部设备选择合适的接口,如 GPIO、UART、SPI、I2C、ADC、DAC 等1。例如,连接温度传感器可能用到 ADC 接口,连接蓝牙模块可能用到 UART 接口。
  • 连接外部设备:根据应用场景连接各类外部设备,如传感器(用于采集环境数据)、执行器(用于控制外部设备动作)、显示器(用于显示信息)、键盘、触摸屏(用于用户输入)等。

软件架构搭建

  • 确定软件架构模式
    • 超级循环架构:适用于资源紧张、功能简单、对实时性要求不高的场合,是一个顺序执行模型,主要是一个大循环,依次执行各个任务9。
    • 前后台系统:在超级循环架构基础上引入中断机制,形成 “前台(中断)+ 后台(主循环)” 架构,适用于资源有限但任务多样、既有实时性要求又有常规处理流程的系统9。
    • 事件驱动架构:将系统分解为 “事件生产者” 和 “事件消费者”,通过事件队列解耦系统组件,常用于对异步响应要求高、用户交互多的系统9。
    • 分层架构:将系统划分为多个功能层次,如应用层、中间件层、操作系统层、硬件抽象层 / 板级支持包层、硬件层,每层只能调用下层的接口,提高了代码的模块化程度和可维护性9。
  • 编写底层驱动程序:针对硬件设备编写驱动程序,实现对硬件的初始化、读写操作等功能。驱动程序封装了硬件的细节,为上层软件提供统一的接口。
  • 开发中间件(可选):根据项目需求添加中间件,如实时操作系统(RTOS)、文件系统、网络协议栈、图形库等4。RTOS 可以实现任务的调度和管理,提高系统的实时性和可靠性;文件系统用于管理存储设备上的文件;网络协议栈用于实现网络通信功能;图形库用于实现图形界面。
  • 设计应用程序逻辑:根据系统的功能需求,在应用层编写代码,实现具体的业务功能,如数据采集、处理、分析,设备控制,用户界面交互等。

以下是一个简单的嵌入式系统分层架构框架图9:

+---------------------+
|     应用层          |
| (用户业务逻辑、   |
|   用户界面等)     |
+---------------------+
|     中间件层        |
| (网络协议栈、     |
|   文件系统等)      |
+---------------------+
|     操作系统层      |
|  (RTOS内核等)     |
+---------------------+
| 硬件抽象层/板级    |
|   支持包层          |
| (硬件操作接口、   |
|   启动代码等)      |
+---------------------+
|        硬件层       |
| (微控制器、        |
|   存储器、外设等)  |
+---------------------+

http://www.lqws.cn/news/466021.html

相关文章:

  • Spring与SLF4J/Logback日志框架深度解析:从源码看日志系统设计
  • elasticsearch安装ik分词器
  • 3.1 Android NDK交叉编译FFmpeg
  • 领域驱动设计(DDD)【3】之事件风暴
  • React 重识
  • Seata模式
  • Spring AOP全面详讲
  • 从 Elasticsearch 集群中移除一个节点
  • `customRef` 在实战中的使用:防抖、计算属性缓存和异步数据获取
  • 腾讯云IM即时通讯:开启实时通信新时代
  • nuxt3 + vue3 分片上传组件全解析(支持大文件+断点续传)
  • RabbitMQ 的工作流程
  • 【unitrix】 3.6 类型级数转基础类型(from.rs)
  • springboot通过独立事务管理器实现资源隔离与精准控制​
  • HTTPS的加密方式介绍
  • MinIO社区版文件预览失效?一招解决
  • 【Fargo】mediasoup发送2:码率分配、传输基类设计及WebRtcTransport原理
  • React 组件通信
  • C++ 移动构造:提升性能的利器
  • docker执行yum报错Could not resolve host: mirrorlist.centos.org
  • Snapchat矩阵运营新策略:亚矩阵云手机打造高效社交网络
  • C++:动态链接库的编写,__declspec 用法详解
  • 7.3.2_2平衡二叉树的删除
  • 【RTP】基于mediasoup的RtpPacket的H.264打包、解包和demo 1:不含扩展
  • windows下docker虚拟文件大C盘迁移D盘
  • GPT-1 与 BERT 架构
  • TodoList 案例(Vue3): 使用Composition API
  • 基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计
  • 深入浅出JavaScript 中的代理模式:用 Proxy 掌控对象的“行为开关”
  • Python 爬虫案例(不定期更新)