RT-Thread STM32 虚拟串口代码级移植

发表在 实战入门学习营6 天前 [复制链接] 1 69

本帖最后由 Sugar 于 2019-11-9 14:56 编辑
% ]5 j; u! l  o# o9 R
, P# i0 Q" v- ~/ F5 M

背景介绍:6 y5 L& k. I0 l$ ?2 _4 p* I 关于“虚拟串口” Sugar 发过一篇《RT-Thread 使用 CubeMX 的 VCP(虚拟串口)》
, J4 G+ }3 S, C" V《软件架构训练计划》选择 CubeMX 生成代码和 RT-Thread 内核及设备代码的原因是:给小白铺路,减小“多层次”学习内容给新人带来的压力。2 {, |; U- S6 e+ s《怎样掌握 RT-Thread(RTOS 该怎么学)》中所述,训练选择 CubeMX 生成代码和 RT-Thread 代码结合,一个目的是:在了解 RT-Thread 的同时补好裸机编程的基础。
4 E% d: t) _) ~然而,训练归训练,真正做代码 Sugar 还是追求代码统一的。最终 Sugar 开源的训练代码会越来越靠近 RT-Thread,并且未来目标是带读者回归 RT-Thread 大集体中去。% _" l, z& T) |. I) z. P7 [ 虚拟串口是 Sugar 特别常用的调试手段,先从这个功能的代码级移植开始迈出回归 RT-Thread 的第一步。

! n# |9 [3 Q( ^6 q
3 g3 ?' J% }; t! N

虚拟串口的几个重要文件

; @6 D+ z# L' @3 Q# V# H
; d8 O9 C5 j4 I1 y# q! j

usb_common.h、usb_device.h、ringbuffer.h/ p' Q* R: u6 r# q: d ringbuffer.c、core.c、usbdevice.c、cdc_vcom.c

7 c. A4 y* T2 Z4 i' A
, k8 v9 O( y" ?& w

未来 Sugar 会把 Git 的 Log 记录做成一本“活”的参考书,不会使用 Git 的读者可以在 MultiMCU EDU 公众号内回复 git 得到 Sugar 录的教学视频。

5 h% i5 b! _& g9 c0 x

本篇代码的 github 地址是:
4 ?' O0 {0 L/ O5 c7 D( x: Qhttps://github.com/code-structure-train/pandora_vcom        

8 w: J3 v- F3 n5 e- y

一、加入编译的文件
" f5 a6 W$ V2 j0 M& n1 ~9 S. w$ D. r0 d7 ^) \3 A 二、RTT新加入的文件(来自 RT-Thread 官方 master 源码)
7 A6 z! b# D% u  H' t1 o# Z' I; A0 P! J! X: d 三、CubeMX 生成的裸机代码有哪些改动8 e3 B5 S% N: D; U       

$ ^9 P2 Z% L( o" ~' @4 [/ g

代码级移植有啥好处

2 Q  I$ H5 ~3 d# V
& C. [: u+ l- [. l% H& ^

写软件最基本的两件事:一、写代码;二、代码文件。# n7 Q& X/ J, M; |" i  `8 |! f 当想到“这个软件究竟是怎么回事儿”这个问题的时候,要直接回到最基本的两个点上去找答案。

$ [- F, K" ~4 b( z5 \
% o: T4 V4 M2 B5 Y

一、对学习的好处:
! T4 N7 Z" B2 P3 X- x1、明确目标功能的代码;1 L- O3 F" ?$ S4 _9 R 2、熟悉 RT-Thread 代码文件,能够体会“分”得好而产生的“管理”的美;
5 A9 S2 v/ H" Z! B6 N3、锻炼读代码能力,从优秀代码中学到优秀架构的实现方法(要“悟”才能收获)。
9 n- m6 f' B1 n2 K9 Y: T二、对产品的好处:, I0 e4 R& j$ R8 N$ o+ m/ ^ 1、明确 RT-Thread 目标功能代码,是将目标功能整合进自己产品的第一步;3 Y0 t* s! y/ l6 P3 y 2、对于中小型项目,往往几个文件就可以搞定一个功能,省去配置 Kconfig 和 Scons 的麻烦。      

' K' ]4 u+ r/ q# J" t9 R7 U" n

项目代码管理

6 L9 W) x6 R; C, u  \+ j
) b: V" m- ?+ B# |9 P  }7 A

中小型项目:一颜一心。
0 A, L  a1 Q) v- u" _7 t0 I4 t中大型项目:一颜多心。      

* o! }* x! D/ ^3 O: H7 d) f4 O
  }$ v0 a# u  T: B5 Y& [

