嵌入式TDD实践记录(01)

嵌入式TDD实战:从红绿重构到工具选型与避坑指南 测试驱动开发(TDD)是一种先写测试、再写实现、最后重构的开发方法,其核心在于通过快速反馈缩短缺陷发现周期。在嵌入式软件领域,传统工作流依赖烧录、硬件复现和串口调试,反馈链路漫长,质量难以保障。而TDD通过主机测试、桩与模拟等手段,将验证环节从目标板迁移到PC上,让逻辑与硬件解耦,从而大幅提升回归效率与代码置信度。理解红绿重构循环,掌握Unity、Ceedling、CMock等工具选型,并善用硬件抽象层(HAL)进行依赖隔离,是落地嵌入式TDD的关键路径。该方法适用于温控逻辑、状态机、协议帧解析等算法密集型 阅读详情

最近参与进一个项目,代码真的很乱.

项目使用了RTOS, 但是好像当初设计的时候没有很好的做任务划分.主要体现在:

  • 任务职责不清晰
  • 任务间的使用队列通信,但是对队列中携带的数据的数据格式没有明晰的定义
  • 代码之间耦合的厉害,状态和数据没有统一的管理,都是通过全局变量来进行操作的

修改这样的代码真的很崩溃! 

所以一冲动之下就去图书馆找了一些如何编码的书来看!

这里列一个书单:

  • << 程序开发人员测试指南-构建高质量的软件>>  作者: [瑞典] Alexander Tarlinder
  • <<修改软件的艺术-构建易维护代码的9条最佳实践>> 作者:[美] Devid Scott Bernstein 
  • <<测试驱动的嵌入式C语言开发>> 作者:[美] James W. Grenning
  • <<面向对象的思考过程>> 作者:[美] Matt Weisfeld

希望可以从书中找的解决混乱代码的解决之道!

嵌入式大部分是用C语言来开发的, 养成的编程思维是结构化和面向过程的思维. 但上面的书大部分需要一个面向对象的思维来编程.

学习一门面向对象的语言真的很重要.

虽然所C也可以写出面向对象的程序. 但是没有经历过专业的训练的话, 程序编写的过程中还是面向过程的思维方式.

但是当前大部分实践方法都需要面向对象编程.

之前看有人问,作为一个程序员需要学习哪几门语言的时候,有人回答说只要精通一门语言就好了, 不要贪多.

话虽然不错,但是学习其它的语言可以扩展自己的思维方式,拓宽思路. 将其它语言原生的编程思维,引入到自己主要使用的开发语言上.

小感慨一下! 

 

