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

STM32超低功耗平台上的RTOS培训——之一、创建任务

[复制链接]
七哥 发布时间:2018-5-2 23:47
本帖最后由 toofree 于 2018-5-3 09:54 编辑 6 O, t% T. p! A6 N+ }

& _. V. y- w, E
STM32超低功耗平台上的RTOS培训——之一、创建任务

  q) L7 b- U9 L8 L/ j  参加《STM32超低功耗平台上的RTOS培训》有一段时间了,由于个人原因,一直没发贴汇报。今天补贴,根据RTOS培训样例程序,分析、理解RTOS创建任务的过程,并举一反三添加任务。
1 d) h: {# T, y& ^# D
+ Q5 m' W. y: ?, ?$ t+ f
  打开培训课件样例程序“FreeRTOS_TaskCreation”。IAR环境与培训一致——版本8.20.1,如果不一致,会导致下载程序问题(当然经过修改设置后可以正常下载,但这里不作过多解释)。左边工程管理中有几个文件夹,分别是用户程序、驱动程序、中间件(即FreeRTOS部分)。* _1 R, L+ J2 @9 B. T# E: L, s6 G( U
   傲游截图20180502225443.jpg " M1 X3 K3 J8 ], V/ Z
  $ E3 C5 m1 N. @: z" }
  打开“main.c”文件,到main函数,最开始为系统时钟及外设的初始化。这在裸跑的时候也是必须的。2 L( x, m& `0 r( b
   傲游截图20180502231340.jpg
& F2 b+ [( Y1 q9 G  |8 f4 |: s, D4 X1 _- W( d, E$ W5 \
& ~( x0 d" a+ G" |; b
  创建两个任务函数。
4 C# ]" {, b! A   傲游截图20180502225548.jpg 5 Z9 W: S& g7 |" q3 z
% l4 ^- k$ l. R. {
  由于任务函数在main函数之后,因此在文件开头需要申明。/ K  U, K3 s9 b5 S  h. i/ q6 U" x
   傲游截图20180502225720.jpg
+ }6 C: E& v5 M% Y4 q
5 O& _8 E/ c" Y  G$ s8 w  定义两个任务优先级8 p' i- y6 U5 P5 _/ W* I% j5 p
   傲游截图20180502225813.jpg . `: Y, c) i7 ]3 Z
  在main函数中,创建任务,并开启任务调度。+ [. ]7 O% f: h( r+ B
   傲游截图20180502230131.jpg 1 M7 R) O$ o$ o6 c0 `8 B
- H' {: c) z% I( }. d
  在工程设置中设置ST-Link为下载调试器,并设置flash loader(在keil下对应为flash编程算法)。
% p( J; D# F. g$ p- y4 G   傲游截图20180502232019.jpg
+ u* u. q3 S7 O2 k" _# L+ `  \
2 j6 R# M- P( x   傲游截图20180502232043.jpg ) u, n- ~" v  l8 n
- a- e- E' y. t+ C0 `( h/ v  [8 D
  将Nucleo-L496ZG板连接电脑USB。
     完全编译程序,保证无错误后。在“Project”下拉菜单下,选择“Download and Debug”或者直接快捷方式Ctrl+D,下载并调试。F5全速跑程序(F5在很多环境下都是全速跑程序的快捷键)。
" ~( ~$ ~( N2 q. |4 j( G   傲游截图20180502232458.jpg ; U: X7 E+ q0 R& V& ]; U
) D* Y  ?$ ~  f) }/ C8 q
  当然也可以不调试,直接下载程序,按复位键跑程序。
" I3 ^# ~6 O5 ?6 V% {+ c   傲游截图20180502232714.jpg
" ~0 n  a# L( d! b
! K9 q( e/ r# A) R3 \
  这时我们可以看到,Nucleo-L496ZG板上的蓝色LED2开始闪烁。
; r1 S  T3 |4 A3 ^5 B
, ?4 m) P) e& V4 {3 Y  打开串口调试助手,选择ST-Link虚拟出来的串口,设置115200波特率。可以UART任务在不停的从串口打印输出
  p+ A+ |* b. f   傲游截图20180502233604.jpg
4 x1 Y  c8 C/ P8 i: H2 J2 q
; \$ S- B! c$ G9 z" e1 Z* q+ |  等等……,还没结束!/ V1 {5 E8 W5 B& X. M$ p

' y1 {3 M+ h2 V  Nucleo-L496ZG板上有三个用户LED,LED1、LED2、LED3分别为绿、蓝、红。我们可以照猫画虎,把LED1、LED3也增加到任务中来。
" X6 i1 l: n9 N  E; K& l  初始化中增加LED3
) z, J6 A* ?$ v& g0 _   傲游截图20180502234203.jpg . z) @1 v0 }$ U! L8 q% a
$ S; I; V5 B9 D! h# I- D. B
  添加LED1、LED3的任务函数,并在文件开头增加申明。
7 n# v$ @+ i2 y( L0 s: x3 U   傲游截图20180502234254.jpg
7 n- i) ^- d; [
: M/ {8 d: S/ F6 c8 ?9 g- F/ O% k   傲游截图20180502234401.jpg ( t* G" ~. t( u- ]# e3 \

% W* d2 a0 {+ k& ~$ v  o, U  增加LED1、LED3任务的优级宏定义,并重新调整了各任务的优先级。
/ @4 g+ Y1 ]  ^, a/ s5 e   傲游截图20180502234444.jpg * L: N, n( P7 N3 j

. D" h) {1 \/ j+ L+ m2 U4 }; {- u  主函数中增加创建LED1、LED3的任务  p9 B& o; c+ ?# `# J
   傲游截图20180502234627.jpg / N9 O# a( w' J7 A/ i
& p9 _4 T- L( S4 S& E
  下载、并全速跑程序。可以看到LED1、LED2、LED3全部闪烁起来了。- B' ~  N& x1 e* L4 g8 G, l/ e6 c3 Q

8 `# N5 f4 N4 A. @' B/ [0 ]) u  是不是非常简单呢!so easy!
& O3 F1 H  \& m2 [& Q2 L" d$ G+ }/ f1 N

* }! [/ ]3 o9 e8 a
% s4 H: ?" m. y4 u8 \
  p/ m: F0 {( T) ~9 P
赞 收藏 评论1 发布时间:2018-5-2 23:47

举报

1个回答
zero99 回答时间:2018-5-3 09:08:58
谢谢支持啦!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版