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

基于STM32的UCOSII操作系统经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-21 22:36
前言! D; |1 E; x4 M) r* _5 N! p
这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解,此文最后会附上我自己在UCOSII操作系统下使用STM32写的ESP8266+onenet+http协议的程序链接,可以作为参考,如果文中有不当的地方,还请各位大佬加以中指正,我一定会虚心求教。
; n5 g% K  O4 Z& V% W
5 R" Q9 I- a. H; P
1.UCOSII操作系统的简介
( C# b0 u5 @& p1 F! ~前台后台系统$ o0 ]. v4 W6 _9 X
, V% H# \  m+ T& }1 \, E# X
相信大家都使用过单片机,比如51,STM32,但是我们在使用的时候呢,我们都是在裸机下面写程序(也就是裸奔),也就是说,我们写的程序无非就是在主函数里面加一个死循环,然后再加上中断服务程序。应用程序以无限循环的方式在主函数被调用,调用相应的函数来完成所需要的功能,这个大的循环就叫做后台系统。而中断服务程序就是来处理我们的异常,异常结束后跳出中断服务程序,回到原来进入中断的地方继续执行我们的程序,中断处理的事件就是前台系统。% A5 g7 c/ r6 W' s

2 J$ y. Y, @* w; T" R7 e6 g关于操作系统有很多,我这里选择的是UCOSII来进行一个讲解# H6 t% u% y* ~. o2 f

8 Z1 K' M* O1 h9 a9 Y" C- a4 r$ yUCOSII是一个可以基于RAM运行的、可裁剪(这里不是太理解)、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器的实时操作系统(讲求实时性,实时性自己去了解)
1 ~6 `. H2 S7 N/ F- d8 ]$ z. k. j
. N* l% |! C' L" w

& D: \  S' O) R' @) h2 T1.1任务$ t+ L  ?1 Z" B! q7 @8 {9 O/ y  i! _
在操作系统下呢,任务其实就是一个死循环函数,在循环里面调用相关函数,实现一定滴功能,当然了,在操作系统下,一个工程可以有多个任务,我们的UCOSII操作系统呢就对这些任务进行任务调度管理,让这些任务可以并发工作。
7 t1 d( E8 g0 f/ b, @. a8 ^% b
  _) p$ I4 }+ d6 D任务格式如下:
: k% w  W* t2 w* w6 r1 l7 E
5 T: Y5 |" F) f4 h
7d21b3d21b2f4dc493cbfb614eb405cf.png , h* ]3 N! Q- |' N

. j- V- I* n+ l
3 G! D- m/ }( C( |2 b& X3 E4 U2 ^
1.2设置任务优先级0 @0 \" E2 z9 s6 K9 Z0 I/ P2 ?
在操作系统下呢,每个任务都有唯一确定的优先级。优先级高的任务优先获得CPU的使用权,只有当优先级高的任务执行完毕之后呢,我们的高优先级任务才会让出CPU的使用权,从而呢次优先级的任务才能获得CPU的使用权,等所有的任务执行完毕,又重复这一步骤。注意:每个任务都有唯一确定的优先级,不同的任务不能拥有一样的优先级。
  C' ~6 W: O8 i* w7 f0 f2 ^+ r
$ C& e% W! \: P( K% @' R4 I
在程序中我是这样宏定义的  b; j8 x2 s$ @

4 S) }0 W3 `( _; v2 e, q
88cfe948115a4e7eaed248173f2995d6.png # p7 I; {8 B6 ^* Q2 h
- z: ]1 ^' I2 w1 T. l1 j. `
数字代表的是优先级,数字越小代表优先级越高。
9 d& R7 r' L9 ?- L4 }
3 _5 z# F5 y9 ]1 [2 \% M
- ~/ t8 n+ |5 }  }
1.3设置任务堆栈大小2 H" H) {! a: A) J) p) h; I- k

0 q: p9 V4 h4 }! b" ^
f38b1563087f4af3ad04c35de77af8a4.png * O+ k& r4 l  ?/ N8 H/ m

- g2 s4 M" G1 N. h
后面的数字代表的是堆栈大小,如果任务函数的局部变量多,嵌套的层数多,那么相应的我们的堆栈就要设置得大一些。
  Z6 ]* l. V' z9 K, I; p
9 k, X3 w7 s% q6 Y" Z. E/ l3 J

: n7 w# X, i* f. k3 \5 }1.4设置任务堆栈
) m- l* @$ b, i4 I$ e- Z8 k
" W) Z2 C  Z5 E/ c; P0 @- P
0e90525533bb48fd841805528ddcb50c.png , o$ T- i! N# G; A

% ~+ F" `4 m8 f3 U! r' ?4 b2 S
这里注意堆栈字节对齐的问题(特别是使用到串口的printf函数打印时)
& s3 ?6 P- Q" p: T, E- ]% r9 X/ I- @! }$ ^

% ]5 k5 z( U9 H& z1.5初始化UCOSII、创建任务、启动UCOSII" N7 u' m, K0 m

* I/ w# H  D3 X4 u: V
4442e8dec10b4b5baad6506cc18b0828.png ; R4 Q( K) k7 L+ `4 `
  X/ q- g+ P( {1 q2 Q5 D
调用函数OSInit初始化、调用OSTaskCreate来创建任务、调用函数OSStart,启动OS。7 @- C* B. x7 T" Z

4 |" b# ^5 K  X( k: [
到这里呢,一个任务基本的实现步骤就完成了,至于任务里面的功能函数,我就不展示了,你们就自己去移植相应的功能函数过来并加以修改就可以了。
/ @' ^# E- @0 C% Q& M0 u( s
/ d( ^6 j5 q! {- \1 g# H
对UCOSII更详细的说明请移步顶楼相应的链接。接下来我对STM32的学习呢,所有的工程都是基于UCOSII操作系统的。此篇文章第一次发布好,文中有不当的地方还请大佬们加以指正,我会及时修改。! U7 g$ f+ g+ \7 }  M! Q
————————————————: K. `! M% p- b( h" c3 x
版权声明:田同学在深漂2 {* b: M3 |# D7 p
如有侵权请联系删除/ x' ~2 M6 W( u4 I: U3 b! h9 m5 c

2 K6 R9 T4 R4 V3 p4 ]! W( ]9 p4 B, \
赞 收藏 评论0 发布时间:2023-3-21 22:36

举报

0个回答

所属标签

相似技术帖

官网相关资源

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