1、准备一个STM32例程代码
以正点原子官方led例程为例
2、准备RT-Thread Nano的源码
下载地址:RT-Thread Nano源码
3、拷贝rt-thread文件夹到STM32工程目录中
拷贝到
4、删除用不到的文件
5、修改工程目录
1、打开STM32工程
2、在USER中添加\rt-thread \ bsp路径中的board.c文件、rtconfig.h文件
3、Groups中选择新建rtt/source目录,在\rt-thread\ src路径中添加所有*.c文件
4、Groups中选择新建rtt/port目录,在\rt-thread\ libcpu\arm路径添加context_rvds.S和cpuport.c文件
5、给工程添加文件路径
\rt-thread\bsp
\rt-thread\components\finsh
\rt-thread\include\libc
\rt-thread\include
6、编译工程并修改错误
将头文件注释掉,头文件 RTE_Components.h是在 MDK中添加 RT-Thead Package 时由 MDK 自动生成的
将 stm32f10x_it.c 文件中的这个三个中断函数注释掉
7、编写第一个操作系统测试代码
删除rtconfig.h文件夹中第109行 前面的"//"符号,将 #define RT_USING_HEAP 这行代码屏蔽去掉。
宏的含义就是,使用动态堆栈。
main函数修改
#include "stm32f10x.h"
#include "led.h"
#include <rthw.h>
#include "rtthread.h"
/* 定义线程控制块 */
static rt_thread_t led1_thread = RT_NULL;
/*
*************************************************************************
* 函数声明
*************************************************************************
*/
static void led1_thread_entry(void* parameter);
int main( void )
{
/* LED 端口初始化 */
// LED_GPIO_Config();
led1_thread = /* 线程控制块指针 */
rt_thread_create( "led1", /* 线程名字 */
led1_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
3, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (led1_thread != RT_NULL)
rt_thread_startup(led1_thread);
else
return -1;
}
/*
*************************************************************************
* 线程定义
*************************************************************************
*/
static void led1_thread_entry(void* parameter)
{
while (1)
{
LED1 = ~LED1;
rt_thread_delay(500); /* 延时500个tick */
LED0 = ~LED0;
rt_thread_delay(500); /* 延时500个tick */
}
}
8、修改board.c文件
由于board.c和rtconfig.h文件是在每个工程中都需要修改的,为了方便管理
将rt-thread\bsp文件夹中的board.c和rtconfig.h文件拷贝到工程中User文件夹中。
同时在User文件夹下新建 board.h 头文件,可以将工程用到的相关头文件,统一放到这个文件中。
在board.h头文件中添加以下内容
#ifndef __BOARD_H__
#define __BOARD_H__
/* STM32 固件库头文件 */
#include "stm32f10x.h"
/* RT-Thread相关头文件 */
#include <rthw.h>
#include <rtthread.h>
/* 开发板硬件bsp头文件 */
#include "bsp_led.h"
#endif /* __BOARD_H__ */
还需要修改board.c文件,将board.c包含的头文件全部删除,只添加"board.h" 头文件,还需要修改board.c文件,将board.c包含的头文件全部删除,只添加"board.h" 头文件
将时钟相关的宏定义和时钟配置函数全部屏蔽掉
屏蔽掉rt_hw_board_init()函数中的 SystemCoreClockUpdate(); 和 _SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND ); 函数调用。
重新添加时钟初始化语句 SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND );
将LED初始化代码从主函数中剪切到时钟初始化语句下面。
由于board.c和rtconfig.h文件位置发生了变化,所以要在工程管理中,将User文件夹下原来的board.c和rtconfig.h文件删除掉,然后重新从User文件夹里面添加这两个文件。
由于这两个文件已经移动了位置,所以头文件中就不需要 …\rt-thread\rt-thread-3.1.3\bsp这个路径了,将这个路径从头文件中删除。
由于工程中 rt-thread 文件夹中存放的都是关于操作系统的代码,这些代码比较关键,不能够随便修改。 rt-thread 文件夹中以前的board.c和rtconfig.h文件已经复制到了User文件夹里面,所以rt-thread—>rt-thread-3.1.3—>bsp,这个BSP文件夹就可以删除掉了。
————————————————
版权声明:本文为CSDN博主「嵌入式@hxydj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20222919/article/details/110956288