请选择 进入手机版 | 继续访问电脑版
查看: 411|回复: 11

[分享] 还在用C语言玩MCU吗,要不要换个姿势?| 正经玩

[复制链接]
  • TA的每日心情
    开心
    2021-11-11 13:58
  • 签到天数: 109 天

    [LV.6]常住居民II

    2181

    主题

    4189

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    20513
    最后登录
    2021-12-3
    发表于 2021-10-13 10:38:53 | 显示全部楼层 |阅读模式
    还在用C语言玩MCU吗,要不要换个姿势?| 正经玩


    现在MCU上的资源越来越丰富,程序存储容量和内存SRAM的容量也越来越大,尤其是运算速度已经达到了上百MHz甚至1GHz的水平,恩智浦的i.MX RT系列、LPC5500系列和LPC54000系列就是典型的代表。再结合MCU的高实时特性,非常适合应用在IoT相关的领域,承担越来越多的边缘计算任务和更加友好的人机交互任务。


    IoT应用的典型特点是应用场景的碎片化,各种各样的传感器、通信模块、执行机构以及处理逻辑的交叉组合,尤其在产品的概念构思和验证阶段,经常会要求频繁地调换不同类型的组件或模块。例如需要尝试不同的温度传感器,需要尝试不同的WiFi模块,需要在不同的蓝牙、ZigBee、Thread模块之间进行比较等。


    IoT应用开发重心的变化


    IoT的应用仍然是以电子产品为主,但已经从传统的单机封闭模式,转变为多机、远程并且开放的模式。
    通常一个产品的市场投放过程大体是这样的:
    14.png
    由于IoT产品多机开放的特点,使得概念设计阶段变得格外重要,该阶段的设计周期也随着循环迭代的次数增加而拉长了许多:
    15.png
    如何使用一个资源丰富的MCU,快速地搭建适合的应用平台,以最优的方式解决现实中的问题,是每个研发团队都会面临的挑战。
    当前MCU技术的发展,使得单机硬件设备驱动层的开发变得越来越容易,一方面芯片原厂提供了丰富的驱动库,大大简化了驱动层;另一方面各设计厂商都有成熟的技术储备,基本涵盖了大部分的硬件资源。
    因此硬件接口与适配的工作比重逐步减少,而下述各项设计的工作量则大幅增加:
    各个硬件模块之间的信息交换与互动


    如何衔接新兴的边缘应用算法、与云端或其它网络节点的互联


    以及简单的数据库操作、图形用户界面的管理等

    需要更高效的开发环境


    从以上分析可以看出,软件逻辑的设计和开发比重越来越大,传统MCU开发环境的低效率,已经逐渐成为拖慢项目进度的瓶颈。我们需要一种更加综合的开发手段,兼顾高层软件的开发效率和底层硬件驱动的执行效率。
    软件的开发离不开编程语言,传统的汇编语言和C语言非常适合硬件驱动的开发,但对于系统层和应用层的软件开发则优势尽失,因此我们把目光投向了对于算法开发更加高效的其它编程语言,包括Python语言。
    Python是一种解释执行的脚本语言,不需要经过编译链接等过程,在交互模式下每写下一行代码,就会立即得到执行结果。
    目前在三大主要的桌面平台上,都有相应的Python执行环境。
    大约3年前,我们从社交媒体上了解到Micropython项目,这是英国的Damien P. George教授发起的一个开源项目,目标是在微控制器和嵌入式系统上,实现与Python 3.x兼容的运行环境。
    我们首先在资源相对丰富的i.MX RT系列上,对Micropython进行了一段时间的评估和深入研究,并在此环境下对MCU环境下的人工智能应用进行了深入的探讨,本公众号曾经发表过很多相关的文章,有兴趣的读者可以移步阅读。
    Micropython把很多常用的硬件模块都用C封装为Python的类,便于使用脚本调用。通过一段时间的评估,我们发现Micropython的环境很好地平衡了,MCU底层硬件资源的高运行效率,和上层应用模块与应用项目的高开发效率之间的关系。
    当然,在代码的执行效率上,现在的Python还与C语言有一定的差距,但在IoT的环境下,在高性能MCU的加持下,至少作为产品的系统设计和概念验证的开发手段,还是能够胜任大部分的应用场景的。况且在Micropython平台下,还可以嵌入C语言模块以提高核心计算的运行效率。
    在i.MX RT上的工作成果,大大鼓舞了我们扩大对Micropython的尝试,最近笔者就把这个开发环境成功地搬到了LPC55S69上面,并依据LPC5500的片上资源配置,有针对性地开发了一些Python类。下面展示几个演示实例。


    Micropython在
    LPC55S69上的演示实例


    下图就是我的开发板全貌,上面那个小板是LPC-Link2调试器,下面则是来自逐飞科技的LPC5500 IoT开发套件的主板:
    16.png
    LPC5500主板通过USB与PC相连,PC可以分别以U盘方式访问板上的SD卡和外扩的一个SPI Flash模块,同时通过USB-CDC协议,用户使用PC上的串口窗口作为Micropython的交互控制台,可以输入语句命令等,并显示返回的结果。
    下面这个动图就是一个典型的Micropython控制台交互界面:
    17.gif
    演示一:实时时钟
    第一个演示是在上面这个开发环境下,做的一个时钟显示的例程:
    17.png
    在这个例程中,首先用到了片上的RTC(由Micropython的RTC类控制),还用到了按照Micropython风格,使用C语言添加的一个处理OLED显示的Python类。而屏幕上显示的“年月日”汉字,则是使用Micropython自带的文件系统模块,从板上扩展的SPI Flash中读出汉字字库,再使用Python脚本提取出来的。

    演示二:传感器读取和显示
    第二个演示是读取一个SHT31温湿度传感器和一个MS5611气压计,并分别显示在不同的OLED显示屏上:
    18.png
    在这个例程中除了Micropython控制的片上I2C模块外,同样用到了前述的OLED类和取汉字字模的部分。而且可以看到,同时有两个OLED显示屏在一起工作。
    下图从另一个侧面,可以更清晰地看得模块与主板的关系:
    19.png
    演示三:多屏动图显示
    这个小视频,展示了通过显示屏分别独立显示,屏显的字模通过脚本的实时计算确定移动中的位置。


    这个演示展示了使用Micropython,可以方便地实现比较复杂的软件算法,同时也通过快速刷屏展示了不错的处理速度。另外,由于LPC55xx有多达8个相同的FlexComm端口,我们可以很方便地使用一套代码,分别刷新多个显示屏。


    演示四:俄罗斯方块游戏
    这个游戏是网上找到的一个开源代码,经过简单的适配,即可在LPC5500上运行。


    通过这个演示,进一步展示这个平台的灵活性和广泛的适用性。

    结束语


    使用Micropython平台,既可以发挥C语言高效处理硬件模块的能力,又可以发挥Python语言对于复杂算法的表达能力,有机地把两者的优势结合到了一起,极大地方便了IoT应用产品的系统设计和概念验证。
    更加可喜的是,MCU的开发人员终于可以像其它平台(例如Linux)的开发人员那样,能够受益于众多的开源软件。上面那个俄罗斯方块游戏就是一个很好的例证。
    完成系统设计之后,在进入产品设计阶段的时候,开发人员可以使用传统的开发方法,采用C语言更高效地实现经Python验证过的算法逻辑,让最终产品得到最佳的用户体验。当然,如果您已经满意了Python所产生的结果,也不妨直接把这个原型设计转化为最终产品,加快产品的上市进程。
    对于广大的DIY爱好者,或比较小众产品的设计者,或非电子类的从业人员,同样能够从这样一个开发平台中受益,至少可以从复杂的C语言开发中解脱出来。


    目前本人正在整理相关代码和文档,很快就会开放恩智浦中文社区,并期望不久能把这套系统开源出来,为大家多提供一个选项。


    签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 09:23
  • 签到天数: 710 天

    [LV.9]以坛为家II

    60

    主题

    2176

    帖子

    12

    金豆

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4438
    最后登录
    2021-12-2
    发表于 2021-10-13 10:55:13 | 显示全部楼层
    在嵌入式设备里面使用高级解释器,从目前发展来看,这将是一个趋势。
    虽然,我现在还坚持使用C语言开发
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    昨天 10:46
  • 签到天数: 707 天

    [LV.9]以坛为家II

    196

    主题

    6816

    帖子

    64

    金豆

    超级版主

    Rank: 8Rank: 8

    积分
    37512
    最后登录
    2021-12-2
    发表于 2021-10-13 11:16:40 | 显示全部楼层
    真会玩啊,有计算机早期控制台的感觉了 TS1 - 副本 (4).jpg TS1 - 副本 (2).jpg TS1 - 副本 (3).jpg TS1 - 副本 (7).jpg TS1 - 副本 (6).jpg TS1 - 副本 (5).jpg TS1 - 副本 (8).jpg TS1 - 副本 (9).jpg TS1 - 副本 (10).jpg TS1.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    54

    主题

    1321

    帖子

    2

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    4474
    最后登录
    2021-12-3
    发表于 2021-10-13 12:29:31 | 显示全部楼层
    对比一下开发过程,一定要试试
    加油哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:55
  • 签到天数: 72 天

    [LV.6]常住居民II

    7

    主题

    233

    帖子

    1

    金豆

    高级会员

    Rank: 4

    积分
    820
    最后登录
    2021-12-2
    发表于 2021-10-13 14:19:34 | 显示全部楼层
    源码能发给我一下吗?谢谢。
    加油加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-11 13:58
  • 签到天数: 109 天

    [LV.6]常住居民II

    2181

    主题

    4189

    帖子

    0

    金豆

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    20513
    最后登录
    2021-12-3
     楼主| 发表于 2021-10-13 14:25:41 | 显示全部楼层
    thinkking1985 发表于 2021-10-13 14:19
    源码能发给我一下吗?谢谢。

    哪一个
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:55
  • 签到天数: 72 天

    [LV.6]常住居民II

    7

    主题

    233

    帖子

    1

    金豆

    高级会员

    Rank: 4

    积分
    820
    最后登录
    2021-12-2
    发表于 2021-10-13 14:54:30 | 显示全部楼层

    基于LPC55S69的micropython源码,谢谢。
    加油加油
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-14 16:39
  • 签到天数: 318 天

    [LV.8]以坛为家I

    2

    主题

    1013

    帖子

    1

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    3599
    最后登录
    2021-12-2
    发表于 2021-10-14 19:49:52 | 显示全部楼层
    micropython现在支持的板子很多,玩起来可玩性还是很高的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-3-24 09:39
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12

    主题

    94

    帖子

    0

    金豆

    中级会员

    Rank: 3Rank: 3

    积分
    296
    最后登录
    2021-11-2
    发表于 2021-10-19 10:03:52 | 显示全部楼层
    支持!!!
    个人认为嵌入式开发一定会逐步支持更智能更高级的语言环境(除了某些特殊的应用环境)
    特别在融入了很多高级计算特征,更强大的数据结构,丰富的库函数之后,能更快速的完成开发,同时也大幅度降低编程门槛。目前,microPython 试过 st 和 pico 的, 体验还不错。 NXP 的 RT系列应该玩起来更爽


    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 16:15
  • 签到天数: 186 天

    [LV.7]常住居民III

    0

    主题

    504

    帖子

    1

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    1174
    最后登录
    2021-12-2
    发表于 2021-11-1 20:06:09 | 显示全部楼层
    感谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2021-12-3 09:21 , Processed in 0.089576 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表