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

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

[复制链接]
攻城狮Melo 发布时间:2023-3-21 22:36
前言
+ d4 F0 N0 ~# J, M8 }) Y" q这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解,此文最后会附上我自己在UCOSII操作系统下使用STM32写的ESP8266+onenet+http协议的程序链接,可以作为参考,如果文中有不当的地方,还请各位大佬加以中指正,我一定会虚心求教。
  ^/ `0 @+ P7 p& q+ Z

$ T+ S3 B, K2 X& E8 l' J) G1.UCOSII操作系统的简介3 L4 Y( J  Z8 d
前台后台系统9 }" B% g% h6 v6 E( O& B0 ]

" _1 y. M; G6 g; \相信大家都使用过单片机,比如51,STM32,但是我们在使用的时候呢,我们都是在裸机下面写程序(也就是裸奔),也就是说,我们写的程序无非就是在主函数里面加一个死循环,然后再加上中断服务程序。应用程序以无限循环的方式在主函数被调用,调用相应的函数来完成所需要的功能,这个大的循环就叫做后台系统。而中断服务程序就是来处理我们的异常,异常结束后跳出中断服务程序,回到原来进入中断的地方继续执行我们的程序,中断处理的事件就是前台系统。2 `7 H) X0 y, J- r# F1 v# s7 G
* G3 I% Z& ^" z& S' ]
关于操作系统有很多,我这里选择的是UCOSII来进行一个讲解
& h5 R+ \, g( h" i- @# j# g# R! Q

, j. ]3 \' e( L0 D7 KUCOSII是一个可以基于RAM运行的、可裁剪(这里不是太理解)、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器的实时操作系统(讲求实时性,实时性自己去了解); ^) u0 E/ e6 r/ ^2 g7 r
8 [, o  @9 b3 f" h8 Z0 A$ B
  l. |8 R1 |9 u3 ]( ?
1.1任务
2 ~1 ?6 T! ?% U" ?在操作系统下呢,任务其实就是一个死循环函数,在循环里面调用相关函数,实现一定滴功能,当然了,在操作系统下,一个工程可以有多个任务,我们的UCOSII操作系统呢就对这些任务进行任务调度管理,让这些任务可以并发工作。
- @/ }) r# Q# Z) t2 [5 Y. k- m
任务格式如下:* A& O& \& Q/ @6 |3 a
+ g  L3 X# @: J3 Q
7d21b3d21b2f4dc493cbfb614eb405cf.png
6 g0 w7 w% B. _. r+ o& z0 d% }6 Z; a6 e7 s. }- s5 F

3 K! C( ~( n: I4 y% e1.2设置任务优先级
* Y/ w# T, J/ d3 [9 V3 [  j9 V在操作系统下呢,每个任务都有唯一确定的优先级。优先级高的任务优先获得CPU的使用权,只有当优先级高的任务执行完毕之后呢,我们的高优先级任务才会让出CPU的使用权,从而呢次优先级的任务才能获得CPU的使用权,等所有的任务执行完毕,又重复这一步骤。注意:每个任务都有唯一确定的优先级,不同的任务不能拥有一样的优先级。; ~8 C1 m( }) X: L

) I% i: T8 E) X
在程序中我是这样宏定义的
8 T  {& w  F8 `0 k2 z! |
- o- O9 J( s2 m8 v
88cfe948115a4e7eaed248173f2995d6.png " `" y0 B; n5 g2 K5 Q, _
7 W+ t) C) T2 O7 E0 b9 Y$ b' W: J
数字代表的是优先级,数字越小代表优先级越高。
  Q7 s! t# W/ b& U" Z' ^7 t$ d& Q! H- a* P

$ ?0 C! p$ C4 D! Y1 `1.3设置任务堆栈大小  r0 Q6 v! F/ w; P2 K, H
+ }/ i% |6 g, o* Y0 }; w, n
f38b1563087f4af3ad04c35de77af8a4.png . _2 |( [3 y$ j; _

! z: p8 X! b* {5 w
后面的数字代表的是堆栈大小,如果任务函数的局部变量多,嵌套的层数多,那么相应的我们的堆栈就要设置得大一些。( e& O$ Q% m) A2 G
8 [# |. J! Q% O+ |
/ i* p9 D5 g9 R
1.4设置任务堆栈
# K4 {# d8 Z9 C# ]! S( S3 |  x2 v* ]% Z! d
0e90525533bb48fd841805528ddcb50c.png
6 M3 N! \# J0 a+ p' R
2 z1 a; i+ Y/ W
这里注意堆栈字节对齐的问题(特别是使用到串口的printf函数打印时)
4 c' U* \% C7 d, C. N$ o# x. E8 F4 [3 j: O* q" b" @, I- Y
! _3 e5 U9 o  T
1.5初始化UCOSII、创建任务、启动UCOSII
; d2 z  ~% o- M3 g9 k0 O
, ^6 @! ]# O2 i; y5 Z. C
4442e8dec10b4b5baad6506cc18b0828.png 1 ?' r1 Q6 O' v
( t, d& d$ s! J; `0 Q
调用函数OSInit初始化、调用OSTaskCreate来创建任务、调用函数OSStart,启动OS。5 M( w# ]4 \9 H0 q5 O

: V8 I# c- `: _9 p# Y6 H5 H
到这里呢,一个任务基本的实现步骤就完成了,至于任务里面的功能函数,我就不展示了,你们就自己去移植相应的功能函数过来并加以修改就可以了。, t& O' N* @8 `
0 l  k5 k5 j2 |) t* M% m/ k3 {. K& k2 F9 C
对UCOSII更详细的说明请移步顶楼相应的链接。接下来我对STM32的学习呢,所有的工程都是基于UCOSII操作系统的。此篇文章第一次发布好,文中有不当的地方还请大佬们加以指正,我会及时修改。8 X* R9 Z* k$ C& A" q, e
————————————————
5 U0 {9 n! e/ A5 E# k. D版权声明:田同学在深漂
2 }9 {. {& J2 H; B& x如有侵权请联系删除6 V  w5 K7 M/ b) {# b: D. G
1 `6 P+ T* i( z1 k* h9 y

! _+ v: y$ n" m: N  c- f; r3 i
收藏 评论0 发布时间:2023-3-21 22:36

举报

0个回答

所属标签

相似分享

官网相关资源

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