火牛板学习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) 重新上传一下资料。老的一直都下载不了
上传失败,回去再试试吧。。。。。。 继续啊 这个要顶的 这个必须顶,楼主代码就是规范 这样的帖子不顶不好意思。也说不过去。 不知道这样的话,版本升级时会不会更费事? 楼主的文件结构好,代码规范,思路清晰,果断顶! 同用火牛,mark 这个一定要支持! 顶! 03版确实感觉不好,为啥application在BSP里面,04的就很好了,分的细了 正想在火牛上学习RT-Thread 和楼主的口味类似,喜欢看规范化的代码,赏心悦目~~~O(∩_∩)O~ 回复【楼主位】draapho
-----------------------------------------------------------------------
很好的东西,最近也在看rtt,感觉有些晕,谢谢楼主的东西。 恩恩 恩 下不了了,那位能在上传一份!!!! 准备上手RT-Thread,没有去找其他的资料学习,就把楼主写的作为入门教材来看了,非常感谢。 这个系统现在用的多吗? 楼主的提的疑问简直道出了我心里的痛啊,完全不知道该干什么,怎样点亮LED都不知道,之前看的教程都是讲RT_Thread的操作系统的知识,但是我拿到操作系统了要怎眼用一点都不知道,哎,希望楼主能解决我的问题,感激不尽 楼主是不是应该和rtthread的开发人员交流一下,改善一下代码的规范易懂程度 看了几天RT-Thread。。。。 mark。{:lol:} 谢谢!!!!!!! 本帖最后由 ycmzq 于 2015-5-28 09:51 编辑
楼主文章的思路很清晰,非常值得RTThread初学者的借鉴。 确实不错哈。分层思想值得学习!编程结构清晰规范!好资料!
非常不错,结构清晰,初学者能快速上手运用 分层思想值得学习! STM32_rtthread_net 编译时提示错误信息?
页:
[1]