draapho 发表于 2011-12-2 14:34:28

火牛板学习RT-Thread Step by Step——第一篇:修改RT-Thread目录结构

先说说自己的情况:
看过点抢占式实时操作系统的书,但没有真正使用过。最近使用STM32一阵子了,有块火牛开发板,关注了RTT快一年多。
于是这两天基于火牛板开始学习RT-Thread抢占式操作系统。

下载下来后,简单看了看源代码和编程指南。有点小晕,因为书写风格和自己不太样,而且到处都是 rt_ 的 变量、函数、结构体
另外发现一个问题,基于RT-Thread的文件结构,移植起来比较麻烦。bsp——board support package,都是针对特定的板子定制的驱动。
第一个疑问就是,我自己写好的那些底层驱动怎么用啊?放在哪里啊?难道用一块板子就要重写一遍驱动吗?

针对STM32已经有不少现成的底层驱动,系统架构自认为搭建的不错。于是第一步,就先把RT-Thread的代码划分了下,重构了项目的结构。
使用的工具:
uVision V4.20.03.0
火牛开发板 2009版
win7电脑一台,j-link一个。

版本:
rt-thread V0.3.3(0.3系列的最终版)
STM32F10x_StdPeriph_Driver V3.4.0



重构的结构图
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_700859MOD12E.png
结构图 (原文件名:sshot-1.png)


此结构图的基本思路如下:
STM32工程模板使用了分层。
层次间只允许高层调用低层,不允许低层调用高层。
相同层次的软件可以互相调用,但必须说明调用关系。
这样便于软件模块化,移植维护也会更方便。

其层次结构如下:

         --------------- 最高层 ----------------
      |                                       |
层一    |      Applications (应用层)          |
      |                                       |
         ---------------------------------------
      |                                       |
层二    |            Modules (组件层)         |
      |                                       |
--------------------------------------------------------
|                  API (应用程序编程接口)                |
--------------------------------------------------------
      |                                       |
      |               OS (系统)               |
      |                                       |
         ---------------------------------------   -------RT-Thread的bsp包就是层三和层四
      |                                       |
层三    |            Drivers (驱动层)         |
      |                                       |
--------------------------------------------------------
|                CMSIS (Cortex软件标准接口)            |
--------------------------------------------------------
      |                                       |
层四    |         Libraries (芯片库)          |
      |                                       |
         --------------- 最低层 ----------------


1. Applications:应用层
   - 包含了main文件, 中断处理文件, 系统配置文件
   - 不建议直接调用最底层 Libraries

2. Modules:组件层
   - 按大功能划分的软件组件。如UI组件、文件系统
   - 不建议直接调用最底层 Libraries
   - 用户可在此处添加特定工程的组件层
   - 用户可在此处添加常用的组件层(完善模板)
   - 将RT-Thread 的 filesystem net rtgui移植到了此层

3. OS:操作系统
   - 提供 RT-Thread 系统
   - 这一层仅包含 RT-Thread src以及libcpu文件,和finsh组件

4. Drivers:PCB板级驱动
   - 如按键、EEPROM、模拟I2C等等
   - 该层要能对上屏蔽掉最底层 Libraries
       这样起到承上启下的作用,方便跨平台移植
   - 部分驱动需要针对RT-Thread系统重写
   - 用户可在此处添加特定的驱动
   - 用户可在此处添加常用的驱动(完善模板)

5. Libraries:MCU外设库
   - 此部分由芯片厂商提供,是标准库
   - 用户不得修改此层

6. Compiler:编译器
   - 方便跨编译器平台的移植
   - 提供 RealView MDK 的工程模板
   - 用户可在此处添加其它编译器工程模板(完善模板)

7. Documents:文档说明
   - 提供 doxygen 注释风格的模板,说明,软件
   - STM32工程模板说明
   - Libraries 官方用户手册(仅针对Libraries部分,此文档由doxygen生成)
   - 用户可在此处添加其它说明性文件

8. API:Application Programming Interface,应用程序编程接口
   - API旨在提供软件抽象层,加快项目的开发和移植速度
   - 层一、层二的应用都应该基于API函数来使用
   - API函数由 Drivers 和 OS 提供, Libraries不得提供函数到应用接口
   - API函数必须使用标准C书写,与软件平台和硬件完全无关

9. CMSIS:Cortex Microcontroller Software Interface Standard,Cortex软件标准接口
   - CMSIS是ARM公司发布的一个标准接口,旨在提供Cortex-M处理器系列硬件抽象层
   - 仅 Drivers 和 OS 可直接调用 CMSIS 的函数
   - 目前仅提供了芯片核心部分的CMSIS,芯片外设标准库仍是由ST官方书写的



