1 尽管许多嵌入式工程师充满了希望和梦想,但高可靠性的代码不是一蹴而就的。它是一个艰苦的过程,需要开发人员维护和管理系统的每个比特和字节。 从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。 给大家介绍7个比较好操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助 技巧1——用已知值填充ROM 软件开发人员往往都是非常乐观的一群人,只要让他们的代码忠实地长时间地运行就可以了 使用与系统活动独立的定时器可以让看门狗保持清零,即使系统已失效。 对应用任务如何整合到看门狗系统中,嵌入式开发人员需要仔细考虑和设计。 技巧7——避免易失存储器分配 不习惯在资源有限环境下工作的工程师,可能会试图使用其编程语言的特性,这种语言让他们可以使用易失存储器分配。
来源自《嵌入式系统组成结构简介》,稍作整理和摘取。 嵌入式系统的组成结构 嵌入式系统由:嵌入式微处理器、外围硬件设备、嵌入式操作系统(可选)以及应用软件系统等四个部分组成。 ? ? ? 嵌入式系统的硬件组成 最小硬件系统 ? ? ,A/D、D/A转换器 多媒体加速器:当高级图形功能需要时 总线 其他标准接口或外设 嵌入式处理器可分为: 嵌入式微控制器(MCU) 嵌入式DSP处理器(DSP) 嵌入式微处理器(MPU) 嵌入式片上系统 嵌入式外围接口电路和设备接口 嵌入式外围设备:在嵌入式系统硬件构成中,除核心控制部件(嵌入式微处理器、DSP微核心的微控制器、SoC)以外的各种存储器、输入/输出接口、作为人机接口的显示器/键盘、串行通信接口等 按照功能可分为: 存储器 通信接口 输入输出设备 设备扩展接口 电源及辅助设备 嵌入式系统硬件涉及的几个关键概念 冯·诺依曼体系结构/哈佛体系结构 CISC/RISC 影响CPU性能的因素 存储器系统
a = 100; int *p1 = &a; // 整型指针 char ch = 'A'; char *p2 = &ch; // 字符型指针 int arr[5] = {1, 3, 5, 7, 数组首元素地址和数组本身地址: int a[5] = {1, 3, 5, 7, 9}; printf("a : %p\n", a); // 数组首元素地址 printf("&a : % printf("\n"); } return 0; } 循环遍历一维数组 #include<stdio.h> int main() { int a[5] = {1, 3, 5, 7, 9};
很多时候,我们会面临由于操作不当导致的系统无法使用,或者由于调试需要而重新烧写内核等问题,这些问题的解决有相当的步骤性,基本都是实践操作,没什么理论原理,因此录制一集简短的视频,以供备用。 4,擦除坏掉的根文件系统(以粤嵌GEC210开发板 或 2440/210双核实验箱为例): nand erase 0xe00000 0x20000000 一定要注意不要手抖,把地址写错了。 擦掉后系统会自动重启,同样3秒内按任意键再次进入uboot菜单。 ############################################################## 大概一炷香时间,你会看到最终下载了多少个字节,比如 0x6bf0580 7, 将内存中的根文件系统,写入nand flash中: nand write.yaffs 0x40000000 0xe00000 0x6bf0580 8,启动开发板 / 实验箱,成功!
) 数字信号处理器(DSP) 嵌入式片上系统(SoC) 嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统(RTOS)和嵌入式系统应用。 嵌入式系统硬件平台 嵌入式系统硬件平台是以嵌入式处理器为核心,由存储器、I/O单元电路、通信模块、外部设备等必要的辅助接口组成的。 嵌入式系统的详细结构 (1) 嵌入式处理器的分类 嵌入式处理器是嵌入式系统的硬件核心。 考虑到ARMv9的发布时间暂未确定,且高通骁龙、苹果和华为麒麟的处理器技术仍在不断更新(甚至许多ARMv7 处理器仍在服役),ARMv8 距离报废还很远。 嵌入式片上系统(SoC) 片上系统(SoC)就是结合了许多功能模块,将整个嵌入式系统做在了一个芯片上的系统。
一、引言 嵌入式系统广泛应用于物联网(IoT)、工业控制、汽车电子、医疗设备、航空航天等关键行业。 全球围绕嵌入式操作系统和芯片平台形成了多个成熟生态系统,如美国的 VxWorks、QNX,日本的 µITRON,中国的 RT-Thread,以及全球支持的 Linux、FreeRTOS 等。 本文将从国际视角出发,全面对比主流嵌入式系统平台,涵盖操作系统类型、实时性、资源占用、行业应用、开发生态和发展趋势,帮助开发者在项目选型和架构设计时做出科学决策。 二、全球嵌入式系统平台类型分类 类型 代表系统/厂商 特点说明 裸机平台(无OS) STM32、AVR、PIC、MSP430 简单高效、功耗低、适用于简单控制任务 RTOS(实时系统) FreeRTOS 从极简的裸机控制器到复杂的嵌入式Linux系统,各种平台在性能、资源、成本、实时性、安全性等方面各有千秋。
嵌入式系统分类 1.按应用分 信息家电类 移动终端类 通信类(路由器交换机) 汽车电子类 工业控制类 2.按实时性分 硬实时 :规定时间内做出反应 ,航天等 软实时 :统计性实时反应即可 3.按嵌入式系统软件结构 循环轮询系统(无限循环,其中有各种条件)没有中断机制不容易实现大量io的服务 有限状态机() 前后台系统(后台:循环轮训系统,前台:中断处理) 单处理器多任务系统(由多个任务,多个中断处理过程,实时操作系统 ) 多处理器多任务系统
在多任务系统中,在任务间、中断和任务间必然存在着处理器交替抢占,轮流执行的情况。 除此之外,这些可执行对象也存在着其他关系,仔细观察这些对象,它们总是要“走走停停、互相照应”,这也正是多任务系统的特点,只有这样设计系统才能使得硬件资源得到最大的利用。 从操作系统角度来考虑,操作系统不关心这些数据的含意,只当普通的数据来处理。
系统定义与需求分析阶段 方案设计阶段 详细设计阶段 软硬件集成测试阶段 系统功能性能测试及可靠性测试阶段 开发流程图 嵌入式软件开发环境 嵌入式开发环境组成 交叉开发环境 软件模拟环境 目标板与评估板 交叉开发环境 嵌入式系统应用软件的开发属于跨平台开发,因此需要一个交叉开发环境。 用来开发的通用计算机可以选用比较常见的PC机等,运行通用的Windows等操作系统。 我们可以在资源有限、满足系统的需求的情况下尽可能把可移植性和可重用性作为第二目标,致力于开发正确性、实时性能、代码量、可移植性和可重用性相对均衡的嵌入式应用软件。 提高应用软件的可移植性和可重用性的方法: 多用高级语言少用汇编语言 将不可移植部分局域化 提高代码的可重用性 参考文献: 孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017
原理图设计 关键电路设计: 电源电路:LDO/DCDC选择(TPS7A4700低噪声) 信号调理:ADC前端抗混叠滤波(RC参数计算) 通信接口:RS485隔离电路(ADM2483芯片应用 可作为机电控制、信息家电、工业控制等方面嵌入式系统开发与应用参考书,也可作为高等院校有关嵌入式系统教学的本科生或研究生教材。 《深入理解计算机系统》:是一本经典的计算机系统基础书籍,对于理解计算机底层原理,包括硬件架构、操作系统、编译原理等方面有很大帮助,而这些知识对于嵌入式系统开发至关重要,能帮助开发者更好地理解嵌入式系统中硬件与软件的交互 Linux,而 Linux 是嵌入式系统开发中常用的操作系统。 助力秋招 | 嵌入式项目合集:该课程包含四大项目,由业内高手李老师亲自授课,带学习者全面系统地学习嵌入式开发,掌握嵌入式项目开发全流程。
在一个嵌入式系统里面,既要有输出也要有输入。那么到底什么是输入系统呢? 1.1 什么是输入系统? 先来了解什么是输入设备? 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 什么是输入系统? 输入设备种类繁多,能否统一它们的接口? 1.2 输入系统框架及调试 1.2.1 框架概述 作为应用开发人员,可以只基于 API 使用输入子系统。但是了解内核中输入子系统的框架、了解数据流程,有助于解决开发过程中碰到的硬件问题、驱动问题。 输入系统框架如下图所示: ? 要想深入理解整个输入系统,就必须研究内核的输入系统,这在后续的“驱动大全”中会讲解。
(4)移植嵌入式linux操作系统 我们做的是嵌入式应用。那么这些应用须要跑在一定的操作系统上(嵌入式操作系统)。比較经常使用的有uclinux。arm-linux,ppc-linux等。 最好的情况是,已经有针对所选择的cpu平台的嵌入式linux系统。下载后再加入自己的特定取得调试。 默认的启动脚本一般都不符合应用的须要,所以须要改动根文件系统的启动脚本。该启动脚本放在/etc 文件夹下。根文件系统在嵌入式系统中一般设为仅仅读,须要使用mkcramfs。 可是有些嵌入式系统直接不使用根文件系统。 (6)建立应用程序的Flash磁盘分区 嵌入式系统不使用磁盘作为外存,一般使用Flash。 一般使用JFFS2或者YAFFS文件系统,须要在内核中提供这些文件系统的驱动。 (7)开发应用程序 应用程序能够和根文件系统放在一个分区,也能够存在其它YAFFS或者YFFS2等分区中。
然而,在嵌入式系统开发中,malloc 的使用却受到严格限制,甚至被许多开发者视为“禁区”。这种现象并非偶然,而是由嵌入式系统的独特特性和设计哲学决定的。 嵌入式系统的背景与特点 嵌入式系统是一种专为特定功能设计的计算机系统,通常运行在资源受限的硬件上,如微控制器(MCU)或低功耗处理器。 2.1 资源受限:内存紧张与碎片化风险 嵌入式系统的内存资源非常有限。 2.2 实时性要求:非确定性执行时间 许多嵌入式应用是实时系统,要求任务在固定时间内完成(如汽车ABS系统需在1ms内响应)。 = malloc(size); if (buf == NULL) { // 错误处理 return NULL; } return buf; } 7.
有时程序对系统时间有要求,这时需要设置系统的时区以及时间了。 1. 新闻联播一般说北京时间,但是linux系统里面时区信息存储的是Shanghai,这里面没有北京地区。 3. 时间配置文件 /etc/localtime ,该文件表示系统当前使用的时间信息。 4. 修改系统时区时间 ①rm -f /etc/localtime ②ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 注:我使用的嵌入式系统中没有 ③推测:可将ubuntu桌面系统中的 /usr/share/zoneinfo/Asia/Shanghai文件重命名为localtime 放置到嵌入式系统/etc目录下,未实际测试。 注:嵌入式系统中不支持该指令tzselect ④reboot 后生效 ? 5. 修改后效果 多了8个小时。 ? 6.
文章目录 嵌入式系统的历史与发展 嵌入式系统的分类 嵌入式系统的特点 什么是嵌入式系统? 2.现代计算机技术的两大分支 通用计算机系统 嵌入式计算机系统 嵌入式系统的分类 根据不同的标准,嵌入式系统有不同的分类方法。 ,但由于嵌入式系统是一个嵌入式计算机系统,因此,只有将嵌入式处理器构成一个计算机系统,并作为嵌入式应 用时,这样的计算机系统才可称作嵌入式系统。 (3)按嵌入式系统的复杂程度分类 小型嵌入式系统 中型嵌入式系统 复杂嵌入式系统 嵌入式系统的特点 嵌入式系统特别强调“量身定做”的原则,开发人员往往需要针对某一种特殊用途开发出一个截然不同的嵌入式系统来 “嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。对象系统则是指嵌入式系统所嵌入的宿主系统。嵌入式系统的特点是由三个基本要素衍生出来的。不同的嵌入式系统其特点会有所差异。
项目过程中需要添加AP热点的需求,自然会想用到hostapd,具体的不做分析,自行百度,这里主要分析下启动脚本
嵌入式系统中的 SemVer 版本控制方案 在嵌入式系统开发中,采用 语义化版本控制(SemVer, Semantic Versioning) 能帮助团队清晰地管理 固件(Firmware)、驱动(Driver 嵌入式中的扩展规则 2.1 额外的构建号(Build Metadata) 嵌入式项目中,除了 MAJOR.MINOR.PATCH,可能还需要额外信息,比如: MAJOR.MINOR.PATCH.BUILD 版本号 说明 1.2.3+4567 版本 1.2.3,构建号 4567 1.2.3+abc1234 版本 1.2.3,Git 提交 ID abc1234 2.2 预发布版本(Pre-release) 嵌入式开发中可能有 $(git rev-list --count HEAD) echo "1.2.3+$BUILD_NUM" 示例: Firmware Version: 1.2.3+4578 3.3 在固件中嵌入版本号 嵌入式系统可在代码中定义版本号 SemVer 在嵌入式项目中的实际应用 应用场景 示例版本号 说明 正式发布 1.0.0 适用于所有设备 增加新功能 1.1.0 增加 USB 支持 修复 Bug 1.1.1 修复 I2C 传输问题 开发中
项目过程中需要添加AP热点的需求,自然会想用到hostapd,具体的不做分析,自行百度,这里主要分析下启动脚本