Java TDD实战:JUnit与Mockito构建高质量代码的黄金法则 单元测试是软件工程中保障代码质量的核心实践,它通过验证代码单元的行为是否符合预期,为系统稳定性提供基础保障。其原理在于隔离被测代码,模拟外部依赖,从而快速定位问题。在Java生态中,JUnit作为测试框架的标准,定义了测试生命周期和断言机制;而Mockito则通过模拟对象技术,解决了复杂依赖环境下的测试隔离难题。两者结合,能够显著提升代码的可测试性和设计质量,广泛应用于微服务、库开发和企业级应用等场景。本文聚焦测试驱动开发(TDD)这一先进实践,深入解析如何运用JUnit 5的精细化控制(如参数化测试、生命 阅读详情

相关推荐

嵌入式开发实战:构建可复用固件架构的API、HAL与驱动设计指南

在嵌入式系统开发中,可复用性和模块化设计是提升效率与代码质量的核心工程实践。其基本原理在于通过清晰的分层架构,将易变的硬件细节与稳定的业务逻辑解耦。这种架构的技术价值在于显著提升代码的可移植性、可维护性和可测试性,使得产品在更换MCU或外设时,上层应用能快速适配。典型的应用场景包括多硬件平台产品线开发、团队协作以及长期项目维护。本文以**硬件抽象层(HAL)**和**驱动程序(Drivers)** 的设计为例,深入探讨如何通过定义统一的接口来封装硬件差异,并构建面向具体功能的**应用程序接口(API)**,

weixin_34195142的博客 383

测试驱动开发系列之二--嵌入式系统TDD策略

嵌入式系统TDD策略 这篇文章中主要介绍嵌入式TDD周期和如何不受跨平台问题影响而保持开发的步伐。我们看到了双目标系统的优势和如何包容在目标系统中测试所带来的风险。然后也解答了一些常见的关于TDD的疑惑。 5.1目标硬件的瓶颈 对于很多嵌入式项目来讲,并行进行硬件和软件开发是个现实。如果开发的软件只能在目标硬件上运行,你很可能会遭遇到下面的一个或多个浪费时间的因素。 直到项目的后期硬件还没

千月星跡 2060

Sinatra 部署实战:Ruby 3.2 + RVM + rackup 全链路落地指南

Sinatra 是基于 Rack 协议的轻量级 Ruby Web 框架,其核心价值在于将 HTTP 请求/响应逻辑直接映射为简洁的 Ruby 代码,无需复杂约定即可启动服务。它依赖 Rack 接口实现中间件链、路由分发与协议适配,技术本质是 Ruby 运行时与 Web 服务器之间的标准化胶水层。相比 Rails 等全栈框架,Sinatra 更适合 API 中间层、监控看板、嵌入式管理界面等资源敏感型场景。实际落地难点不在语法,而在于 Ruby 版本治理(如 Ruby 3.0+ 强制要求)、用户级环境隔离(R

weixin_30696427的博客 357

嵌入式系统工程实践:15个真实项目解构硬件设计思维

嵌入式系统本质上是物理世界与数字逻辑的耦合体,其核心在于对信号链路、功耗边界、机电协同、时序约束等底层物理规律的建模与控制。理解模拟前端设计(如仪表放大器、带通滤波)、低功耗管理(如RTC唤醒、动态门控)和寄生参数影响(如分布电感/电容谐振),是实现高可靠性硬件的基础。这些能力支撑着医疗电子、智能传感、无人机飞控、激光通信等关键应用场景。本文以15个工业级真实项目为载体,揭示阻抗匹配、实时性铁律、EMC结构化设计等隐性工程知识,帮助开发者从API调用者进阶为系统级问题解决者。

weixin_36277197的博客 197

嵌入式 TDD

test-driven-development-for-embedded-c_b1_0

嵌入式TDD开发 工程框架 VS2012+CodeWarriorV5.x+Unity

一个自己做的用于嵌入式TDD开发的工程框架/模板 配置: VS2012 + Unity + Cmock + Codewarrior V5.x(默认target为MC9S12XEP100)。 注意,这个Unity是纯C语言的TDD测试套件,不是那个Unity3d。 后续会在博客https://blog.youkuaiyun.com/lin_strong上更新使用说明以及实战系列。

【项目案例】嵌入式Linux比较好的10+练手项目推荐,附项目文档/源码/视频

该项目是一个工业电表智能监测系统,实时监测工业设备的电流和电压,并通过A7启动M4处理器,将读取的电流和电压数据呈现在数码管上。,可实战10余个项目案例,涉及家居、医疗、农业多种应用方向,在案例中使用了多种物联网和嵌入式技术,包括Qt开发、linux应用开发、linux驱动开发、物联网云端接入、MQTT协议、json字符串等。入手,掌握Linux基础与应用开发、C++及Qt界面开发知识后,可以进行Qt综合项目实战,积累项目经验,相对学习门槛低,行业人才需求也大,企业看重项目经验,对于后续找工作非常有帮助。

华清远见IT实验室专栏 1万+

基于嵌入式的实习报告

实习报告。对于课程的要求和无法通过的验证进行研究。

嵌入式学习中较好的练手项目和课题整理

关注、星标公众号,直达精彩内容出品 | 优快云(HowieXue)项目中成长是迅速且高效的。0、引言何为嵌入式?IEEE官方定义:Devices Used to Control,Monitor Assist the Operation of Equipment,Machinery or Plants。翻译过来就是:用于“控制、监视或者辅助操作机器和设备的装置”。其实按我理解,嵌入式系...

李肖遥的专栏 953

嵌入式开发实习报告

在嵌入式开发板中,用C语言在linux操作系统系进行开发

用Navicat轻松管理魔兽世界私服数据库:修改IP、添加装备的实用技巧

本文详细介绍了如何使用Navicat管理魔兽世界私服数据库,包括修改服务器IP、添加自定义装备和调整角色属性等实用技巧。通过专业的SQL操作指南,帮助玩家轻松实现私服的高级定制,提升游戏体验。

fanta的博客 948

测试驱动开发(TDD)学习分享-上篇

测试驱动开发(TDD)是一种增量式软件开发技术。简单地说,就是在没有失败的单元测试的前提下不可以写产品代码。这些测试要很小,而且要自动化。用测试来驱动其实很合理。相对于直接写产品代码,TDD的实践者们会先用测试来表达他们希望产品代码会有什么样的行为。然后这个测试显然会失败。只有在这时,他们才开始写产品代码;以便让测试通过。在测试驱动开发LightScheduler时,测试夹具通过截获对TimeServeice和LightController的调用来校验LightScheduler的行为是否正确。

u010467490的博客 3286

S7-1200与KINCO伺服通信实战:CM CANopen模块配置避坑指南(附完整PDO映射表)

本文详细解析了西门子S7-1200 PLC通过CM CANopen模块与KINCO伺服驱动器的通信配置全流程,重点解决PDO映射混乱、心跳报文配置错误等常见问题。提供硬件组态、参数设置、PDO映射模板及故障排查方案,助力工业自动化系统实现稳定高效的多轴运动控制。

2y3u4i5o6p的博客 1106

Cleer Arc5耳机TDD测试驱动开发流程

本文介绍Cleer Arc5耳机项目中采用测试驱动开发(TDD)的实践经验,通过分层测试、Mock技术和CI/CD集成,提升嵌入式软件质量与团队协作效率,显著降低发布后缺陷率。

weixin_36047538的博客 875

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3744

超简单的视频换脸,效果相当不错!完全白嫖的技术,来自ComfyUI 官方客户端一键搞定!手把手教会你如何下载安装部署,而且教你如何使用。

如果你电脑上没有安装Visual Studio的C++桌面开发组件,还有Windows应用SDK C++模板,那么你需要自行去下载安装下【安装后默认界面会自动识别系统语言,当然如果你是中文繁体用户,那么你可以在 ComfyUI 的管理器里下载。】并把它放入根目录-models-insightface文件夹内 , 同时下载视频换脸工作流 【分享手把手教你视频换脸,本地部署,轻轻松松当上“电影主角”】,否则insightface无法被正常载入。) 这是换脸必备的工具 ,安装后重启;

TianLeung的博客 2869

MCU别再“裸奔”了,开源一套能直接跑工业项目的嵌入式全栈框架:Anbo 微内核 + 自动化工程体系

嵌入式开发老兵开源工业级全栈解决方案,包含轻量级协作式微内核Anbo-MOS和工业级应用工程Anbo-L4s5-App。核心特性:1)极简内核设计,适配STM32L4S5;2)工业级功能,包括低功耗唤醒、现场回溯系统和多任务看门狗;3)一键自动化构建,摆脱环境配置困扰;4)集成TDD测试框架,支持硬件模拟测试。项目已在GitHub开源,旨在为开发者提供可靠架构支持,避免常见开发陷阱。作者呼吁开发者参与贡献和Star支持项目持续发展。

