使用RT-Thread的项目结构图

转载:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5247738&bbs_page_no=1&bbs_id=3066


先说说自己的情况: 
看过点抢占式实时操作系统的书,但没有真正使用过。最近使用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 



重构的结构图 

 
结构图  (原文件名: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 中。 
 
硬件配置代码  (原文件名:sshot-1.png) 


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




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

改动最大的还是Application中。原代码一律rt_开头的风格能让人很快失去方向,不知道那些是rtt的核心代码,哪些其实是应该自己去写的。 
现将startup去除,改为了大多数人乐意看到的 main命名方式 
 
main函数  (原文件名:sshot-1.png) 

其中:HardwareInit需要用户自己填入要初始化的硬件设备,如LED灯。 
      ApplicationInit本质是添加RT-Thread线程。 

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值