RT-Thread 学习笔记(一)---配置RT-Thread开发环境

前言

一个偶然机会接触到了一个陌生的名字---RT-Tread,想一探究竟,从它的手册中发现这个陌生的嵌入式操作系统有着许多优秀的表现,于是下决心学习研究下。下面记录了RT-Thread的学习过程,不妥之处请予指正。

软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2

硬件环境:Armfly STM32F103ZE-EK REV 3.0开发板

参考文章:

【1】R​T​-​T​h​r​e​a​d​配​置​开​发​环​境​手​册

【2】RT-Thread 教程连载点击打开链接

【3】STM32 + RT Thread OS 学习笔记


1,RT-Thread开发环境配置

1.1 安装python 以及SCons构建工具

RT-Thread使用SCons作为默认的构建工具。SCons基于Python开发,因此我们需要先安装python,再安装SCons。

(1),安装python,其版本号为2.7点击打开链接,下载完毕后安装,如下图。但这不是必需的,您完全可以使用2.6或其他版本。python3.2版本不能运行scons


一路点击下一步(next)即可。默认情况下,这个程序会被安装到 C:\Python27 目录下,我们要将这个目录加入到系统
PATH变量中。方法如下:

在计算机(windows 7)上右击,选择【属性】,然后在弹出对话框中点击【高级系统设置】,弹出系统属性对话框->高级->环境变量,如下图。注意第五步是“; C:\Python27 ”,其中的分号是英文输入状态下的符号。


然后,点击确定关闭对话框。


(2),安装SCons

Scons下载地址: http://sourceforge.net/projects/scons/files/scons/2.3.2/,软件版本是2.3.2这里选择微软window版本,下载完毕后点击安装,SCons 会被自动安装到python 安装目录中即C:\Python27\Scripts目录,如下图。



参考上一节,将上述路径同样添加到系统PATH 变量中。用echo %path%命令可以看到系统变量添加的结果,如下图。

1.2,安装编译工具链

RT-Thread可以支持GCC,Keil MDK 或者 IAR的EWARM 编译工具的一种或全部。

(1),关于GCC,推荐一篇文章sourcery g++ lite建立交叉编译环 ,里面相关GCC的介绍,下载地址是 codesourcery,需要注册,这里安装的版本arm-2012.09-63-arm-none-eabi.exe,如下图,可以更改安装位置。

按照默认安装,结束后,gcc 的安装路径就会被自动加入到系统环境变量中去。

(2),KeilMDK 和 IAR EWARM安装,因为其为商业软件,这里不做介绍。


2,编译测试

2.1,源码目录结构

通过SVN下载到本地的SVN目录的源码结构如下图。

2.2,配置SCons脚本

进入到RT-Thread的板级工程目录bsp下面,可以看到很多开发板工程目录,这里现有的开发板是armlay(安富莱)的STM32F103ZE-EK REV3.0,因此只需将stm32f10x目录连同文件复制一份并重命名为stm32f103ze-ek(armfly),如左下图。然后进入该目录找到readme.txt和rtconfig.py,如右下图。

上面文件中:

rtconfig.py 此文件必须修改。

rtconfig.h 此文件用于裁剪rt-thread(根据您的需要修改)

打开readme.txt,可以看到如下内容:

-- cn --
按需要生成工程文件:
1. 修改 rtconfig.py :
CROSS_TOOL='keil'           #使用的工具链
STM32_TYPE = 'STM32F10X_HD' #STM32对应的型号.
2. 修改 rtconfig.h 配置需要的功能.
2. 执行 scons --target=mdk  生成MDK工程文件.

note: 需要安装 python,scons.

-- en --

上面内容告诉我们需要指定的编译器和开发板上芯片类型。

RT-Thread 的通过SCons 支持三种编译器,编译器的选择在rtconfig.py 中指定,如果您按照上面的步骤安装了python和SCons,那么可以在 rtconfig.py 上右键点击Edit with IDLE 编辑器打开, 部分内容如下(红色粗体字部分是根据自己的实际环境和需求修改的结果):


 

说明:上面编译工具默认是IAR编译器链接,以windows平台为例,因此,路径都是windows路径风格,对于linux,只要修改路径为linux风格即可。 在路径的前面加上了小r,表示后面的内容不需要转义,因为windows路径风格是使用'\'作为分隔符,与转义字符冲突。


SCons命令的常用选项:

scons -c

这个命令会清除编译出来的文件

scons -j4

表示并行4个任务同时运行,适用于多核多线程。

scons --target=mdk4 -s

生成project.uvproj,不过您需要查看一下当前bsp目录下是否提供了template.uvproj文件,因为这个命令依赖template.uvproj或template.uv2。

scons --target=iar -s

生成project.ewp和project.eww,不过也同样依赖于当前bsp目录下是否提供了是否提供了template.ewp工程模板。

