当前位置: 首页 > news >正文

RT-Thread Nano源码浅析

一、了解源码

从官方下载到RT-Thread Nano源码目录如下图所示

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
http://www.hskmm.com/?act=detail&tid=39702

相关文章:

  • 关于SQLite - 世界上装机量最多的数据库
  • 《从 “被动听” 到 “主动学”:课堂听讲助力大学生思维成长》
  • 用AI批量生成产品视频!Python+Google Veo 3.1 API让电商转化率飙升
  • 模拟IIC与硬件IIIC哪个更常用?
  • 每日反思(2025_10_26)
  • 251019 NOIP 模拟赛 T2 | dp 及其优化、调整法最优解性质、数形结合
  • 小作业 14(2018 北京高考文科)
  • 10.23总结
  • 10.24总结
  • 第六章习题
  • 速通 花卉鉴赏 短文
  • Agent常见模式 - 智慧园区
  • 概率论测试
  • 2025.10.26总结
  • AI元人文:从战略能力到价值对话的实现框架
  • react-router7.9.4使用
  • Python---开发桌面应用程序
  • Python实现验证码识别的完整流程解析
  • 207. 课程表
  • 基于Python的验证码自动识别方案设计与实现
  • 记录一下
  • 中科大「数学分析教程——上册」习题选做 - Neuro
  • 回忆录:梦开始的往事
  • 20232418 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 大学生为啥一定要认真听讲
  • ti2
  • 单像素demo初探
  • 以听筑基,以行践知:解锁学习新范式的思考
  • Day4表单-imput标签
  • 学好专业,养好体魄——我的学习感悟