小节
文章平均质量分 85
@嵌入式系统
这个作者很懒,什么都没留下…
展开
-
高质量嵌入式软件的开发技巧
笑傲江湖》华山派的剑宗和气宗之争,可谓异常激烈。那么问题就来了,既然有剑宗气宗之争,到底应该先练剑,还是先练气呢?前面发布 很多理论方面的文章,诸如4篇这些都是具备一定基础再架构上的描述,类似于气宗性质,这些见效慢,但高质量的软件开发,也是存在见效快的套路,针对有一定嵌入式C语言开发基础的,剑宗之法进行描述,抛砖引玉。更多技能请搜索关注。原创 2023-02-01 08:12:03 · 456 阅读 · 0 评论 -
嵌入式软件分层隔离的典范
引言:嵌入式软件开发分层、模块化是理想状态,实际开发中因各种限制而有所取舍,但这不妨碍学习参考优秀软件架构,即使有部分思想在项目中落实,也是大有裨益的。1、AUTOSAR的软件分层理论汽车电子与消费电子不同,其硬件、软件都更关注可靠性、安全性和长效性。其软件需要兼容不同供应商、在不同车型可复用,汽车电子行业的软件架构AUTOSAR(Automotive Open System Architecture)可以作为参考对象。因为不曾使用和系统学习,基于有限信息理解其软件分层思想,可能有所偏差。AUTOSA原创 2022-05-21 14:07:24 · 1645 阅读 · 0 评论 -
嵌入式代码bug从哪来,怎么去
软件从来不是一次就能完美的,需要以包容的眼光看待它的残缺。那问题究竟为何产生,如何去除呢?原创 2022-05-01 15:53:10 · 341 阅读 · 1 评论 -
动态内存管理及防御性编程
C语言的优势是可以直接访问内存地址,也就是指针操作,但其缺陷也是因为直接内存访问。如何通过防御性编程提前发现问题,尽可能减少内存异常产生的后果?原创 2022-04-26 15:26:20 · 831 阅读 · 0 评论 -
编码这件小事,我仍在努力
技术源于积累,成功来自执着原创 2022-04-15 21:54:22 · 358 阅读 · 0 评论 -
基于RTOS的软件开发理论
软件开发,大多数人依靠的是经验,缺乏理论,比如遇到问题知道怎样改可以修复问题,但不明白深层原因。有些阶段,选择高校的理论教程读读,比网红博主拼凑的技术总结,更能醍醐灌顶,提高水平。实践检验真理,但理论能指导实践。原创 2022-03-28 22:52:31 · 369 阅读 · 1 评论 -
C关键字section的作用
section关键字的效果,以及在SDK实现开机自启动的应用原创 2022-01-18 10:17:14 · 5322 阅读 · 1 评论 -
C语言关键字技巧
嵌入式C开发关键字的应用技巧原创 2022-01-10 12:57:31 · 742 阅读 · 1 评论 -
标准C文件操作模式
文件操作原创 2021-09-27 09:39:20 · 76 阅读 · 0 评论 -
设备OTA空中升级原理
1. 背景没有完美的软件,因为设计缺陷、业务需求更新,软件始终都在不断升级完善。新软件如何替换正在运行的旧软件就是本文关注的重点,尤其是针对电子产品,设备空中升级OTA,受限于硬件资源,需要选择不同的方案进行软件升级。2. 空中升级流程在线升级流程,简化就是设备运行旧软件的同时,获取新软件包,再执行特殊操作使用新软件覆盖旧软件,最后运行新软件。根据硬件资源和系统整体框架,选择不同的升级方案。3. 空中升级的方案3.1. 整包升级以STM8单片机升级为例,单片机最小系统运行流程如下:要加入在线原创 2021-04-23 23:20:27 · 1638 阅读 · 0 评论 -
物联网之蓝牙初识
1、蓝牙 BLE 技术简介1.1、 蓝牙技术的起源蓝牙的创始人是瑞典爱立信公司,爱立信早在 1994 年就已进行研发。1997 年爱立信与其他设备生产商联系,并激发了他们对该项技术的浓厚兴趣。1998 年 2 月,5 个跨国大公司,包括爱立信、诺基亚、IBM、东芝及 Intel 组成了一个特殊兴趣小组(SIG),他们共同的目标是建立一个全球性的小范围无线通信技术,即现在的蓝牙。蓝牙技术是以 10 世纪的一位丹麦国王命名的。“蓝牙(Bluetooth)”一词来源于 10 世纪的丹麦国王 Harald B原创 2021-03-25 18:53:39 · 1064 阅读 · 1 评论 -
Git版本控制工具使用说明和规范
windows环境下的Git版本控制工具使用说明和规范。目录1 Git的安装与使用2 Git的使用规范3 工欲善其事必先利其器1、Git的安装与使用1.1 前言Git 是Linux 开源社区为Linux的开发与维护而开发的一个项目,目前已被广泛应用,关于版本控制工具各有特点,本部门全部使用git,软件开发前必须熟练掌握git的使用,以及遵守相应操作规范。1.2 安装初次接触Git的用户,请抽出几分钟时间看一下https://git-scm.com/docs 的介绍文档,相信磨刀不误砍柴原创 2021-02-24 18:54:25 · 306 阅读 · 0 评论 -
物联网之移动通讯
摘要移动通信的发展历程以及物联网的展望一、移动通信的发展史从人类社会诞生以来,更加高效快捷的通讯就成为人类矢志不渝的追求。中国古代有飞鸽传书、烽火狼烟方式传递信息,这些传递信息的方式存在一定局限性。1844年,美国人莫尔斯发明了莫尔斯电码,并在电报机上传递了第一条电报,开创了人类使用“电”来传递信息的先河。1864年麦克斯韦从理论上证明了电磁波的存在,1876年赫兹用实验证实了电磁波的存在,1896年意大利人马可尼第一次用电磁波进行了长距离通讯实验,从此世界进入了无线电通信的新时代,即移动通讯。现代原创 2021-01-18 10:57:18 · 1373 阅读 · 0 评论 -
mbedtls基础及其应用
摘要SSL/TLS加密的介绍,重点是mbedtls的基础说明以及移植应用。1、引言1.1 为什么要加密互联网是开放环境,通信双方都是未知身份,为通信双方的有效信息不被第三方窃听、篡改或者被冒充身份进行通信,需要为信息加上保护措施。也就是对所有信息都进行加密,避免被第三方窃听;采用校验机制,可以识别出信息是否被篡改,配备身份认证防止被冒充身份。互联网的通信安全,就是建立在SSL/TLS协议之上。1.2 SSL/TLS协议的历史1996年,在前面的基础上,SSL 3.0版问世并得到大规模应用;19原创 2020-12-18 18:20:44 · 5808 阅读 · 0 评论 -
代码的保养
不只人要保养,代码也是如此。面向对象编程,就是把面对的代码当作对象一样,定期对其进行保养。目录一、美颜 astyle二、祛痘 cppcheck三、返老还童 git工欲善其事必先利其器一、美颜 astyle都说秀色可餐,同样的角色,都是小龙女,但是效果不一样。实现同样的功能,有的代码一目了然,命名规范,排版层次分明,写的代码诗一样赏心悦目;有的像SHI一样,尽管功能正常,看的头疼。如下面的代码,虽然可编译运行,但看起来什么感觉?//C语言混乱大赛作品#include <st.原创 2020-11-22 16:07:34 · 964 阅读 · 0 评论 -
FreeRTOS基础及其应用 (入门简化版)
FreeRTOS基础及其应用本文只是个人整理,可能存在问题.其目的只是简要介绍系统的基础,只能作为入门资料。程俊2020.11.15 目录一、 为什么要学习 RTOS 41.1 前后台系统 41.2 多任务系统 41.3 学习RTOS的意义 5二、 操作系统基础 62.1 链表 62.2 队列 62.3 任务 72.4 临界区 8三、 初识 FreeRTOS 83.1 FreeRTOS源码 83.1.1 Source 文件夹 83.1.2 Demo 文件夹 93.1.原创 2020-11-15 23:02:57 · 9927 阅读 · 3 评论 -
UART/I2C/SPI/1-wire四大通信接口的神解释
1、 裘千丈水上漂之UART射雕英雄传中的裘千丈说,UART就是我的轻功水上漂过河。要想从河上过(通信),使用最少的暗桩(使用最少的总线接口),且步伐按桩距固定(波特率固定后传输速率固定),步幅太大或太小都会落水。为了不被二弟裘千仞识破,可以安排侍卫在对岸监视通知,没风险才开始表演(流控)。UART 通用异步接收发送器,主机和从机至少要接三根线,RX,TX和GND,TX用于发送数据,RX用于接受数据,收发线独立,支持全双工方式。因为没有时钟控制,什么时机开始发数据,且保证对方正确开始接收?y如原创 2020-11-08 22:32:14 · 1427 阅读 · 0 评论 -
嵌入式软件不只为客户需求,还要考虑生产测试
软件功能不只要实现客户需求,也要为生产测试服务。软件的价值在于成为商品,对于嵌入式设备,必然有生产环节,为确保整机工作正常,务必预留生产测试接口,以便在产线简便、快速的确认硬件功能。一般小型消费类电子产品,生产流程是贴片-下载软件-校准-测试-老化-复测-配置出厂参数,不同产线可能存在差异,小作坊可能更简单,这些流程中与软件相关的就是测试工位。通过输入接口,比如按键、AT指令使设备进入特殊状态,即工程模式或者测试模式,这种模式下软件无条件接管全部硬件,测试人员通过输入接口逐个验证硬件,设备将结果输出到显原创 2020-10-22 23:28:21 · 312 阅读 · 1 评论 -
终端设备在线升级
在线升级现在基于移动网络的电子设备,都要求内部软件支持在线升级,其原理说起来就是使用新软件覆盖旧软件,但是不同硬件资源,最终实现的方案不同。简单的8位单片机如STM8,没有操作系统,实际是开发2套代码BL和APP。支持网络的模块下载单片机新软件后,告知APP请求升级,单片机重启进入BL;BL负责串口接收新APP软件,并直接覆盖写入原APP的区域,完成后再跳转到APP执行。因为代码空间限制,升级是替换完整的APP软件且没有备份,因此务必使用EEPROM做好标记,万一异常,需要自动进BL向外界发信息请求再原创 2020-09-22 15:38:11 · 533 阅读 · 1 评论 -
有限状态机的应用
状态机应用,一般是软件控制某个外设,该外设存在较多的状态或者某个业务功能有多个执行步骤,软件实现过程存在多个状态节点,一般来说叫有限状态机,简写为FSM(Finite State Machine)。处理这类问题,可以根据状态或者节点定义枚举值,命名务必可以表示其含义。软件主体采用switch-case结构或者查表法,当新的输入条件产生进入处理函数,先查当前状态,再结合逻辑进入新的状态。例如与某个外设通信,有甲乙丙丁四个状态,其中正常情况下按甲-乙-丙这样的顺序执行,丙为正常结束,丁为异常结束。即使相同的原创 2020-09-26 16:37:02 · 582 阅读 · 0 评论 -
软件定时器的基本原理
前后台系统和多任务操作系统,在简单功能上差别不大,唯一不顺手的就是前后台系统没有合适的软件定时器。封装一层软件定时器接口,对后续功能开发事半功倍。定义结构体数组,其基础成员如下:static uint32_t hw_interrupt_timer_ticks = 0;//timer tickstypedef void (*timer_callback)(void);typedef struct{ uint32 delay; //延迟时间,实际是当前时间+期望延原创 2020-09-27 09:55:41 · 1204 阅读 · 0 评论 -
项目配置与编译自动化
嵌入式设备公司的一个产品线不可能只出一款产品,必定会有各种客制化功能以适应不同场景,在基础版上衍生出多个版本。对软件来说,最佳方案是同一套代码进行不同的配置,编译出适配不同机型的软件,通用bug一处解决则全部机型的都可以修复,当然一旦出事也是一起遭殃。一套软件适配多个项目,在代码中必然有项目宏,在不同的项目宏下,有不同的功能配置和默认参数。代码实现时尽量使用功能宏,实在无法兼容的则提取项目特有的,单独一个文件实现,每个项目互不影响,要实现编译自动化,还需要脚本配合。如有甲乙丙3个项目,在ABC 三个标准原创 2020-09-26 15:48:55 · 207 阅读 · 0 评论