模块设计与实现经验总结(四)

四足仿生机器人的设计与实现 [摘 要] 本设计基于STM32F系列的STM32F103C8T6为核心控制芯片,以当前比较流行的开发软件Keil-MDK uVision4为开发平台,将嵌入式控制技术有机地融入工业设备中,设计出一款可用遥控控制的四足仿生机器人。该系统主要由电源系统、主控芯片、舵机驱动电路板、动力系统舵机、无线模块,无线遥控器模块等硬件电路组成。其主要功能是实现用手持端遥控器通过无线遥控仿生四足机器人的各项基本动作。研究本课题的主要意义在于,通过遥控四足仿生机器人,可以帮助人们完成更多人们难以完成的任务,比如一些洞穴的勘察 阅读详情

4  代码编程指南与过程规范

强烈建议采用测试驱动的模式来完成代码编程。测试驱动开发中编写测试代码目的是利用测试代码来描述和确认类的功能规格,然后编写实现代码来实现测试代码规定的功能规格并利用测试来验证编写的代码确实是符合事先设计好的功能规格。

根据前面的阐述,在详细设计时是不可能把每个类设计的很细,也就是每个类很细致的功能规格是没有设计好的。此部分工作是留在代码编写阶段来完成的,即在代码编写阶段包括:类功能规格设计和实现。

大部分开发者在编码时其实是在一边在编码实现、一边在确定类和方法的功能规格,并且会不断的调整(有时候会因为突然想到一种以前没考虑到的情况没处理、有时候是为了代码实现简单等等)。此时由于大部分精力是在考虑实现,并且是局部的实现,很容易导致某些需要全局考虑的一些例外或者异常情况没有考虑到,从而出现BUG。通过测试驱动模式可以强制大家把第二部分所讲的两个阶段区分开。

4.1代码编写建议采取以下步骤

ü 写代码前,先站在使用者角度考虑清楚将要实现的类功能规格。类分为高层类和低层类(例如数据库连接池代码,数据库连接池类属于高层类、数据库连接类属于低层类)。一般情况下会出现一个高层类和多个低层类组成一个内聚的包。在这种情况下,可以先写出整个包或者高层类的功能职责,然后逐步下低层的,也可以先写低层再写上层,具体过程看大家自己。因此不管怎么样,都会出现类职责调整的情况发生。

ü 编写类名和类中间的方法,但是不实现。

ü 以注释方式,描述类的职责、本类一些关键或者复杂的策略(方便别人能读懂你的代码)、本类需要处理的情况(要求从设计上,每个类职责要单一,否则这里就会写的很复杂)。

ü 以注释方式,详细描述public方法功能规格,特别是各种异常和例外情况下的处理方式(此时还没有私有方法,类的职责是通过public方法来体现的)。

ü 根据上述注释,以类为单位编写测试代码。

ü 实现各个方法,并通过测试。

 

4.2对于编写测试代码的建议如下

ü 必须先写测试代码

ü 尽可能的去写测试代码

ü 要以类的使用者角度来编写测试代码。

ü 针对类的功能点来写测试代码,而不是针对方法

不要采取为每个Public方法编写一个测试方法的模式来编写测试方法。每个测试方法应该测试的是该类需要处理的某一种情况。因为类的一个功能点可能要涉及多个Public方法。

类似软件测试每个测试用例,都对应一个测试点一样。每个测试方法其实都是测试类的一个功能点。

例如:一个队列类,有pop和push两个public 方法。则不要写两个测试代码:一个是testPop,一个是testPush。

而是要站在使用者角度来考虑队列类的功能规格:

1) 如果队列为空,则弹出空对象。

2) 队列应该保证先进后出。

3) 如果队列满,则Push失败。

然后针对以上三种情况,分别对应写出三个测试函数。

5  模块功能说明编写规范

5.1编写模块功能说明的目的

l 编写完整个模块后,从模块整体思考和检查所实现的模块是否符合设计要求,以及在相应细节处理方面是否存在BUG,或者不合理的情况。

l 方便开发人员和维护人员日后的维护

5.2功能说明内容及规范

编写功能说明时,由开发人员站在使用者角度来描述和重新审查模块

1、模块部署环境和与周围模块交互情况描述

u 以图方式描述本模块与周围模块的交互情况,以及部署方式。

u 本模块调用的外部接口描述。

u 本模块对基础环境要求:内存、网络、磁盘等。

2、模块配置说明

u 配置文件设计理由,那些固定不变的,哪些是应对业务变化。

u 仔细描述各个配置文件的含义

u 说明如何通过配置来对应业务变化

