OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11725|回复: 15

从裸机开始,创建一个RT-Thread Nano系统工程

[复制链接]

7

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-28
在线时间
24 小时
发表于 2017-8-28 11:07:32 | 显示全部楼层 |阅读模式
——///  概述 \\\——
☟☟☟

RT-Thread Nano是一个精炼的硬实时内核,支持多任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性,用户可以直接从MDK的Run-time Environment获取,可以使用shell高效地进行在线动态调试。
在支持semaphore和mailbox特性,并运行两个线程(main线程+idle线程)情况下,ROM和RAM依然保持着极小的尺寸。我们基于Cortex M0 MCU的一个例子,编译后的大小(ROM: 3.25K, RAM: 1.04K),除去MCU需要的ROM和RAM, RT-Thread Nano本身需要的ROM是2.5K , RAM 是1K。
1.jpg


接下来将描述如何在MDK5上基于RTE(Run-Time Environment), 从裸机开始,创建一个RT-Thread RTOS的小系统工程。

01
Pack安装


Pack可以通过MDK联网安装,也可以离线安装。下面开始介绍两种安装方式。
Pack Installer安装
打开MDK软件,点击工具栏的Pack Installer图标:

2.jpg

点击右侧的Pack,展开General,可以找到rt-thread::rthread,点击对应的Action的Install,就可以在线安装Pack了。安装成功后Action栏显示 ”Up to date”。

3.jpg
手动安装我们也可以从官网下载安装文件。双击下载好的文件进行安装:
4.jpg

02

基础工程准备在开始创建RT-Thread小系统之前,我们需要准备一个能正常运行的裸机工程。作为示例,这边使用的是基于STM32L072-Discovery 和Low-Level Library的一个LED 闪烁程序。程序的主要截图如下:

5.jpg

在我们的例程中,编译下载程序后,就可以看到3个LED交替闪烁了。读者可以根据自己的需要使用其他芯片,完成一个简单的类似裸机工程。

03

添加RT-Thread到工程基于一个可以运行的裸机程序,我们来添加RT-Thread到工程。如下图,点击Manage Run-Time Environment。
6.jpg

在Manage Rum-Time Environment里”Software Component”栏找到RTOS,Variant栏选择RT-Thread,然后勾选kernel。就可以将RT-Thread内核添加到工程了。点击”OK”就添加RT-Thread到工程了。

7.jpg

现在可以在Project看到RT-Thread RTOS已经添加进来了,展开RTOS,可以看到这些文件被添加到工程:

8.jpg

04

适配RT-Thread在board.c完成systick的配置。以STM32L072为例,需要添加以下代码:
  • 包含相应的头文件
  • 初始化Systick:根据系统频率和每秒tick数量,配置Systick
  • 在Systick中断处理函数里添加rt_tick_increase()函数。


9.jpg

因为RT-Thread用到了异常处理函数HardFault_Handler()和悬挂处理函数 PendSV_Handler(),所以用户代码需要保证这两个函数没有被使用。
最后替换掉上面例程的delay函数:
  • 包含RT-Thread的相关头文件<rtthread.h>
  • 将delay()函数替换成rt_thread_delay(RT_TICK_PER_SECOND)。

下面是完成修改的代码:

10.jpg
编译程序之后下载到芯片就可以看到基于RT-Thread的程序运行起来了。

05

更多例程更多参看例程可以在MDK上通过Pack Installer找到。点击Pack Installer图标:
11.jpg

我们可以在Search里输入stm32l0,点击Device里的STM32L0 Serials,然后点击右侧的Example,可以看到右侧有基于stm32l0的两个例程。

12.jpg


补充内容 (2017-10-12 09:40):
RT-Thread Nano离线安装包下载地址:http://www.rt-thread.org/downloa ... rtthread.2.1.1.pack
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
金钱
356
注册时间
2016-5-11
在线时间
62 小时
发表于 2017-9-3 22:55:59 | 显示全部楼层
很实用很仔细,感谢楼主
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-4-6
在线时间
1 小时
发表于 2017-9-4 21:11:23 | 显示全部楼层
好的,不错的
回复 支持 反对

使用道具 举报

