背景介绍:
关于“虚拟串口” Sugar 发过一篇《RT-Thread 使用 CubeMX 的 VCP(虚拟串口)》
《软件架构训练计划》选择 CubeMX 生成代码和 RT-Thread 内核及设备代码的原因是:给小白铺路,减小“多层次”学习内容给新人带来的压力。
按 《怎样掌握 RT-Thread(RTOS 该怎么学)》中所述,训练选择 CubeMX 生成代码和 RT-Thread 代码结合,一个目的是:在了解 RT-Thread 的同时补好裸机编程的基础。
然而,训练归训练,真正做代码 Sugar 还是追求代码统一的。最终 Sugar 开源的训练代码会越来越靠近 RT-Thread,并且未来目标是带读者回归 RT-Thread 大集体中去。
虚拟串口是 Sugar 特别常用的调试手段,先从这个功能的代码级移植开始迈出回归 RT-Thread 的第一步。
虚拟串口的几个重要文件
usb_common.h、usb_device.h、ringbuffer.h
ringbuffer.c、core.c、usbdevice.c、cdc_vcom.c
未来 Sugar 会把 Git 的 Log 记录做成一本“活”的参考书,不会使用 Git 的读者可以在 MultiMCU EDU 公众号内回复git得到 Sugar 录的教学视频。
本篇代码的 github 地址是:/code-structure-train/pandora_vcom
一、加入编译的文件
二、RTT新加入的文件(来自 RT-Thread 官方 master 源码)
三、CubeMX 生成的裸机代码有哪些改动
代码级移植有啥好处
写软件最基本的两件事:一、写代码;二、代码文件。
当想到“这个软件究竟是怎么回事儿”这个问题的时候,要直接回到最基本的两个点上去找答案。
一、对学习的好处:
1、明确目标功能的代码;
2、熟悉 RT-Thread 代码文件,能够体会“分”得好而产生的“管理”的美;
3、锻炼读代码能力,从优秀代码中学到优秀架构的实现方法(要“悟”才能收获)。二、对产品的好处:
1、明确 RT-Thread 目标功能代码,是将目标功能整合进自己产品的第一步;
2、对于中小型项目,往往几个文件就可以搞定一个功能,省去配置 Kconfig 和 Scons 的麻烦。
项目代码管理
中小型项目:一颜一心。
中大型项目:一颜多心。
一、中小型
小型、部分中型项目通常不轻易换硬件平台,因此叫“一心”。软件项目核心是代码,STM32 硬件平台在当下完全可以做到:只维护代码,不维护项目工程。对于小型、中型项目,Sugar 自己使用 project-generator 来维护软件,因此其自动生成工程的依赖文件(yaml 配置文件)就是代码管理的“一颜”。
本文第一张图就是 yaml 文件的对比,一眼看出工程所需的全部文件和文件位置。二、中大型
部分中型、大型项目很多都是要适配多种平台的,以 RT-Thread 为例,其除了 STM32 之外还支持很多其他硬件平台,因此叫“多心”。这种情况下想让在不同平台上使用相同习惯管理代码,就会复杂很多。官方使用的 env 环境就是借助了 KConfig 和 Scons,相应的配置文件分布在代码当中。
env 的 menuconfig 就是被统一好的“一颜”,通过简单的配置就可以操控大型项目,用着爽。
Sugar 给小白的 RTT 入门之路
只提要点,详细内容单独推文。
一、基本原则:
1、从中小型项目入手,集中精力搞懂代码(包括 RTT 内核、设备驱动和代码管理)。
2、使用 project-generator 进行项目管理,项目管理配置文件独立,不分散在代码里,对初学者非常友好(刚刚学习,不要分心去搞 KConfig 和 Scons)。
二、做了哪些:
1、《软件架构训练计划》
2、开源基于 RT-Thread 的麦轮车项目。该项目用最简单易学的算法、最简单易学的架构将编程的三大部分(逻辑、算法、参数)从功能上统一起来,同时在代码管理(功能设计和文件管理)上独立分离。
PS
现在好的开源项目太多了,Sugar 认为下一个时代值得探索的方向之一是:如何让初学者能快速接入优秀的开源项目。
当下大部分开源项目对初学者来讲都不算太友好:不是代码多就是算法难,又或者是层次高。也正是因为“多”、“难”和“复杂”才突显了对优秀架构思想的需求。但是优秀的架构思想不仅仅是为“多”、“难”和“复杂”服务的,好思想对简单项目也适用。Sugar 在 github 贡献融入优秀思想的简单项目,目的是:让小白先长“老鸟”的心,减少积累“量变”的时间,推进“质变”速度。
对于 Sugar 的在线一对一付费辅导,详情见公众号“关于我”页面。这里 Sugar 补充几点:
1、每个付费学员最多提供累积 6 小时的入门辅导(目前大部分是选 3 个 2 小时这样的搭配)。
2、再次强调有关推文内容的问题推荐在 github 上写 issue,开放平台更容易获得答案。
3、微信加好友问问题的,请多打几个字说清楚问题(只甩 Sugar 一个截图啥也不说,Sugar 一脸蒙圈回答不了)。
Sugar 鼓励大家要有探索精神,自主学习提高。
关注作者
欢迎扫码关注我的公众号MultiMCU EDU
。