3、模块功能说明

详细描述本模块的功能点。对每个功能点,一般描述以下几个方面:

u 功能名

u 与该功能相关的配置文件中的配置项

u 处理流程

u 故障处理

u 可能存在的问题。

例如:

ü 功能N:按比例删除老数据

ü 相关参数

STORE_POLICY :各数据类型的存储比例

PARTITION_MIN_FREESIZE_GB:每个分区应该保留的剩余空间

DELETE_INTERVAL_MINUTE:老数据覆盖的触发间隔。

ü 处理流程

1) 判断是否所有磁盘分区的数据块都被扫描,如果存在退出

2) 判断是否获取了所有磁盘分区的总空间TotalSpace,如果存在某个分区因故障无法获取,则退出。

3) 针对本小组内每种数据类型执行下列步骤  

4) 根据块信息计算出本数据类型所有数据块的总大小UsedSpace

5) UsedSpace < (TotalSpace– 磁盘个数* minFreeSpace)* storagePer则退出类型处理

6) 计算UsedSpace -  (TotalSpace – 磁盘个数* minFreeSpace)* storagePer得到需要删除空间needDelSize。

7) 依次删除登记表中本类型最老数据块,直到删除块总大小大于needDelSize,或者删除干净。

 

ü 故障处理

1. 被删除数据块不存在:删除逻辑直接返回删除成功。

2. 被删除数据块删除失败(远程代理通讯失败、该分区目前不能访问、被占用无法访问等):将该数据块加入到“删除失败数据块列表”,定期重试。

3. 磁盘分区故障:  导致从来没有成功获取过总空间,会导致所属小组会覆盖停止工作,导致没有成功扫过数据块,会导致所属小组覆盖停止工作。

4. MASTER重起,会导致“删除失败数据块列表”被清空,不过MASTER重起会扫描到所有数据块,并重新删除。

 

ü 可能存在问题

1) 实际数据块分布与MASTER记录不一致,导致错误删除老数据。例如有人手工删除了一块比较新数据。

2) 有些删除失败数据块,会导致实际剩余空间不够。

 

4、模块故障诊断说明

模块故障诊断用于当开发人员不在时,维护人员可以根据此部分初步判断出模块工作不正常时的原因。

由于一般模块出问题,开发人员去维护,一般都是先检查是否是本模块依赖的其他模块或者环境不正常,如果本模块所依赖的环境和模块都正常,那么可能是本模块的问题。诊断说明里要描述所有的检查步骤。可以依次写出所有的检查步骤,每个检查步骤包括:

n 检查方法:如何检查(检查日志中的异常输出、检查基础环境)

n 异常原因:XXX硬件故障、XXX软件故障、XXX模块异常

FPGA设计实现四人抢答器 基于FPGA实现四人抢答器 题目:设计实现一个可容纳四组选手参赛的抢答器系统,每组设一个抢答按钮。答题开始后,由主持人按下“复位”键(开始键)后进入抢答环节,当某个小组抢答成功时,抢答器系统发出半秒的低频音(DO),显示该组别序号并点亮该组“选手指示灯”直至系统复位。此时进入答题计时环节,若超过 30 秒仍未答出,抢答器系统发出 1 秒的高频音(SI)示警。由裁判员按下“复位”键,开始新一轮答题。 阅读详情

相关推荐

PLM系统如何管理产品配置?四步骤实现模块化设计

模块规划与定义是实现模块化设计的基础。在这一阶段,企业需要对产品的功能、结构以及市场需求进行全面深入的分析。首先,从功能角度出发,明确产品应具备的各项功能,并将其分解为多个相对独立的功能模块。例如,对于一款智能手机,可将其功能划分为通信模块、图像处理模块、存储模块等。每个功能模块都有其特定的职责,相互协作以实现产品的整体功能。其次,从结构层面考虑,根据功能模块的划分,设计与之对应的物理结构模块。这要求在设计过程中充分考虑模块之间的接口规范和连接方式,确保各个模块能够无缝集成。

自由之鹰 1267

模块设计与实现经验总结(三)

3  模块详细设计指南与规范 模块详细设计要完成两个方面工作:一是明确模块的功能需求和非功能需求、二是设计如何完成和实现模块的功能需求,包括类结构、线程结构设计等。本节根据后台模块特点,描述了两部分工作需要考虑和设计的关键点。 3.1确定模块的功能规格 1) 本模块概述 概述主要描述了本模块所属子系统,以及在子系统中所承当职责的简单描述。 2) 本模块在系统中与周围模块关系和交互情况

njpjsoftdev的博客 2万+