一、中小型
: G) D/ U6 l+ t- W: E6 @小型、部分中型项目通常不轻易换硬件平台,因此叫“一心”。软件项目核心是代码,STM32 硬件平台在当下完全可以做到:只维护代码,不维护项目工程。对于小型、中型项目,Sugar 自己使用 project-generator 来维护软件,因此其自动生成工程的依赖文件(yaml 配置文件)就是代码管理的“一颜”。
/ C. [& m9 q" R  i  K; t& |. j本文第一张图就是 yaml 文件的对比,一眼看出工程所需的全部文件和文件位置。
: b* d" e7 v& N! }& ^$ i二、中大型
2 @/ s8 a) k' Q+ L: B部分中型、大型项目很多都是要适配多种平台的,以 RT-Thread 为例,其除了 STM32 之外还支持很多其他硬件平台,因此叫“多心”。这种情况下想让在不同平台上使用相同习惯管理代码,就会复杂很多。官方使用的 env 环境就是借助了 KConfig 和 Scons,相应的配置文件分布在代码当中。
" d9 i8 h2 A/ S: {' j3 {4 B# \: Zenv 的 menuconfig 就是被统一好的“一颜”,通过简单的配置就可以操控大型项目,用着爽。        

! D) M" e" l: C8 i  L  t

Sugar 给小白的 RTT 入门之路

0 J- g( V2 W/ I& \0 D1 ~2 {
- _9 O# K8 Y, K( t2 v

只提要点,详细内容单独推文。

, K! f4 R# A6 t' }7 l7 ^
. X3 K$ G) r3 C) v  E9 x

一、基本原则:6 J7 t# X' B5 x1 Y( ~ 1、从中小型项目入手,集中精力搞懂代码(包括 RTT 内核、设备驱动和代码管理)。; [# n0 N3 z8 H" U& u6 p/ s 2、使用 project-generator 进行项目管理,项目管理配置文件独立,不分散在代码里,对初学者非常友好(刚刚学习,不要分心去搞 KConfig 和 Scons)。# Y- @' C% @$ o! j 二、做了哪些:9 v% e: h. o1 O( V 1、《软件架构训练计划》
9 v$ ~% ~$ H2 {* j3 `2、开源基于 RT-Thread 的麦轮车项目。该项目用最简单易学的算法、最简单易学的架构将编程的三大部分(逻辑、算法、参数)从功能上统一起来,同时在代码管理(功能设计和文件管理)上独立分离。

1 p; ?7 A5 t* C2 f' l/ ?# `

PS

/ d) i5 o2 @4 E) f1 o8 U

现在好的开源项目太多了,Sugar 认为下一个时代值得探索的方向之一是:如何让初学者能快速接入优秀的开源项目。, v4 w! a7 W- Y# ]! e6 t1 o/ F 当下大部分开源项目对初学者来讲都不算太友好:不是代码多就是算法难,又或者是层次高。也正是因为“多”、“难”和“复杂”才突显了对优秀架构思想的需求。但是优秀的架构思想不仅仅是为“多”、“难”和“复杂”服务的,好思想对简单项目也适用。Sugar 在 github 贡献融入优秀思想的简单项目,目的是:让小白先长“老鸟”的心,减少积累“量变”的时间,推进“质变”速度。        

, Q) N" v7 U4 Q% S

Sugar 鼓励大家要有探索精神,自主学习提高。

( Y/ ~' Q" N9 [. `- G. {

关注作者

5 r+ U' ?, J' f+ I6 Q

欢迎扫码关注我的公众号MultiMCU EDU5 @. L% I- h, W+ y7 t( w

/ C0 X' b' c! n- t0 l' [

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

* J" F$ ~; g- _( f+ U

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

# q6 ^) D8 N; p, E5 P4 E
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 5 天前 | 显示全部楼层
软文广告,公众号?
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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