9

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2016-9-17
在线时间
24 小时
发表于 2017-9-11 17:47:00 | 显示全部楼层
请教楼主,如何使用RTE新建线程,无论是我自己的工程,还是从例程拷贝过来的,都会出现
.\rtthread\rtthread.bin: Error: L6218E: Undefined symbol rt_thread_create (referred from main.o).
错误,但是
#include <rthw.h>
#include <rtthread.h>
这两个是存在的。
请楼主帮忙解答
回复 支持 反对

使用道具 举报

8

主题

1034

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3668
金钱
3668
注册时间
2011-5-23
在线时间
2004 小时
发表于 2017-9-18 09:44:36 | 显示全部楼层
xhuaihe 发表于 2017-9-11 17:47
请教楼主,如何使用RTE新建线程,无论是我自己的工程,还是从例程拷贝过来的,都会出现
.\rtthread\rtthre ...

编译错误才是检查头文件是否包含

链接错误是检查源文件   xx.c 是否参与编译和链接

rt_thread_create 在 thread.c 中,
且需要使用 RT_USING_HEAP 动态内存功能才有用。
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

8

主题

1034

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3668
金钱
3668
注册时间
2011-5-23
在线时间
2004 小时
发表于 2017-10-7 20:46:19 | 显示全部楼层
扒了一下直接下载的链接

http://www.rt-thread.org/downloa ... rtthread.2.1.1.pack

如果需要手动导入,可以用这个链接直接下载。
有部分网友反应MDK 5.14等比较老的版本,即使使用管理员权限打开,也会提示没有写权限。
应该是MDK的问题,升级为新的就好。
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

36

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
401
金钱
401
注册时间
2014-6-4
在线时间
89 小时
发表于 2017-10-28 17:45:25 | 显示全部楼层
加入RT变的如此容易,真的很6啊。
一路狂奔!
回复 支持 反对

使用道具 举报

30

主题

159

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1525
金钱
1525
注册时间
2015-11-11
在线时间
163 小时
发表于 2017-11-4 08:45:48 | 显示全部楼层
赞一个,支持一下
好好学习
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-2-26
在线时间
18 小时
发表于 2017-11-15 15:38:28 来自手机 | 显示全部楼层
很不错就等接下来弄了!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-12-11
在线时间
1 小时
发表于 2019-12-20 09:25:36 | 显示全部楼层
为什么老是显示UsbSecurity\UsbSecurity.axf: Error: L6218E: Undefined symbol rt_thread_create (referred from main.o).但是明明#include <rthw.h> #include <rtthread.h>这两个都有的
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-12-11
在线时间
1 小时
发表于 2019-12-20 09:26:23 | 显示全部楼层
aozima 发表于 2017-10-7 20:46
扒了一下直接下载的链接

http://www.rt-thread.org/download/mdk/rt-thread.rtthread.2.1.1.pack

我也遇到这个问题,真的解决不了,搞了好长时间了,就是解决不了
回复 支持 反对

使用道具 举报

8

主题

1034

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3668
金钱
3668
注册时间
2011-5-23
在线时间
2004 小时
发表于 2019-12-20 14:18:18 | 显示全部楼层
你这报的是链接问题

#include <rthw.h> #include <rtthread.h>

只能解决编译问题。




你这nano板子没开动态内存吧,自然就用不了 create
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-11-19
在线时间
5 小时
发表于 2019-12-24 16:00:47 | 显示全部楼层
请问楼主,根据系统频率和每秒tick数量如何配置呢?能不能给出相关代码和说明呢?感谢!
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-4-15
在线时间
18 小时
发表于 2020-3-19 10:17:06 | 显示全部楼层
曹伟 发表于 2019-12-20 09:25
为什么老是显示UsbSecurity%usbSecurity.axf: Error: L6218E: Undefined symbol rt_thread_create (referre ...

需要打开RT_USING_HEAP  在rtconfig.h中
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-12-28
在线时间
12 小时
发表于 2020-3-31 16:53:08 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

33

主题

137

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
471
金钱
471
注册时间
2019-7-3
在线时间
113 小时
发表于 2020-5-22 15:42:36 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 00:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表