保存上面文件,打开cmd命令行窗口,然后先直接输入E:使用cd命令切换到 bsp\stm32f103ze-ek(armfly)目录下,如下图。

然后输入 scons 后回车,运行结果如下:

然后将上面rtconfig.py脚本CROSS_TOOLS修改如下:

CROSS_TOOLS='iar'

保存后,重新执行scons命令,结果如下:


然后在上面的变量改回去,如下:

CROSS_TOOLS='keil'

修改后保存,重新执行scons命令

由上面测试已经知道,iar和gcc不会出现这个错误的。但用keil编译结果有一处告警和一处链接错误。

注意:此时你可能会遇到一个错误,告警提示是链接时未找到ARM 库,link出错。

通过网上搜索说是scons 构建工程组件不能自动加入,自己没搞明白,只能暂且搁置,有待以后研究。


到此为止,我们为stm32f103ze-ek开发板构建了一个RT-Thread开发环境。








<think>好的,用户想了解如何在RT-Thread中自己封装指令。首先,我需要回忆RT-Thread的基本结构,特别是finsh组件,它负责命令行交互。用户可能有定的嵌入式开发经验,但可能对RT-Thread的内部机制不太熟悉。需要分步骤解释,确保逻辑清晰。 首先,用户可能需要知道如何创建自定义命令。这涉及到MSH_CMD_EXPORT宏的使用。需要详细说明函数如何编写,参数argc和argv的作用,以及如何注册命令。可能还需要提醒返回值的问题,虽然通常返回0,但如果有错误处理的话需要注意。 接下来,用户可能对参数处理有疑问。例如,如何解析字符串参数为整数或浮点数。这时候需要提到atoi、atof等函数,并给出示例代码片段。同时,要提醒用户进行参数数量的检查,避免越界访问。 然后,高级封装部分需要考虑命令的层次结构,比如添加子命令。可能需要举例说明如何通过第个参数判断子命令,并调用不同的处理函数。这部分需要结构清晰,避免代码过于复杂。 此外,用户可能希望命令有更好的可读性和帮助信息。需要提到FINSH_FUNCTION_EXPORT_ALIAS的用法,以及如何在代码中添加注释,这样在使用help命令时能显示帮助信息。 最后,注意事项部分要强调命名规范、参数检查的重要性,以及线程安全的问题。特别是如果命令会访问共享资源,需要提醒使用互斥锁等机制。 整个过程需要确保语言简洁,示例明确,避免使用过于专业的术语,让不同层次的开发者都能理解。同时,检查是否有遗漏的步骤,比如编译和测试命令,是否需要修改配置文件等。可能用户在实际操作中会遇到问题,所以步骤要详细,常见问题也要提及。</think>在RT-Thread中自定义封装指令(命令)可通过以下步骤实现: 1. **命令处理函数原型** 需创建符合`MSH_CMD_EXPORT`标准的函数: ```c int my_command(int argc, char **argv) { /* 命令处理逻辑 */ return 0; } ``` 2. **注册命令** 使用宏定义导出命令: ```c MSH_CMD_EXPORT(my_command, "This is my custom command"); ``` 3. **参数解析示例** ```c int led_control(int argc, char **argv) { if (argc != 2) { rt_kprintf("Usage: led [on|off]\n"); return -1; } if (strcmp(argv[1], "on") == 0) { rt_pin_write(LED_PIN, PIN_HIGH); } else if (strcmp(argv[1], "off") == 0) { rt_pin_write(LED_PIN, PIN_LOW); } return 0; } MSH_CMD_EXPORT(led_control, "Control LED: led on/off"); ``` 4. **高级封装技巧** - 参数类型转换: ```c int value = atoi(argv[1]); // 字符串转整数 double voltage = atof(argv[2]); // 字符串转浮点 ``` - 子命令结构: ```c int sensor_cmd(int argc, char **argv) { if (argc < 2) return -1; if (strcmp(argv[1], "read") == 0) { // 处理读取操作 } else if (strcmp(argv[1], "config") == 0) { // 处理配置操作 } } ``` 5. **帮助信息增强** ```c FINSH_FUNCTION_EXPORT_ALIAS(sensor_cmd, __cmd_sensor, sensor operations); /* 在函数前添加注释 */ /* * sensor read - Read sensor data * sensor config - Configure sensor */ ``` **注意事项**: 1. 命令命名应采用全小写+下划线的格式 2. 必须进行参数有效性检查(argc判断) 3. 涉及硬件操作时需考虑线程安全 4. 复杂命令建议拆分为多个子模块 完成开发后,通过`menuconfig`确保`FINSH_USING_MSH`已启用,编译烧录后即可在终端测试自定义命令。 建议参考`components/finsh`目录下的`cmd.c`源码,学习更多系统命令的实现方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aping_cs_dn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值