一路往蓝-Anbo 的博客 1598

华为S5720交换机堆叠配置

S5720交换机,做下堆叠,两条线,交叉互联(即A交换机23口连到B交换机24口,A交换机24口连接B交换机23口)。PS:S5720堆叠可基于电口或者光口做,本次测试基于电口。 SWA配置 # 改名 [Huawei]sysname SWA # 最好先shutdown接口 [SWA]interface GigabitEthernet 0/0/23 [SWA-GigabitEthernet0/0/23]shutdown [SWA-GigabitEthernet0/0/23]interface G.

Markdown 6340

嵌入式Test-First实战:从Host单元测试到硬件在环

测试驱动开发(TDD)是一种强调先编写测试用例、再实现功能的软件开发方法论,其核心原理是通过快速反馈确保代码正确性。在嵌入式领域,该方法常因硬件依赖、编译烧录链路漫长和断言难写而被误解,但随着固件复杂度攀升和功能安全标准趋严,Test-First正重新成为质量保障的关键实践。通过将纯逻辑代码放在Host环境进行单元测试、使用Unity与CMock实现依赖隔离,再结合分级策略与硬件在环验证,嵌入式团队能够有效缩短联调周期、降低缺陷修复成本。该实践广泛应用于汽车ECU、IoT设备、工业控制等场景,尤其适合处理协

