(转)移植RT-Thread Nano到STM32F103--拷贝移植方式

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.Scpuport.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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值