完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
正文
定义:顾名思义,职责重在单一,防止过尤尔不及(概念很重要)。 要做的“单一职责原则”首要任意就是解决(确定)范围,即单一职责的软件单位。那么在单片机软件开发中的职责单一的软件单位是什么呢?是一个函数,一个结构体,一个枚举定义,一个软件模块(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采样数据的缓存等。环形缓存的效果图如下: 上图所示是一个大小为64单元的环形缓存示意图,绿色inIndex与outIndex表示当前操作环形缓存位置索引指针。蓝色描述缓存大小,已用大小及空闲大小。绿色与橙色长回环箭头,表示操作索引指针返回处,即有此形成环形。更加形象的如下图所示: 下面新建一对文件模块,命名如为ringbuff.c与ringbuff.h;在头文件中定义环形缓存结构体如下: 再定义一个环形缓存状态枚举类型如下 再定义一个缓存操作结果枚举类型 至此环形缓存需要定义的类型定义完毕;由上面代码可见,结构体功能单一,枚举有两个,完美地遵循了“职责单一原则”;没有不相关的定义。 环形缓存的操作接口函数有:接头体实例初始化,入缓存,出缓存,以下在“ringbuff.c”中实现下这三个函数。 实例初始化: 单一成员进入环形缓存: 多成员进入环形缓存 单一成员出环形缓存 在“ringbuff.h”中列出上面四个函数如下 总结: 所谓“单一职责原则”,就是功能单一,以上代码是STM32单片机下的“环形缓存”软件组件(也可以叫软件模块),从整个模块来说功能单一,从函数来说功能也是单一。至此单一职责原则介绍到此,下次介绍“开闭原则”在单片机代码中的应用,希望对大家有帮助,高手请跳过,谢谢。 |
|
|
|
只有小组成员才能发言,加入小组>>
3280 浏览 9 评论
2958 浏览 16 评论
3460 浏览 1 评论
9004 浏览 16 评论
4052 浏览 18 评论
1115浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
571浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 12:09 , Processed in 1.430405 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号