赞
踩
RT-Thread 的一个重要特性是高度可裁剪性,支持对内核进行精细调整,对组件进行灵活拆卸。
配置主要是通过修改工程目录下的 rtconfig.h 文件来进行,用户可以通过打开 / 关闭该文件中的宏定义来对代码进行条件编译,最终达到系统配置和裁剪的目的。
/* 表示内核对象的名称的最大长度,若代码中对象名称的最大长度大于宏定义的长度, * 多余的部分将被截掉。*/ #define RT_NAME_MAX 8 /* 字节对齐时设定对齐的字节个数。常使用 ALIGN(RT_ALIGN_SIZE) 进行字节对齐。*/ #define RT_ALIGN_SIZE 4 /* 定义系统线程优先级数;通常用 RT_THREAD_PRIORITY_MAX-1 定义空闲线程的优先级 */ #define RT_THREAD_PRIORITY_MAX 32 /* 定义时钟节拍,为 100 时表示 100 个 tick 每秒,一个 tick 为 10ms */ #define RT_TICK_PER_SECOND 100 /* 检查栈是否溢出,未定义则关闭 */ #define RT_USING_OVERFLOW_CHECK /* 定义该宏开启 debug 模式,未定义则关闭 */ #define RT_DEBUG /* 开启 debug 模式时:该宏定义为 0 时表示关闭打印组件初始化信息,定义为 1 时表示启用 */ #define RT_DEBUG_INIT 0 /* 开启 debug 模式时:该宏定义为 0 时表示关闭打印线程切换信息,定义为 1 时表示启用 */ #define RT_DEBUG_THREAD 0 /* 定义该宏表示开启钩子函数的使用,未定义则关闭 */ #define RT_USING_HOOK /* 定义了空闲线程的栈大小 */ #define IDLE_THREAD_STACK_SIZE 256
/* 定义该宏可开启信号量的使用,未定义则关闭 */ #define RT_USING_SEMAPHORE /* 定义该宏可开启互斥量的使用,未定义则关闭 */ #define RT_USING_MUTEX /* 定义该宏可开启事件集的使用,未定义则关闭 */ #define RT_USING_EVENT /* 定义该宏可开启邮箱的使用,未定义则关闭 */ #define RT_USING_MAILBOX /* 定义该宏可开启消息队列的使用,未定义则关闭 */ #define RT_USING_MESSAGEQUEUE /* 定义该宏可开启信号的使用,未定义则关闭 */ #define RT_USING_SIGNALS
/* 开启静态内存池的使用 */
#define RT_USING_MEMPOOL
/* 定义该宏可开启两个或以上内存堆拼接的使用,未定义则关闭 */
#define RT_USING_MEMHEAP
/* 开启小内存管理算法 */
#define RT_USING_SMALL_MEM
/* 关闭 SLAB 内存管理算法 */
/* #define RT_USING_SLAB */
/* 开启堆的使用 */
#define RT_USING_HEAP
/* 表示开启了系统设备的使用 */ #define RT_USING_DEVICE /* 定义该宏可开启系统控制台设备的使用,未定义则关闭 */ #define RT_USING_CONSOLE /* 定义控制台设备的缓冲区大小 */ #define RT_CONSOLEBUF_SIZE 128 /* 控制台设备的名称 */ #define RT_CONSOLE_DEVICE_NAME "uart1" (5)自动初始化方式 /* 定义该宏开启自动初始化机制,未定义则关闭 */ #define RT_USING_COMPONENTS_INIT /* 定义该宏开启设置应用入口为 main 函数 */ #define RT_USING_USER_MAIN /* 定义 main 线程的栈大小 */ #define RT_MAIN_THREAD_STACK_SIZE 2048
/* 定义该宏可开启系统 FinSH 调试工具的使用,未定义则关闭 */ #define RT_USING_FINSH /* 开启系统 FinSH 时:将该线程名称定义为 tshell */ #define FINSH_THREAD_NAME "tshell" /* 开启系统 FinSH 时:使用历史命令 */ #define FINSH_USING_HISTORY /* 开启系统 FinSH 时:对历史命令行数的定义 */ #define FINSH_HISTORY_LINES 5 /* 开启系统 FinSH 时:定义该宏开启使用 Tab 键,未定义则关闭 */ #define FINSH_USING_SYMTAB /* 开启系统 FinSH 时:定义该线程的优先级 */ #define FINSH_THREAD_PRIORITY 20 /* 开启系统 FinSH 时:定义该线程的栈大小 */ #define FINSH_THREAD_STACK_SIZE 4096 /* 开启系统 FinSH 时:定义命令字符长度 */ #define FINSH_CMD_SIZE 80 /* 开启系统 FinSH 时:定义该宏开启 MSH 功能 */ #define FINSH_USING_MSH /* 开启系统 FinSH 时:开启 MSH 功能时,定义该宏默认使用 MSH 功能 */ #define FINSH_USING_MSH_DEFAULT /* 开启系统 FinSH 时:定义该宏,仅使用 MSH 功能 */ #define FINSH_USING_MSH_ONLY
/* 定义该工程使用的 MCU 为 STM32F103ZE;系统通过对芯片类型的定义,来定义芯片的管脚 */
#define STM32F103ZE
/* 定义时钟源频率 */
#define RT_HSE_VALUE 8000000
/* 定义该宏开启 UART1 的使用 */
#define RT_USING_UART1
注意事项:在实际应用中,系统配置文件 rtconfig.h 是由配置工具自动生成的,无需手动更改。
RT-Thread 中经常使用一些宏定义,举例 Keil 编译环境下一些常见的宏定义:
1)rt_inline
,定义如下,static 关键字的作用是令函数只能在当前的文件中使用;inline 表示内联,用 static 修饰后在调用函数时会建议编译器进行内联展开。
#define rt_inline static __inline
2)RT_USED
,定义如下,该宏的作用是向编译器说明这段代码有用,即使函数中没有调用也要保留编译。例如 RT-Thread 自动初始化功能使用了自定义的段,使用 RT_USED 会将自定义的代码段保留。
#define RT_USED __attribute__((used))
3)RT_UNUSED
,定义如下,表示函数或变量可能不使用,这个属性可以避免编译器产生警告信息。
#define RT_UNUSED __attribute__((unused))
4)RT_WEAK
,定义如下,常用于定义函数,编译器在链接函数时会优先链接没有该关键字前缀的函数,如果找不到则再链接由 weak 修饰的函数。
#define RT_WEAK __weak
5)ALIGN(n)
,定义如下,作用是在给某对象分配地址空间时,将其存放的地址按照 n 字节对齐,这里 n 可取 2 的幂次方。字节对齐的作用不仅是便于 CPU 快速访问,同时合理的利用字节对齐可以有效地节省存储空间。
#define ALIGN(n) __attribute__((aligned(n)))
6)RT_ALIGN(size,align)
,定义如下,作用是将 size 提升为 align 定义的整数的倍数,例如,RT_ALIGN(13,4) 将返回 16。
#define RT_ALIGN(size, align) (((size) + (align) - 1) & ~((align) - 1))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。