背景介绍:
上一篇《RTT架构训练二(开始一个新题目)》一文中,给出了一个虚拟题目。
在上一篇建好初始化工程的基础上,今天来完成这个虚拟题目中的一个小功能。
功能虽然小,但本文表述的内容很多,读者细细体会能有很大收货。
本篇完成这个小功能
视频演示如何操作
要点提示:
1、如何用 SmartGit 查看开发流程 log。
2、如何使用 SmartGit 退回版本。
3、progen 自动生成 iar 工程,及编译相关设置。
架构设计
在《软件架构调练计划》中说到:
训练项目效果简单(跑马灯、传感器驱动级别)。
效果简单目的是省下更多时间花在架构理解上。
本小节描述了把“需求”落实到“软件”的思维过程。推荐细细体会这个思维方法。
- 需求:一个按链翻转 LED 灯。
- 功能划分:
- 按键处理。
- 控制 LED 灯亮暗。
- 用按键影响 LED 灯。
- 将功能对应到线程:
- 一个处理按键的线程。
- 一个控制 LED 灯的线程。
- 用RT-Thread消息队列完成“按键”与“灯控”线程的通信,衍生出两个线程:
(1) 将按键状态发送到消息队列的线程;
(2) 从消息队列获取按键状态的线程。
至此,初步定好各线程作用。来一个大跨跃,直接展示一下最终代码(代码中变量、函数的命名做到见名知义)。
线程剖析
表现线程函数设计的思路。
比内容更重要的是图中展示的思维过程。
- LED 线程
- 按键线程
- 通信线程
- 向消息队列发送信息的线程在
“键值改变的时候”
将键值发到队列上。 - 从消息队列接收信息的线程一直接收就行。
代码展示
下面几句是我的经验:
走过架构设计的代码能够方便地理清文件结构。
合理的文件结构,为多人合作完成软件项目提供便利(每个人写不同的文件,相互不影响)。
文件结构得当的软件更好维护,生命力更强。
PS
在《软件架构训练计划》微信群里,有群友提出“能不能从工程角度讲一下软件架构”。
什么是“工程角度”呢?
我认为工程角度就是“如何用严谨的思路设计软件”。严谨的前提是:每段代码任务明确。经常听到的“模块化设计”就是这个意思。
从“工程角度”看,不管功能多么简单,都要纳入统一的架构当中,成为整个工程中的一个“颗粒”。架构训练二只是点个灯,功能如此简单的目的是让读者把注意力集中到架构设计上,体会架构的设计过程。
公众号回复 train 得到训练代码的 github 地址。(文中截图里能用 RTT_MQ_CREATE 一个宏来创建消息队列,方便地节省掉好几行代码的秘密就在 github 开源代码里哦)
关注作者
欢迎扫码关注我的公众号MultiMCU EDU
。
提示:在公众号“关于我”页面可加作者微信好友。
喜欢本文求点赞,有打赏我会更有动力。
请我喝杯咖啡如何?
微信 支付宝