weixin_33827731的博客 340

【异常】解决 Cursor 报错 Unexpected seqno: 2 != 1. Please try again, or contact support if the issue 的排坑指南

在使用 Cursor 辅助编程时,你是否遇到过 AI 突然中断输出,并在右下角弹出一个红色的 Network Error 弹窗?今天我们就来彻底解析并解决这个网络断连问题。

奶爸的编程之路,也就一周冷个三天 2486

Euro-NCAP-HWA测试流程中文版V1.1(2023发布)

在本协议中,使用了以下术语:Vehicle undertest (VUT) – 指根据本规程测试的车辆,车上有碰撞前的碰撞缓解或避免系统Global VehicleTarget (GVT) – 指本协议中使用的车辆目标,其定义见TB025—Euro-NCAP全球车辆目标规范v1.0辅助其他车辆(SOV)--指最新的 AEB VRU 测试规程中定义的 "大型障碍车辆"(而非机器人控制的平台),用于本规程中的 "切出 "测试。Time To Collision (TTC) – 指在VUT碰撞GVT之前的剩余时间

小明师兄的博客 598

AI 与嵌入式三时简报|早报

本期聚焦端侧开放权重模型、智能体编排延迟、AI 编程计划、NPU 仿真闭环与可量产的嵌入式产品方法。核心判断:端侧智能体的瓶颈已从“模型能否运行”转向“任务如何可靠执行与验证”。

u013134676的博客 180

《Zephyr OS 入门与实战》第3章:第一个 Zephyr 程序 - Blinky 实战

解决方法:确认设备树overlay文件已正确加载。返回值,确认驱动初始化状态。

2301_79143213的博客 542

嵌入式C静态代码分析工具选型终极决策树(NASA DO-178C / ISO 26262 ASIL-D双认证实操清单)

面向航天与汽车功能安全开发,提供嵌入式 C 语言静态代码分析工具选型方法论。覆盖NASA DO-178C A级与ISO 26262 ASIL-D双认证实操要点,含规则集适配、MISRA合规性、误报率评估等关键维度。决策树驱动精准匹配项目需求,值得收藏。

codeink的博客 331

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

第18章:软件质量验证与性能提升技术

本文介绍了软件质量验证与性能提升的关键技术。主要内容包括:1) 软件测试方法论,涵盖单元测试、集成测试和系统测试,并演示了使用Check框架进行C语言测试的实例;2) 缺陷跟踪与管理,通过Shell脚本实现基本的Bug跟踪功能;3) 调试技巧与工具,展示了使用GDB诊断段错误的方法;4) 性能分析与优化,利用perf工具识别计算瓶颈。这些技术在嵌入式系统开发中尤为重要,需结合RTOS特性和硬件调试工具进行针对性应用。

小宝哥Code的专栏 1040

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

第五章:如何对 HAL 库本身进行单元测试?

《嵌入式TDD进阶:底层硬件测试实战》摘要 本章探讨嵌入式底层开发的测试策略。针对寄存器操作、HAL库调用等难以隔离的场景,提出三种解决方案:1)使用Fake替代Mock处理复杂调用链(如I2C扫描);2)通过StubWithCallback伪造硬件响应;3)利用影子内存技术测试寄存器驱动。重点强调测试边界:不验证官方库功能,专注业务逻辑与硬件的交互行为。文中以I2C设备探测为例,展示如何用回调函数模拟设备响应,实现从业务逻辑到硬件驱动的全路径TDD覆盖,同时提醒避免过度Mock导致的测试代码膨胀。

一路往蓝-Anbo 的博客 673

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

下一篇: python实现文本编码转换
飞箭前面的蜗牛
博客等级 码龄12年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值