【项目】基于STM32F103C8T6的四足爬行机器人设计与实现(源码工程)

本设计使用STM32F103C8T6作为主控,结合ESP32-CAM与MQTT,实现实时图像回传以及远程控制。实物图在机器人的控制上使用了云端控制和本地控制两种方案。其中由Flet编写的移动端App能够通过MQTT协议与安装在服务器的EMQX进行通信,经云端传输的命令由ESP32-CAM接收后通过USART2传递给单片机,单片机就可以根据该命令控制模块,让机器人做出对应的动作。

NSJ85的博客 2584

模块设计与实现经验总结(一)

导致模块质量不高的主要原因是整个开发过程,没有明确地区分“确认和细化功能规格”和“实现功能规格”两个阶段,很多开发者的开发过程是两个过程混在一起,整个过程属于没有明确方向和不断变化的状态,恶果是导致很多例外情况没有考虑到并进行妥当处理,最终导致大量BUG的出现。具体表现如下

njpjsoftdev的博客 9818

GPS\GSM模块的设计与开发

一、无线遥控模块总体的功能分析及体系结构设计 1.1无线遥控模块总体分析 本系统由STC89C52单片机电路+GPS模块电路+GSM模块SIM800A+指示灯电路+电源电路组成。 1、系统上电后,系统向特定手机号码发送短信,短信内容为系统的当前经纬度信息。40s左右发一次。 2、如果需要立刻发送经纬度信息,直接按板载按键即可立刻发送经纬度数据,不用等待40s。 3、短信发送及初始化有状态指示灯指示...

weixin_43185308的博客 7547

STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

