STM32单片机程序与6个设计原则之单一职责原则

片头

最近和一群朋友聊天,不知不觉就聊到软件设计的依据的问题,有的说依据就是需求,有的说依据就是代码规范,有的说依据就是公司规定,虽然大家都做了差不多10年设计,水平是有的,但是也没高到天上去。主要还是受限于所处环境及工作行业性质,有的朋友还不知道有6个设计原则。也许这个6个设计原则太高端,底层涉及不到。因此在这里想把高大上的6个设计原则拉下“水”,与低端的单片机程序设计做个 “联姻”。六个设计原则分别是:A、单一职责原则;B、开闭原则;C、里氏替换原则;D、最少知识原则;E、接口隔离原则;F、依赖倒置原则;G、激活原则;

以上有7个,最后一个是我加上去的,此文主要介绍第一个设计原则:单一职责原则,单一职责在设计STM32单片机软件的应用。

正文

定义:顾名思义,职责重在单一,防止过尤尔不及(概念很重要)。

要做的“单一职责原则”首要任意就是解决(确定)范围,即单一职责的软件单位。那么在单片机软件开发中的职责单一的软件单位是什么呢?是一个函数,一个结构体,一个枚举定义,一个软件模块(XXX.c与XXX.h)。

一个不遵循“单一职责原则”的函数如下:

void getResult(u8 Data1,u8 Data2,u16 *sum,u8 *max)

{

*sum= Data1+ Data2;

if(Data1> Data2) *max= Data1;

else *max= Data2;

}

以上代码简单:实现两个数据的求和,还有找出两个数据最大者,它们做了两件事,所以不符合 “单一职责原则”;改成如下即可。

void getSum(u8 Data1,u8 Data2,u16 *sum)

{

*sum= Data1+ Data2;

}

void getResult(u8 Data1,u8 Data2, u8 *max)

{

if(Data1> Data2) *max= Data1;

else *max= Data2;

}

以上的代码比较简单些,下面以环形缓存作为一个例子阐述单一职责原则。环形缓存是常用的一个软件组件,单片机中常应用通信,ADC采样数据的缓存等。环形缓存的效果图如下:

STM32单片机程序与6个设计原则之单一职责原则
上图所示是一个大小为64单元的环形缓存示意图,绿色inIndex与outIndex表示当前操作环形缓存位置索引指针。蓝色描述缓存大小,已用大小及空闲大小。绿色与橙色长回环箭头,表示操作索引指针返回处,即有此形成环形。更加形象的如下图所示:

STM32单片机程序与6个设计原则之单一职责原则
下面新建一对文件模块,命名如为ringbuff.c与ringbuff.h;在头文件中定义环形缓存结构体如下:

STM32单片机程序与6个设计原则之单一职责原则
再定义一个环形缓存状态枚举类型如下

STM32单片机程序与6个设计原则之单一职责原则
再定义一个缓存操作结果枚举类型

STM32单片机程序与6个设计原则之单一职责原则
至此环形缓存需要定义的类型定义完毕;由上面代码可见,结构体功能单一,枚举有两个,完美地遵循了“职责单一原则”;没有不相关的定义。

环形缓存的操作接口函数有:接头体实例初始化,入缓存,出缓存,以下在“ringbuff.c”中实现下这三个函数。

实例初始化:

STM32单片机程序与6个设计原则之单一职责原则
单一成员进入环形缓存:

STM32单片机程序与6个设计原则之单一职责原则
多成员进入环形缓存

STM32单片机程序与6个设计原则之单一职责原则
单一成员出环形缓存

STM32单片机程序与6个设计原则之单一职责原则
在“ringbuff.h”中列出上面四个函数如下

STM32单片机程序与6个设计原则之单一职责原则
总结:

所谓“单一职责原则”,就是功能单一,以上代码是STM32单片机下的“环形缓存”软件组件(也可以叫软件模块),从整个模块来说功能单一,从函数来说功能也是单一。至此单一职责原则介绍到此,下次介绍“开闭原则”在单片机代码中的应用,希望对大家有帮助,高手请跳过,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值