赞
踩
打开后就长上面那样,然后
点开后,
回车:
你就看到了keil官网的pack包,点开它
下载3.0.3版本的(为什么不下最新版?因为3.0.3版本的参考资料多利于学习)
下载好了后点击打开,然后选择储存路径,(他一般默认存在你keil5的安装路径下面,所以不用改。)
安装成功之后,可以在 KEIL 的 PACK 目录下找到刚刚安装的 Package 的所 有的文件
找到keil的安装文件夹,点开PACK(如上图)
rtt的源码在RealThread里面:(如上图)
这就是T-thread的所有源码了,不过这是nano版本的,所谓nano版本就是rt-thread裁剪了多余的功能和组件,留下了操作系统的内核和重要组件,这对于初学者来说足够了
安装成功之后,就可以在 KEIL 里面的软件包管理器中将 RT-Thread Nano 直接添 加到工程里面,具体见图
找一个裸机32的工程,江科大的也可以火哥和原子哥的也可以,我用的江科大;然后按照上面说的打开rt-thread的源码
先务必熟悉一下文件夹存放的文件为后续移植做准备
bsp :板级支持包,bsp 文件夹里面存放的是板级支持包,即 board support package 的英文缩写
components/finsh: RT-Thread 组件(finsh 是 RT-Thread 组件里面 最具特色的,它通过串口打印的方式来输出各种信息,方便我们调试程序)
include :头文件
ibcpu/arm/cortex-m3:与处理器相关的接口文件(f103是m3内核的处理器)
src :RT-Thread 内核源码(src 目录下面存放的是 RT-Thread 内核的源文件,是内核的核心)
上图是32的裸机工程。我们在裸机工程上一点一点加入rt-thread的源码
拷贝 rtconfig.h 文件到 user 文件夹,拷贝 board.c 文件到 user 文件夹
1.RT-Thread/3.0.3/bsp 文件夹下面的 rtconfig.h 配套文件拷贝到工程根目录下面的 user 文件夹
2.将 RT-Thread/3.0.3/bsp 文件夹下面的 board.c 配套文件拷贝到工程根目录下面的 user 文 件夹
就是这两个,复制他们
然后再裸机的模版的User下粘贴:
复制粘贴总会吧
PS:rtconfig.h 是 RT-Thread 功能的配置头 文件,里面定义了很多宏,通过这些宏定义,我们可以裁剪 RT-Thread 的功能。用户在使 用 RT-Thread 的时候,用户只需要修改 board.c 和 rtconfig.h 这两个文件的内容即可,其它 文件我们不需要改动。
打开keil,新建 rtt/source 和 rtt/ports 组
不会新建?
右键Target1,然后看图:
然后:输入名字新建:rtt/source 和 rtt/ports
其中 rtt/source 用 于存放 src 文件夹的内容,rtt/ports 用于存放 libcpu/arm/cortex-m3文件夹的内容
建好后要添文件了:
刚刚复制到User路径下的两个文件先就加进去了(board.h先无视)
然后:一样的操作
这次的在你刚刚浏览器下载的源码包里的那个文件路径里找了,把src中的文件全部添加到:
接下来同样的操作:(再教一遍)
这次的在你刚刚浏览器下载的源码包里的那个文件路径里找了
找到了,加进去ADD;
到现在,该加的都加完了,但还没结束。。。。
RT-Thread 的源码已经添加到开发环境的组文件夹下面,编译的时候需要为这些源文 件 指 定 头 文 件 的 路 径 , 不 然 编 译 会 报 错 。我 们还将 RT-Thread\3.0.3\bsp 里面的 rtconfig.h 这个头文件拷贝到了工程根目录下的 user 文件 夹下,所以 user 的路径也要加到开发环境里面。RT-Thread 头文件的路径添加完成后的效 果具体见图
RT-Thread 的 源 码 里 面 只 有 RT-Thread\3.0.3\components\finsh、RT-Thread\3.0.3\include 和 RT-Thread\3.0.3\include\libc 这三 个文件夹下面有头文件,只需要将这三个头文件的路径在开发环境里面指定即可
配置结束,然后就改一改宏定义就能用了。。。。
rtconfig.h 是直接从 RT-Thread/3.0.3/bsp 文件夹下面拷贝过来的,该头文件对裁剪整个 RT-Thread 所需的功能的宏均做了定义,有些宏定义被使能,有些宏定义被失能,一开始 我们只需要配置最简单的功能即可。
rtconfig.h 头文件的内容修改的不多,具体是:注释掉头文件 RTE_Components.h、修 改 了 RT_THREAD_PRIORITY_MAX 、 RT_TICK_PER_SECOND 和 RT_MAIN_THREAD_STACK_SIZE 这三个宏的大小
board.c 是直接从 RT-Thread/3.0.3/bsp 文件夹下面拷贝过来的,里面存放的是与硬件相 关的初始化函数
把该删的删了,最后留下这些:
- /* 开发板硬件相关头文件 */
- #include "board.h"
-
- /* RT-Thread相关头文件 */
- #include <rthw.h>
- #include <rtthread.h>
-
-
- #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
- #define RT_HEAP_SIZE 1024
- /* 从内部SRAM里面分配一部分静态内存来作为rtt的堆空间,这里配置为4KB */
- static uint32_t rt_heap[RT_HEAP_SIZE];
- RT_WEAK void *rt_heap_begin_get(void)
- {
- return rt_heap;
- }
-
- RT_WEAK void *rt_heap_end_get(void)
- {
- return rt_heap + RT_HEAP_SIZE;
- }
- #endif
-
- /**
- * @brief 开发板硬件初始化函数
- * @param 无
- * @retval 无
- *
- * @attention
- * RTT把开发板相关的初始化函数统一放到board.c文件中实现,
- * 当然,你想把这些函数统一放到main.c文件也是可以的。
- */
- void rt_hw_board_init()
- {
- /* 初始化SysTick */
- SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND );
-
- /* 硬件BSP初始化统统放在这里,比如LED,串口,LCD等 */
-
-
-
-
-
- /* 调用组件初始化函数 (use INIT_BOARD_EXPORT()) */
- #ifdef RT_USING_COMPONENTS_INIT
- rt_components_board_init();
- #endif
-
- #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
- rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
- #endif
-
- #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
- rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
- #endif
- }
-
- /**
- * @brief SysTick中断服务函数
- * @param 无
- * @retval 无
- *
- * @attention
- * SysTick中断服务函数在固件库文件stm32f10x_it.c中也定义了,而现在
- * 在board.c中又定义一次,那么编译的时候会出现重复定义的错误,解决
- * 方法是可以把stm32f10x_it.c中的注释或者删除即可。
- */
- void SysTick_Handler(void)
- {
- /* 进入中断 */
- rt_interrupt_enter();
-
- /* 更新时基 */
- rt_tick_increase();
-
- /* 离开中断 */
- rt_interrupt_leave();
- }
-
-
-
然后borad.h是自己新建的,在 user 目录下新建一个 board.h 头文件,用来包含固件库和 BSP 相关的头文件和存放 board.c 里面的函数声明:
- #ifndef __BOARD_H__
- #define __BOARD_H__
- #include "stm32f10x.h"
-
-
- void rt_hw_board_init(void);
-
- void SysTick_Handler(void);
-
-
- #endif
SysTick中断服务函数在固件库文件stm32f10x_it.c中也定义了,而现在
在board.c中又定义一次,那么编译的时候会出现重复定义的错误,解决
方法是可以把stm32f10x_it.c中的注释或者删除即可。
全选注释即可,里面都是空函数
到现在准备工作都完成了!
主函数添加这两个头文件就行了
- #include <rtthread.h>
- #include "board.h"
-
-
-
- int main(void)
- {
-
-
- }
-
和硬件相关的头文件放在board.h里面:比如
硬件初始化放在:board.c中的void rt_hw_board_init()里,
因为这个函数比main函数还要先执行,因此就不放在main里面了
参考了野火的《RT-Thread 内核实现与应用开发实战指南》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。