赞
踩
STM32完美移植RT-Thread实时操作系统
官网下载RT-Thread nano:下载 - RT-Thread物联网操作系统
解压打开下载文件夹
打开自己的裸板文件夹
在自己的裸板文件夹中新建RT-THREAD,在RT-THREAD下新建RT-include、RT-port、RT-source(名字自己定)
再打开USER新建boaed文件夹
下面开始复制相关文件
打开RT-Thread——bsp——stm32f103-msh——RTE——RTOS——复制board.c和rtconfig.h到自己的文件夹USER——board下
在USER——board下新建board.h
打开下载文件夹的src——复制全部文件到自己文件夹RT-Thread——RT-source下
打开下载文件的libcpu——arm——cortex-m3下复制context_rvds.S和cpuport.c文件到自己文件夹的RT-Thread——RT-port下
打开下载文件的include下复制全部文件到RT-Thread——RT-include下
再打开下载文件的components下复制两个文件夹到RT-Thread——RT-include下
至此所有文件复制完毕
打开工程添加文件
点击
先添加如下文件夹
在USER下添加
在RT-port下添加
在RT-source下添加
在RT-include下添加所有刚刚建立文件夹下的文件,包括复制过来的两个文件夹下的文件
再点击
选择C/C++
添加路径
打开stm32f1xx_it下找到如下函数,屏蔽
打开board.c找到如图函数
点击SystemCoreClock找到本体更改合适频率系统频率
再把系统时钟函数添加到此函数中
打开更改建立的board.h添加如下代码(sys.h中是系统时钟频率初始化和头文件#include “stm32f1xx.h”)然后在board.c下添加头文件#include “board.h”
再打开rtconfig.h更改相关参数,根据需要改
#define RT_THREAD_PRIORITY_MAX 8
//表示 RT-Thread 支持多少个优先级,取值范围为 8~256,默认为 32。
#define RT_TICK_PER_SECOND 1000
//表示操作系统每秒钟有多少个 tick即是操作系统的时钟周期,默认为 1000,即操作系统的时钟周期 tick 等于 1ms。
#define RT_ALIGN_SIZE 4
//表示 CPU 处理的数据需要多少个字节对齐,默认为 4 个字节
#define RT_NAME_MAX 8
//表示内核对象名字的最大长度,取值范围为 2~16,默认为 8。
#define RT_USING_COMPONENTS_INIT
//RT-Thread 组件初始化,默认使能
#define RT_USING_USER_MAIN
//使用用户 main 函数,默认打开
#define RT_MAIN_THREAD_STACK_SIZE 512
// main 线程栈大小,取值范围为 1~4086,单位为字节,默认为512
#define RT_DEBUG_INIT 0
//调试配置。包括了内核调试配置,组件调试配置和线程栈溢出检测,目前全部关闭
#define RT_USING_TIMER_SOFT 0
//软件定时器配置,目前关闭,不使用软件定时器
#define RT_USING_SEMAPHORE
//内部通信配置,包括信号量、互斥量、事件、邮箱和消息队列,根据需要配置
#define RT_USING_SMALL_MEM
//内存管理配置
参考网址:http://forum.eepw.com.cn/thread/316958/1/
#define RT_USING_CONSOLE
//控制台配置。控制台即是 rt_kprintf()函数调试输出的设备,通常使用串口。
修改board.c,board.c 是直接从 RT-Thread/3.0.3/bsp 文件夹下面拷贝过来的, 里面存放的是与硬件相关的初始化函数,
static uint32_t _SysTick_Config(rt_uint32_t ticks)
//相关的寄存器定义和初始化函数,这个是跟处理器相关的,直接使用固件库函数,将其注释。
void *rt_heap_begin_get(void) void *rt_heap_end_get(void)
//RT-Thread 堆配置,如果同时定义了 RT_USING_USER_MAIN 和RT_USING_HEAP 这两个宏, 表示 RT-Thread 里面创建内核对象时使用动态内存分配方案。
void rt_hw_board_init()
//RT-Thread 启动的时候会调用一个名为 rt_hw_board_init()的函数,从函数名称我们可以知道它是用来初始化开发板硬件的,比如时钟,比如串口等。
void SysTick_Handler(void)
//SysTick 中断服务函数是一个非常重要的函数, RT-Thread 所有跟时间相关的事情都在里面处理。
找到finsh_port.c屏蔽//#error “TODO 4: Read a char from the uart and assign it to ‘ch’.”
然后编译,没有问题
最后在主函数下添加头文件
OK,可以完美使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。