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

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

[复制链接]
攻城狮Melo 发布时间:2023-3-21 22:36
前言% `3 D! a+ _. [8 }. Z
这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解,此文最后会附上我自己在UCOSII操作系统下使用STM32写的ESP8266+onenet+http协议的程序链接,可以作为参考,如果文中有不当的地方,还请各位大佬加以中指正,我一定会虚心求教。
% ]( V) h0 l7 z% T7 U# D# e) ?
# @/ m3 E; h6 h# f- Q4 [
1.UCOSII操作系统的简介
- _1 p! r7 f0 T, N" `前台后台系统2 s+ a0 @5 D: ^. r1 a
# {+ V  P7 S& D) `3 x$ W
相信大家都使用过单片机,比如51,STM32,但是我们在使用的时候呢,我们都是在裸机下面写程序(也就是裸奔),也就是说,我们写的程序无非就是在主函数里面加一个死循环,然后再加上中断服务程序。应用程序以无限循环的方式在主函数被调用,调用相应的函数来完成所需要的功能,这个大的循环就叫做后台系统。而中断服务程序就是来处理我们的异常,异常结束后跳出中断服务程序,回到原来进入中断的地方继续执行我们的程序,中断处理的事件就是前台系统。
$ ?" \6 G5 D% C7 H$ R$ X+ U
/ V* z0 f% d# Y: L; m* a关于操作系统有很多,我这里选择的是UCOSII来进行一个讲解6 Z  f7 ^$ F# y- A( F; ?  b9 y
& `* ^. {- I8 {3 k8 }/ o& y/ \
UCOSII是一个可以基于RAM运行的、可裁剪(这里不是太理解)、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器的实时操作系统(讲求实时性,实时性自己去了解)
" Q- V; B; X8 V2 @! X5 O6 L' o8 }, I3 V' R# l0 X
1 m$ h* |( |8 }8 v( E
1.1任务; O. p* k) D9 N" E, ]2 A& L
在操作系统下呢,任务其实就是一个死循环函数,在循环里面调用相关函数,实现一定滴功能,当然了,在操作系统下,一个工程可以有多个任务,我们的UCOSII操作系统呢就对这些任务进行任务调度管理,让这些任务可以并发工作。' A  ^+ V7 [* H6 J6 V, C2 z+ b

. J7 T* o9 [! J4 S4 t4 e( ]1 o6 F: K任务格式如下:" Z+ w7 C7 G' M" S7 Y

! E4 b! H- D  M2 e$ i! h: i: C' N
7d21b3d21b2f4dc493cbfb614eb405cf.png
" l  x: y: _  J) h  X8 |2 Y! p- K! T8 J9 n

: a' K2 _- K$ e/ H1.2设置任务优先级
( ?1 S1 V8 a, ^# r  ]在操作系统下呢,每个任务都有唯一确定的优先级。优先级高的任务优先获得CPU的使用权,只有当优先级高的任务执行完毕之后呢,我们的高优先级任务才会让出CPU的使用权,从而呢次优先级的任务才能获得CPU的使用权,等所有的任务执行完毕,又重复这一步骤。注意:每个任务都有唯一确定的优先级,不同的任务不能拥有一样的优先级。2 ^4 W1 J; O' R& M- X

/ D! Z. M) ~7 e
在程序中我是这样宏定义的
! K# Q# o. Z4 N1 A' c
8 f& ?. F# d6 T( E& y6 T+ h
88cfe948115a4e7eaed248173f2995d6.png
' g9 B! g& N9 o+ ]9 x+ Y/ u7 z2 I% f( N
数字代表的是优先级,数字越小代表优先级越高。
4 |1 }0 {. V# m1 a6 A- F% c+ \2 ?4 M2 j) J
0 q' u7 t) c9 P! s
1.3设置任务堆栈大小+ ?) M* A+ p8 o2 U7 ^' C, |0 ]/ Y  \
5 z5 e/ Y; |& O5 b
f38b1563087f4af3ad04c35de77af8a4.png
$ k1 Z4 s  W' o. L7 R
/ r. i- [+ {8 m4 p. i
后面的数字代表的是堆栈大小,如果任务函数的局部变量多,嵌套的层数多,那么相应的我们的堆栈就要设置得大一些。# l1 S* _; }% P( E( X) u% F+ f9 {
. r. Y4 r9 K! j4 K, b
2 E- K0 i7 q( `# {8 P/ Z7 z- U2 E8 I% K
1.4设置任务堆栈9 _8 o# j$ H9 l2 z

# Z2 G# {6 N* e
0e90525533bb48fd841805528ddcb50c.png
. B' J0 g, n" g% j- T& ~) k' U: `3 y4 J
这里注意堆栈字节对齐的问题(特别是使用到串口的printf函数打印时)
8 q5 R4 W: N. b2 a# L( q8 n& A* s

9 r* m* P; T/ [# `: v& `2 @1.5初始化UCOSII、创建任务、启动UCOSII
* v  w% v: d1 a8 r/ U2 t. c/ M9 |8 @  v
4442e8dec10b4b5baad6506cc18b0828.png
6 r3 D9 K& A4 f# X9 i. F, H6 T% V( B1 J% y4 K
调用函数OSInit初始化、调用OSTaskCreate来创建任务、调用函数OSStart,启动OS。
- F0 V7 |3 \( P, T7 a0 ~! q
8 [: H2 j8 C5 X5 ~& t9 |
到这里呢,一个任务基本的实现步骤就完成了,至于任务里面的功能函数,我就不展示了,你们就自己去移植相应的功能函数过来并加以修改就可以了。
, _. d# [( k: G! D; f+ z) M8 f5 ~
3 T3 W0 i) y" t+ w9 P4 y; P: S
对UCOSII更详细的说明请移步顶楼相应的链接。接下来我对STM32的学习呢,所有的工程都是基于UCOSII操作系统的。此篇文章第一次发布好,文中有不当的地方还请大佬们加以指正,我会及时修改。* p1 {# q3 k& f3 e
————————————————5 l6 I7 N( f2 Q) M& m
版权声明:田同学在深漂6 m" Z* w) ~3 P4 ]( y8 C" Z' ~' m
如有侵权请联系删除" C! s/ y/ O* ?, e; r

! r% e7 r3 t: l- I. {) F
. |, L1 b: [" o9 K  ?; m! Z
收藏 评论0 发布时间:2023-3-21 22:36

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版