一、了解源码
从官方下载到RT-Thread Nano源码目录如下图所示
1、bsp文件夹
bsp文件夹里面存放的是板级支持包(board support package),用于存放RT-Thread为各种半导体厂商的评估板写好的驱动程序,其中重要的主要是两个文件
- board.c:RT-Thread用来初始化开发板硬件的相关函数;
- rtconfig.h:RT-Thread功能的配置头文件,可以裁剪RT-Thread的功能;
2、components文件夹
其它第三方加进来的组件,比如gui、fatfs、lwip和finsh等。nano版本只放了finsh,是RT- Thread组件里面最具特色的,它通过串口打印的方式来输出各种信息,方便我们调试程序。
3、docs文件夹
其他文件
4、include文件夹
include目录下面存放的是RT-Thread内核的头文件,是内核不可分割的一部分。
5、libcpu文件夹
存放软件和硬件的接口文件,通常由汇编和C联合编写。
6、src文件夹
src目录下面存放的是RT-Thread内核的源文件,是内核的核心
二、官方移植
1、修改board.c文件
/** Copyright (c) 2006-2019, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2021-05-24 the first version*/#include <rthw.h>
#include <rtthread.h>
#include "main.h"#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
/** Please modify RT_HEAP_SIZE if you enable RT_USING_HEAP* the RT_HEAP_SIZE max value = (sram size - ZI size), 1024 means 1024 bytes*/
#define RT_HEAP_SIZE (15*1024)
static rt_uint8_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;
}
#endifvoid SysTick_Handler(void)
{/* 进入中断 */rt_interrupt_enter();/* 更新时基 */rt_tick_increase();/* 离开中断 */rt_interrupt_leave();
}
/*** This function will initial your board.*/
void rt_hw_board_init(void)
{/* 添加HAL初始化、时钟配置、滴答时钟配置 */extern void SystemClock_Config(void);HAL_Init();SystemClock_Config();SystemCoreClockUpdate();HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND);/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INITrt_components_board_init();
#endif#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}#ifdef RT_USING_CONSOLEstatic int uart_init(void)
{
#error "TODO 2: Enable the hardware uart and config baudrate."return 0;
}
INIT_BOARD_EXPORT(uart_init);void rt_hw_console_output(const char *str)
{
#error "TODO 3: Output the string 'str' through the uart."
}#endif
2、修改rtconfig.h文件
#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__/*----------------------------------------------------------------------------*/
/* 配置启用标志(一般用 #define 或 #undef) *//* 表示RT-Thread支持libc函数(标准库) */
#define RT_USING_LIBC/* 表示RT-Thread支持的最大优先级数目,取值范围为8-256,默认为32 */
#define RT_THREAD_PRIORITY_MAX 8/* 表示操作系统每秒的 tick 数,系统时钟周期为 1ms */
#define RT_TICK_PER_SECOND 1000/*----------------------------------------------------------------------------*/
/* 内核配置选项(一般用 #define 或 #undef) *//* CPU 数据对齐字节数,默认为 4 */
#define RT_ALIGN_SIZE 4
/* 内核对象名称最大长度,默认为 8 */
#define RT_NAME_MAX 8
/* 使用 RT-Thread 组件初始化,启用 */
#define RT_USING_COMPONENTS_INIT
/* 使用用户 main 函数,启用 */
#define RT_USING_USER_MAIN
/*----------------------------------------------------------------------------*/
/* 线程配置(main 线程) *//* main 线程栈大小,默认为 512 */
#define RT_MAIN_THREAD_STACK_SIZE 256
/*----------------------------------------------------------------------------*/
/* 调试配置 *//* 内核调试启用(建议设为 0) */
//#define RT_DEBUG
/* 初始化调试启用(默认关闭) */
#define RT_DEBUG_INIT 0
/* 线程栈溢出检查启用 */
//#define RT_USING_OVERFLOW_CHECK
/*----------------------------------------------------------------------------*/
/* 钩子配置(用于调试,可选) *//* 钩子函数启用 */
//#define RT_USING_HOOK
/* 空闲线程钩子启用 */
//#define RT_USING_IDLE_HOOK
/*----------------------------------------------------------------------------*/
/* 定时器配置(可选) *//* 使用软件延时(默认关闭) */
#define RT_USING_TIMER_SOFT 0
#if RT_USING_TIMER_SOFT == 0#undef RT_USING_TIMER_SOFT
#endif#define RT_TIMER_THREAD_PRIO 4#define RT_TIMER_THREAD_STACK_SIZE 512
/*----------------------------------------------------------------------------*/
/* 内部通信配置,包括信号量、互斥量、事件、邮箱和消息队列,根据需要配置 *///#define RT_USING_SEMAPHORE /* 信号量*/
//#define RT_USING_MUTEX /* 互斥量 */
//#define RT_USING_EVENT /* 事件 */
//#define RT_USING_SIGNALS /* 信号 */
//#define RT_USING_MAILBOX /* 邮箱 */
//#define RT_USING_MESSAGEQUEUE /* 消息队列 *//*----------------------------------------------------------------------------*/
/* 内存配置(可选) *//* 是否使用内存池 */
//#define RT_USING_MEMPOOL/* 是否使用动态内存堆 */
//#define RT_USING_HEAP/* 是否使用小内存 */
//#define RT_USING_SMALL_MEM
#define RT_USING_SMALL_MEM_AS_HEAP/* 示是否使用极小内存 */
//#define RT_USING_TINY_SIZE
/*----------------------------------------------------------------------------*/
/* 控制台配置(用于调试输出) *//* 是否使用控制台(调试接口) */
//#define RT_USING_CONSOLE
/* 控制台缓冲区大小,默认为 256 */
#define RT_CONSOLEBUF_SIZE 256
/*----------------------------------------------------------------------------*/
/* 驱动与设备配置(可选) *//* 使用设备驱动接口 */
//#define RT_USING_DEVICE
/*----------------------------------------------------------------------------*/
/* 系统启动与运行配置(可选) *//* 控制台提供 FINSH 命令行支持 */
//#include "finsh_config.h"#endif