- 学习路线
- RT-Thread 简介
- RT-Thread Nano
- RT-Thread Smart
- RT-Thread Studio
- 快速上手
- 内核
- Env 工具
- 设备和驱动
- 组件
- 软件包
- 物联网
- 工具
- MicroPython用户手册
- 应用开发
- RT-Thread 版本选择
- 开发环境搭建
- 固件尺寸优化
- 在RT-Thread潘多拉开发板上实现电源管理
- 网络协议栈驱动移植
- 在STM32F429上应用网络功能
- 在STM32F429上应用文件系统
- 在潘多拉上使用 SFUD 操作 Flash
- FreeModbus 应用笔记
- 应用AT组件连接ESP8266模块
- 多线程非阻塞网络编程
- 使用QEMU运行动态模块组件
- CmBacktrace应用
- 在 STM32L4 上应用 littlefs 文件系统
- STM32通用Bootloader
- wireshark抓取tls数据包
- 在 STM32 上应用 C++
- STM32 上使用 PWM
- STM32 上使用 USB Host 读写 U 盘
- QEMU 网络视频教程
- Demo 示例
- 其他
- 传感器驱动开发指南
- 软件包开发
- 向RT-Thread贡献代码
- 内核视频教程
- Env 视频教程
- rw007 SPI WiFi 模块使用
- wireshark抓取tls数据包
- Keil MDK 安装
- Rtthread dir
- 支持的传感器列表
- 支持的 Touch 列表
- Builtin functions and exceptions
- Cmath
- Gc
- Math
- Sys
- Uarray
- Ubinascii
- Ucollections
- Uerrno
- Uhashlib
- Uheapq
- Uio
- Ujson
- Uos
- Ure
- Uselect
- Usocket
- ussl – SSL/TLS 模块
- Ustruct
- Utime
- Uzlib
- thread
- micropython – 内部功能访问与控制模块
- Rtthread
- Machine
- Pin
- I2C
- SPI
- UART
- LCD
- RTC
- PWM
- ADC
- WDT
- Timer
- Network
- Wlan
- 传感器驱动框架介绍
- Preparations
Nano 配置
RT-Thread Nano 的配置在 rtconfig.h 中进行,通过开关宏定义来使能或关闭某些功能,接下来对该配置文件中的宏定义进行说明。
头文件
头文件 RTE_Components.h
仅由 Keil MDK 工程生成,其中仅定义了一个打开 FinSH 组件的宏 RTE_USING_FINSH
。
#if defined (__CC_ARM) || (__CLANG_ARM)
#include "RTE_Components.h" /* 用来开关 FinSH 组件,仅 MDK 会产生该文件 */
#if defined(RTE_USING_FINSH)
#define RT_USING_FINSH
#endif //RTE_USING_FINSH
#endif //(__CC_ARM) || (__CLANG_ARM)
非 Keil MDK 则不需要该头文件,若需打开 FinSH 组件,可直接在 rtconfig.h 中手动定义 RT_USING_FINSH
打开 FinSH 组件。
基础配置
1、设置系统最大优先级,可设置范围 8 到 256,默认值 8,可修改。
#define RT_THREAD_PRIORITY_MAX 8
2、设置 RT-Thread 操作系统节拍,表示多少 tick 每秒,如默认值为 100 ,表示一个时钟节拍(os tick)长度为 10ms。常用值为 100 或 1000。时钟节拍率越快,系统的额外开销就越大。
#define RT_TICK_PER_SECOND 100
3、字节对齐时设定对齐的字节个数,默认 4,常使用 ALIGN(RT_ALIGN_SIZE) 进行字节对齐。
#define RT_ALIGN_SIZE 4
4、设置对象名称的最大长度,默认 8 个字符,一般无需修改。
#define RT_NAME_MAX 8
5、设置使用组件自动初始化功能,默认需要使用,开启该宏则可以使用自动初始化功能。
#define RT_USING_COMPONENTS_INIT
6、开启 RT_USING_USER_MAIN
宏,则打开 user_main 功能,默认需要开启,这样才能调用 RT-Thread 的启动代码;main 线程的栈大小默认为 256,可修改。
#define RT_USING_USER_MAIN
#define RT_MAIN_THREAD_STACK_SIZE 256
内核调试功能配置
定义 RT_DEBUG
宏则开启 debug 模式,默认关闭。若开启系统调试,则可以打印系统 LOG 日志。
//#define RT_DEBUG // 关闭 debug
#define RT_DEBUG_INIT 0 // 启用组件初始化调试配置,设置为 1 则会打印自动初始化的函数名称
//#define RT_USING_OVERFLOW_CHECK // 关闭栈溢出检查
钩子函数配置
设置是否使用钩子函数,默认关闭。
//#define RT_USING_HOOK // 是否 开启系统钩子功能
//#define RT_USING_IDLE_HOOK // 是否 开启空闲线程钩子功能
软件定时器配置
设置是否启用软件定时器,以及相关参数的配置,默认关闭。
#define RT_USING_TIMER_SOFT 0 // 关闭软件定时器功能,为 1 则打开
#if RT_USING_TIMER_SOFT == 0
#undef RT_USING_TIMER_SOFT
#endif
#define RT_TIMER_THREAD_PRIO 4 // 设置软件定时器线程的优先级,默认为 4
#define RT_TIMER_THREAD_STACK_SIZE 512 // 设置软件定时器线程的栈大小,默认为 512 字节
IPC 配置
系统支持的 IPC 有:信号量、互斥量、事件集、邮箱、消息队列。通过定义相应的宏打开或关闭该 IPC 的使用。
#define RT_USING_SEMAPHORE // 设置是否使用 信号量
//#define RT_USING_MUTEX // 设置是否使用 互斥量
//#define RT_USING_EVENT // 设置是否使用 事件集
#define RT_USING_MAILBOX // 设置是否使用 邮箱
//#define RT_USING_MESSAGEQUEUE // 设置是否使用 消息队列
内存配置
RT-Thread 内存管理包含:内存池、内存堆、小内存算法。通过开启相应的宏定义使用相应的功能。
//#define RT_USING_MEMPOOL // 是否使用 内存池
//#define RT_USING_HEAP // 是否使用 内存堆
#define RT_USING_SMALL_MEM // 是否使用 小内存管理
//#define RT_USING_TINY_SIZE // 是否使用 小体积的算法,牵扯到 rt_memset、rt_memcpy 所产生的体积
FinSH 控制台配置
定义 RT_USING_CONSOLE 则开启控制台功能,失能该宏则关闭控制台,不能实现打印;修改 RT_CONSOLEBUF_SIZE 可配置控制台缓冲大小。
#define RT_USING_CONSOLE // 控制台宏开关
#define RT_CONSOLEBUF_SIZE 128 // 设置控制台数据 buf 大小,默认 128 byte
FinSH 组件的使用通过定义 RT_USING_FINSH 开启,开启后可对 FinSH 组件相关的参数进行配置修改,FINSH_THREAD_STACK_SIZE 的值默认较小,请根据实际情况改大。
#if defined (RT_USING_FINSH) // 开关 FinSH 组件
#define FINSH_USING_MSH // 使用 FinSH 组件 MSH 模式
#define FINSH_USING_MSH_ONLY // 仅使用 MSH 模式
#define __FINSH_THREAD_PRIORITY 5 // 设置 FinSH 组件优先级,配置该值后通过下面的公式进行计算
#define FINSH_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1)
#define FINSH_THREAD_STACK_SIZE 512 // 设置 FinSH 线程栈大小,范围 1-4096
#define FINSH_HISTORY_LINES 1 // 设置 FinSH 组件记录历史命令个数,值范围 1-32
#define FINSH_USING_SYMTAB // 使用符号表,需要打开,默认打开
#endif
常见问题
Q:移植完成之后出现 hard fault。
A:在默认情况下,系统配置的各种线程栈大小均较小,若不能正常运行,很有可能是栈不够用,可将栈值调大。例如 main 线程栈大小默认为 256,在实际使用时,main 中可能加入其它代码导致栈不够用的情况;FinSH 组件的线程 tshell,默认栈 512 也比较小,在使用时可以调大。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论