凡亿教育-豆豆
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 【最强解说】很强大!低耦合高内聚的MCU实用软件框架
【最强解说】很强大!低耦合高内聚的MCU实用软件框架

大家有没有听过软件设计中的低耦合,高内聚的两个原则。 

具体是什么意思呢? 

在一个项目中:每个模块之间相联系越紧密,则耦合性越高;这样你改动其中一个模块,其他模块也需要一起改动,换言之:牵一发而动全身

一个模块内部各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,也就是高内聚

如果一个程序的逻辑处理部分,分散到好几个文件中,那么每次改动,就会改动好几个文件,这就是高耦合。

92f4838e77cda9062eab03dd0c8116.png

59a3d99f26b24437f4f553781c7843.png

现在的软件结构设计,都会要求“低耦合,高内聚”,来保证软件的高质量,提高软件的可维护性。

下面是一个低耦合高内聚的一种无OS的MCU实用软件框架。

包括任务轮询管理,命令管理器、低功耗管理、环形缓冲区等实用模块。系统中广泛利用自定义段技术减少各个模块间的耦合关系,大大提供程序的可维护性。

主要功能
  • 支持模块自动化管理,并提供不同优先等级初始化声明接口。
  • 支持任务轮询管理,通过简单的宏声明即可实现,不需要复杂的声明调用。
  • 支持低功耗管理,休眠与唤醒通知。
  • 支持命令行解析,命令注册与执行。
  • blink设备支持,统一管理LED、震动马达、蜂鸣器
  • 14d650401ce83e95a03eb838e7320a.png
  • 7b65aac25a1e195cd3ef98b6998368.png
  • b56da4de44655aeb4fc4da7f8c6d4d.png
  • 69fd4aeeeafeee57e09ab0cd2e35bf.png
  • 591de35c071897fee52a5fbfc04550.png
  • 464489210cbcb2d9a6ff5c09d5c8c3.png
  • 完成的使用例子可以参考platform-lowpower.c,默认情况下是禁用低功耗功能的,读者可以去除工程中原来不带低功耗版本的platform.c,并加入platform-lowpower.c文件进行编译即可使用。

    注册低功耗设备

    以按键扫描为例,正常情况下,如果按键没有按下,那么系统休眠可以进入休眠状态,对按键功能是没有影响的。如果按键按下时,那么系统需要定时唤醒并轮询按键任务。所以在一个低功耗系统下,为了不影响按键实时性需要处理好两个事情:

    1. 系统休眠状态下,如果有按键按下,那系统系统应立即唤醒,以便处理接下来的扫描工作。
    2. 如果按键按下时,系统可以进入休眠,但需要定时唤醒起来轮询按键任务。对于第一种情况,将按键配置为边沿中断唤醒即可,以STM32F4为例(参考key_task.c),它支持外部中断唤醒功能。
    3. 77dcbd627cb1080e2371c2ebbe05c1.png
    4. 74885bb052964d00090a11ca5031a3.png
    5. 3154701c3ec86901a7b5989ca9babe.png
    6. 按键管理模块

      类似blink模块,使用之前有两个注意事项:

      • 需要系统提供滴答时钟,key.c中是通过get_tick()接口获取,依赖module模块

      • 需要在任务中定时进行轮询

      • b52b02fa922627d0e8dc4448601b52.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论