其中驱动部分的硬件配置都单独隔离出来,统一放到了 stm32f10x_conf.h 中。
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_700860D6WTD7.png
硬件配置代码 (原文件名:sshot-1.png)

譬如上图配置了4个硬件LED灯的IO口信息,并将4盏LED灯分别命名为LED1,LED2,LED3和LED4.




这样修改后,必须要重写部分代码。
Driver是文件中,drv_开头的就是通用驱动。rt_开头的就是针对RT—thread系统重写的底层驱动。debug文件用于assert处理。

改动最大的还是Application中。原代码一律rt_开头的风格能让人很快失去方向,不知道那些是rtt的核心代码,哪些其实是应该自己去写的。
现将startup去除,改为了大多数人乐意看到的 main命名方式
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_700864RJBELA.png
main函数 (原文件名:sshot-1.png)
其中:HardwareInit需要用户自己填入要初始化的硬件设备,如LED灯。
      ApplicationInit本质是添加RT-Thread线程。

第一次计划写学习笔记,希望能一周一次,坚持下来。。。
多说无益,最后直接上打包后的工程文件。

STM32_RTThread 工程模板ourdev_700960MDHCMG.rar(文件大小:3.26M) (原文件名:STM32_RTThread_V100.rar)

draapho 发表于 2012-6-29 09:21:02

重新上传一下资料。老的一直都下载不了


draapho 发表于 2011-12-2 15:29:34

上传失败,回去再试试吧。。。。。。

aahui 发表于 2011-12-2 15:36:39

继续啊

biansf2001 发表于 2011-12-2 16:06:57

这个要顶的

kongan 发表于 2011-12-2 21:35:18

这个必须顶,楼主代码就是规范

fgcx 发表于 2011-12-2 23:22:05

这样的帖子不顶不好意思。也说不过去。

undead 发表于 2011-12-11 12:10:31

不知道这样的话,版本升级时会不会更费事?

quweisy 发表于 2011-12-29 13:53:15

楼主的文件结构好,代码规范,思路清晰,果断顶!

sfp208 发表于 2011-12-29 18:31:09

同用火牛,mark

hwdpaley 发表于 2012-1-3 07:31:22

这个一定要支持!

502826756 发表于 2012-1-3 08:37:18

顶!

first_blood 发表于 2012-1-3 08:54:02

03版确实感觉不好,为啥application在BSP里面,04的就很好了,分的细了

hubeilcsun3 发表于 2012-1-3 10:18:11

正想在火牛上学习RT-Thread

mint 发表于 2012-1-7 19:19:45

和楼主的口味类似,喜欢看规范化的代码,赏心悦目~~~O(∩_∩)O~

jesonsyj 发表于 2012-2-16 20:02:56

回复【楼主位】draapho
-----------------------------------------------------------------------

很好的东西,最近也在看rtt,感觉有些晕,谢谢楼主的东西。

544410163 发表于 2012-6-6 16:43:34

恩恩    恩

laixiaoshuai90 发表于 2012-6-13 09:56:04

下不了了,那位能在上传一份!!!!

chnzh 发表于 2013-9-3 10:24:59

准备上手RT-Thread,没有去找其他的资料学习,就把楼主写的作为入门教材来看了,非常感谢。

1018365842 发表于 2013-10-16 20:02:22

这个系统现在用的多吗?

木君之上 发表于 2014-8-20 10:36:54

楼主的提的疑问简直道出了我心里的痛啊,完全不知道该干什么,怎样点亮LED都不知道,之前看的教程都是讲RT_Thread的操作系统的知识,但是我拿到操作系统了要怎眼用一点都不知道,哎,希望楼主能解决我的问题,感激不尽

CrystalShell 发表于 2014-9-2 19:34:21

楼主是不是应该和rtthread的开发人员交流一下,改善一下代码的规范易懂程度

bpengj3375 发表于 2014-9-17 15:43:05

看了几天RT-Thread。。。。

swortering 发表于 2014-11-5 17:27:38

mark。{:lol:}

hongguan 发表于 2014-11-5 19:50:02

谢谢!!!!!!!

ycmzq 发表于 2015-5-28 09:12:01

本帖最后由 ycmzq 于 2015-5-28 09:51 编辑

楼主文章的思路很清晰,非常值得RTThread初学者的借鉴。

netking2012 发表于 2016-10-20 11:21:56

确实不错哈。分层思想值得学习!编程结构清晰规范!好资料!

scar 发表于 2016-10-20 13:11:33

非常不错,结构清晰,初学者能快速上手运用

nicoe.088 发表于 2016-11-21 08:56:54

分层思想值得学习!

nicoe.088 发表于 2016-11-21 12:30:34

STM32_rtthread_net 编译时提示错误信息?
页: [1]
查看完整版本: 火牛板学习RT-Thread Step by Step——第一篇:修改RT-Thread目录结构