你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
Cresta 发布时间:2017-8-14 18:04
——///  概述 \——
☟☟☟

# H" F5 ?) J$ k9 U  n" F
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。
使用MDK创建rt-thread小系统工程1028.png.thumb.jpg 7 ~4 u! n/ I. A, t: k! ]* ?( j6 k
, O8 p; `7 Q1 `
+ O. k, P( v/ _2 e0 F# a4 P+ c. {6 j" V
/ Y4 e. N  [7 \3 r8 U9 t
接下来将描述如何在MDK5上基于RTE(Run-Time Environment), 从裸机开始,创建一个RT-Thread RTOS的小系统工程。
, F! M' a" |' k' O* h7 ]
01
* j; Q: H  I4 T; Q1 D
Pack安装
' h( S( l5 K4 n% o5 b$ Y# |
3 r$ |4 I( d0 ?" q& F
Pack可以通过MDK联网安装,也可以离线安装。下面开始介绍两种安装方式。
Pack Installer安装
打开MDK软件,点击工具栏的Pack Installer图标:
使用MDK创建rt-thread小系统工程1284.png.thumb.jpg   d& l' j4 t; b
& v& Q* H6 `* W( ]- ]' l
! x1 D5 Y, H$ Q* x8 Y: g5 J" T0 ~
+ z) h% B5 o$ p6 t+ a0 r& p
点击右侧的Pack,展开General,可以找到rt-thread::rthread,点击对应的Action的Install,就可以在线安装Pack了。安装成功后Action栏显示 ”Up to date”。
. b5 v, N9 J3 g5 v7 A% v
" V1 X, c3 e; `' c2 }+ Y
使用MDK创建rt-thread小系统工程1391.png.thumb.jpg
7 K/ S# C* r# p8 }! `7 ]

+ Q; r& L/ T: u( a5 i
, R# \/ b; m% c手动安装我们也可以从官网下载安装文件。双击下载好的文件进行安装:
使用MDK创建rt-thread小系统工程1511.png.thumb.jpg ! j- _( v9 a& u1 a$ V! \+ c

! f4 ^" X, e# @5 t/ L& `
02
3 k5 Q5 t. y. T; M9 J) W
基础工程准备在开始创建RT-Thread小系统之前,我们需要准备一个能正常运行的裸机工程。作为示例,这边使用的是基于STM32L072-Discovery 和Low-Level Library的一个LED 闪烁程序。程序的主要截图如下:
3 x% P+ Z7 Q3 n; T" U: q* ]: w) F% o/ z' ~  a6 H" u* f& ]

% E2 X4 Z9 |* l0 X: z
使用MDK创建rt-thread小系统工程1633.png.thumb.jpg $ f) N  ^! Z( v8 @5 |
' ?/ Y* F( r' V; D/ {
在我们的例程中,编译下载程序后,就可以看到3个LED交替闪烁了。读者可以根据自己的需要使用其他芯片,完成一个简单的类似裸机工程。
! j) [  P+ j$ A6 |
03

/ m( A7 H- [; `  N' w/ A: F+ @. l6 p添加RT-Thread到工程基于一个可以运行的裸机程序,我们来添加RT-Thread到工程。如下图,点击Manage Run-Time Environment。
使用MDK创建rt-thread小系统工程1782.png.thumb.jpg + M. E+ o/ R" c( l
在Manage Rum-Time Environment里”Software Component”栏找到RTOS,Variant栏选择RT-Thread,然后勾选kernel。就可以将RT-Thread内核添加到工程了。点击”OK”就添加RT-Thread到工程了。

' N. T4 H: U! _  u: q
& a" _% h* o) N1 M# i. S, ?, K! Q7 o1 f$ T
使用MDK创建rt-thread小系统工程1918.png.thumb.jpg
. n' {" z) X7 Y

: o% n8 @; ?  m5 S, h2 }
现在可以在Project看到RT-Thread RTOS已经添加进来了,展开RTOS,可以看到这些文件被添加到工程:
使用MDK创建rt-thread小系统工程1979.png.thumb.jpg   I8 ?; g" D% a9 v0 Q; c

$ U/ i1 x) |: k* m( j! p
! }& c+ \+ C$ J
04
2 b" Q, h2 ?1 ]1 n
适配RT-Thread在board.c完成systick的配置。以STM32L072为例,需要添加以下代码:
  • 包含相应的头文件
  • 初始化Systick:根据系统频率和每秒tick数量,配置Systick
  • 在Systick中断处理函数里添加rt_tick_increase()函数。
    ( h  M+ }0 L- V
    使用MDK创建rt-thread小系统工程2122.png.thumb.jpg
    4 Y: [( M& y( Q2 @1 m. U

    / W- L2 o6 P$ G  s# C; W) G5 a2 W7 g, A

0 M( b  R2 K) g3 R  r, e  c4 \
因为RT-Thread用到了异常处理函数HardFault_Handler()和悬挂处理函数 PendSV_Handler(),所以用户代码需要保证这两个函数没有被使用。
最后替换掉上面例程的delay函数:
  • 包含RT-Thread的相关头文件
  • 将delay()函数替换成rt_thread_delay(RT_TICK_PER_SECOND)。
    - U' N- K6 V* E/ n
下面是完成修改的代码:
# S: G2 H+ j$ w  k

1 f1 I: }! p9 N
使用MDK创建rt-thread小系统工程2321.png.thumb.jpg
/ U: U: W- B# `; ^, N0 g7 T0 r
' w" k* a5 e' X- t% O$ W' X
编译程序之后下载到芯片就可以看到基于RT-Thread的程序运行起来了。
( g" t6 d5 s/ [) Y
05

7 {2 L) U, h# ^/ q更多例程更多参看例程可以在MDK上通过Pack Installer找到。点击Pack Installer图标:% s8 c- n$ m# d/ o' G0 a
6 [# `( {* }- }* u: ?2 t
& s; s* \; O0 L. v( A
使用MDK创建rt-thread小系统工程2417.png.thumb.jpg & L' H/ {0 k7 B4 E
) _4 p, P1 S5 o7 z2 i
我们可以在Search里输入stm32l0,点击Device里的STM32L0 Serials,然后点击右侧的Example,可以看到右侧有基于stm32l0的两个例程。
4 k8 m/ |5 g# q! M  x* y

! ?2 R$ \# I6 L3 q$ s
% Z9 G9 g) ]$ J* v
使用MDK创建rt-thread小系统工程2505.png.thumb.jpg
& \  t; f6 h2 y" V9 F6 j; m% k

4 c5 L( z9 K! g$ a5 E6 k: X

获取更多关于RT-Thread的使用(线程调度和管理、定时器、任务间同步及通信等等),请在本公众号回复关键词:RT-Thread编程手册。0 Z! l; F5 i0 F7 Z

% |0 a0 [2 H# S- e5 I

- u$ V& ^+ e9 E2 T
请添加微信13924608367,注明rt-thread,拉进群。
赞 收藏 1 评论5 发布时间:2017-8-14 18:04

举报

5个回答
D调的少侠 回答时间:2017-8-15 09:27:48
MDK这么快都支持RT-Thread了
gujiamao 回答时间:2017-8-15 09:50:21
厉害了!!!
Cresta 回答时间:2017-8-15 10:15:48
D调的少侠 发表于 2017-8-15 09:27
2 s) ?6 _. V4 i  P: NMDK这么快都支持RT-Thread了
8 {( f& C( ~1 w2 j
这只是个开始
gujiamao 回答时间:2017-8-22 18:04:23
有没有开任务的例子...
黑皮男 回答时间:2017-8-22 19:08:42
赞一个
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版