1、系列总述 从现在开始将会进入四轴无人机的制作,我是第一次制作四旋翼,从前没有接触过这个方面,手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码,所以代码逻辑设计方面肯定有所欠缺,大家可以积极留言讨论,共同进步。 进入正题,距离检测与报警,我的设想是将超声波测距模块安装在四旋翼的底部,虽然超声波精度不高,声波发射范围不可控,但是可以作为初学者,此模块可以完成定高,测距+报警功能已经满足了我的需求。 2.设计思路 依靠超声波模块测算空对地距离,在安全范围,无报警声,进入危险范围(我设定的<

qq_44011116的博客 2992

跨语言文字渲染技术:实现多语言零乱码与智能排版

文字渲染是数字内容创作中的基础技术,其核心在于确保不同语言系统下的字形准确性和排版美观度。通过Unicode编码处理和矢量轮廓优化算法,现代渲染引擎能够实现多语言混合内容的高保真显示。这项技术的工程价值在于显著提升国际化应用的开发效率,同时降低多语言内容的生产成本。典型应用场景包括跨境电商海报生成、多语言UI界面适配以及数字出版领域。以中文为例,采用二次贝塞尔曲线拟合和动态字重调节技术后,小字号可读性可提升73%。当前行业热词如GPU加速和智能排版引擎的引入,进一步将1080p图像渲染耗时从120ms降至3

weixin_34194087的博客 460

基于FPGA的UART异步串行通信发送模块设计与实现

欢迎关注微信公众号“FPGA科技室”,更多内容请关注 在电子系统中,需要板内,板间或者下位机与上位机之间进行数据的发送和接受,这就需要双方共同遵循一定的通信协议来保证数据传输的正确性。大家学过单片机,应该知道串口通信的原理,例如,在stm32中,编写UART,可以在上位机PC端利用串口调试助手,通过下位机stm32给PC机发送字符消息,反正也可以,这就是最简单的通信实例。那么在FPGA领域,常见...

weixin_42747385的博客 5305

模块,什么是模块,怎么实现模块

今天和大家简单的聊一聊“模块”,什么是模块呢? 将代码拆分成独立的块,然后再把这些块连接起来可以通过模块模式来实现。这种模式背后的思想很简单:把逻辑分块,各自封装,相互独立,每个块自行决定对外暴露什么,同时自行决定引入执行哪些外部代码。不同的实现和特性让这些基本的概念变得有点复杂,但这个基本的思想是所有JavaScript模块系统的基础。 ES6中如何实现模块化开发? 下面就来举2个栗子: 第一个:人类、学生类、教师类 将这三种类封装成一个独立模块 ......

jj16165858的博客 8015

HIS系统架构设计与实现的经验总结

通过以上几点经验总结,我们可以看出,在设计与实现HIS系统架构时,需要综合考虑系统的稳定性、扩展性、安全性和性能等多个方面因素。只有在系统架构设计阶段就考虑到这些问题,才能有效地提高HIS系统的质量和可靠性,为医院信息化建设奠定坚实的基础。通过分层架构的设计,可以实现各层之间的解耦,提高系统的灵活性和可维护性。在进行HIS系统架构设计时,首先需要明确系统的需求和目标,充分了解医院内部业务流程和信息交互模式。根据需求分析结果,确定系统的核心功能模块,并对这些功能模块进行模块化设计,便于后续的开发和维护。

qq_33665793的博客 6238

PCB电路设计个人经验总结

不得不感慨时间的飞快,今天看到大一的小鲜肉

GodHunter47的专栏 7224

功能模块总结

功能模块总结

m0_72474345的博客 733

四电平四相DC-DC转换器MATLAB仿真设计与实现

随着电力电子技术向高频、高效、高功率密度方向发展,多电平DC-DC转换器因其在电压应力、电磁干扰(EMI)和输出波形质量方面的显著优势,逐渐成为高精度电源系统的重要选择。与传统两电平结构相比,多电平拓扑通过引入多个电压电平,有效降低了开关器件的电压应力,提升了系统效率与稳定性。本章将重点介绍四电平四相开关电容器结构,分析其在现代电力电子变换系统中的应用潜力。相比传统结构,该拓扑在提高输出电压分辨率、降低开关损耗和优化热分布方面表现出更强的适应性和性能优势,为后续章节的深入分析奠定基础。

weixin_28895791的博客 1292

框架模块设计经验总结

转自:http://www.cnblogs.com/zgynhqf/archive/2011/07/15/2107593.html 这是原创,尊重原创、、、、、、、、、、、、 框架模块设计经验总结 三个月没写日志了,比较懒散……下半年准备做OEA 的 B/S 版本,比较复杂,需要从架构设计开始认真入手。正好今天到了部门反思的时间,今天先把原来的一些...

ailv6840的博客 179

四爪机械爪设计与实现

简介:四爪机械爪设计用于抓取各种物体,广泛应用于工业自动化和机器人技术等领域。设计时注重灵活性、稳定性和耐用性,以适应不同工况。使用SolidWorks三维建模软件完成设计,包括考虑力的分布、材料选择、精度要求及运动学和动力学计算,确保安全可靠。

weixin_28840811的博客 1310

设计报告模板

全国大学生电子设计竞赛设计报告-模板

[2642]基于JAVA的经验总结智慧管理系统的设计与实现

其次,从意义上看,本系统设计与实现具有多方面的价值。系统主要功能模块包括用户管理、角色管理、部门管理、岗位管理、权限管理、日志管理、数据字典、系统参数、消息中心、主题设置、文件管理、系统邮件、任务调度、会员管理、商品管理、订单管理、财务管理、营销管理、报表管理以及知识库管理等。本系统主要包括用户管理、角色管理、部门管理、岗位管理、权限管理、日志管理、数据字典、系统参数、消息中心、主题设置、文件管理、系统邮件、任务调度、会员管理、商品管理、订单管理、财务管理、营销管理、报表管理、知识库管理等20个功能模块。

muyu2980的专栏 1052

美团mtgsig 3.1.0算法还原:从加密入口到d1生成的完整链路拆解

本文详细拆解了美团mtgsig 3.1.0签名算法的完整逆向过程。通过定位加密入口函数eH,理清a6、a5、a8到d1的生成依赖链,并运用插桩技术,在JSVMP混淆环境下逐步还原了核心参数的生成逻辑,为逆向工程实践提供了清晰的纯算还原方法论。

oo7890的博客 777

模块设计与实现经验总结(二 )

很多BUG难以发现和定位原因是在不同类和对象之间的发生交互和联系后,组合排列后的情况非常多,从而想不到某些组合。这种BUG只有从整体考虑、考虑不同类和对象之间交互关联后才可能想到。

njpjsoftdev的博客 3982

常见的电容有哪些

电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。

qq_40170041的博客 768

C#+Winform+OpenCvSharp实战:5步搞定工业视觉检测框架(附源码下载)

本文详细介绍了如何使用C#、Winform和OpenCvSharp构建工业视觉检测框架,通过5个关键步骤实现高效、稳定的视觉检测系统。内容涵盖环境配置、相机集成、核心算法实现、系统集成与通信,以及部署优化,帮助开发者快速掌握工业视觉检测技术,提升检测精度和效率。附完整源码下载,助力工业数字化转型。

pz89012345的博客 550
上一篇: 模块设计与实现经验总结(三)
下一篇: 代码常见错误与自查清单(一)
njpjsoftdev
博客等级 码龄10年 206粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值