RTT架构训练二(手动翻转LED)

训练二的第2步,后面还有几步。

Posted by Sugar on July 14, 2019

背景介绍:
上一篇《RTT架构训练二(开始一个新题目)》一文中,给出了一个虚拟题目。
在上一篇建好初始化工程的基础上,今天来完成这个虚拟题目中的一个小功能。
功能虽然小,但本文表述的内容很多,读者细细体会能有很大收货。

本篇完成这个小功能

视频演示如何操作

要点提示:
1、如何用 SmartGit 查看开发流程 log。
2、如何使用 SmartGit 退回版本。
3、progen 自动生成 iar 工程,及编译相关设置。

视频链接

架构设计

《软件架构调练计划》中说到:
训练项目效果简单(跑马灯、传感器驱动级别)。
效果简单目的是省下更多时间花在架构理解上
本小节描述了把“需求”落实到“软件”的思维过程。推荐细细体会这个思维方法。

  • 需求:一个按链翻转 LED 灯。
  • 功能划分:
    1. 按键处理。
    2. 控制 LED 灯亮暗。
    3. 用按键影响 LED 灯。
  • 将功能对应到线程:
    1. 一个处理按键的线程。
    2. 一个控制 LED 灯的线程。
    3. 用RT-Thread消息队列完成“按键”与“灯控”线程的通信,衍生出两个线程:
      (1) 将按键状态发送到消息队列的线程;
      (2) 从消息队列获取按键状态的线程。

至此,初步定好各线程作用。来一个大跨跃,直接展示一下最终代码(代码中变量、函数的命名做到见名知义)。

线程剖析

表现线程函数设计的思路。
比内容更重要的是图中展示的思维过程。

  • LED 线程

  • 按键线程

  • 通信线程
  1. 向消息队列发送信息的线程在“键值改变的时候”将键值发到队列上。
  2. 从消息队列接收信息的线程一直接收就行。

代码展示

下面几句是我的经验:
走过架构设计的代码能够方便地理清文件结构
合理的文件结构,为多人合作完成软件项目提供便利(每个人写不同的文件,相互不影响)。
文件结构得当的软件更好维护,生命力更强。

PS

《软件架构训练计划》微信群里,有群友提出“能不能从工程角度讲一下软件架构”。

什么是“工程角度”呢?

我认为工程角度就是“如何用严谨的思路设计软件”。严谨的前提是:每段代码任务明确。经常听到的“模块化设计”就是这个意思。

从“工程角度”看,不管功能多么简单,都要纳入统一的架构当中,成为整个工程中的一个“颗粒”。架构训练二只是点个灯,功能如此简单的目的是让读者把注意力集中到架构设计上,体会架构的设计过程。

公众号回复 train 得到训练代码的 github 地址。(文中截图里能用 RTT_MQ_CREATE 一个宏来创建消息队列,方便地节省掉好几行代码的秘密就在 github 开源代码里哦)

关注作者

欢迎扫码关注我的公众号MultiMCU EDU

提示:在公众号“关于我”页面可加作者微信好友。

喜欢本文求点赞,有打赏我会更有动力。

请我喝杯咖啡如何?

微信 weixinfukuan 支付宝 zhifubaofukuan