找回密码
 注册
关于网站域名变更的通知
查看: 423|回复: 1
打印 上一主题 下一主题

[毕业设计] μc/OS- -II在51单片机上的移植

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-16 12:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
2 c5 ]0 d+ s& X6 K/ s) o3 P
摘要:研究嵌入式实时操作系统μC/OS-1在51微控制器上的移植,提出μc/OS-II任务
* ]; o" |. g$ P# J1 c的编写规范以及注意事项。对μc/OS-II的移植具有普遍的指导意义,并为51平台的
0 R0 \# W/ V5 H# e, }/ p更高层次的开发和拓展打下了基础。; U) G; |$ n0 y' }8 d( M% U

9 t1 v; a6 T9 H4 d) {9 ^  g关键词: μc/OS-II; 51单片机;移植
% r" W6 o2 d' O& K9 a
& h6 w$ o9 m+ V' g& N& z6 e0引言- V0 {4 x8 a/ k: ~- i
随着现代计算机技术的飞速发展,嵌人式系统扮
  ~! V. ?0 o1 M, @& S& @, J演了越来越重要的角色,嵌人式系统设计日趋复杂,
8 _7 F* Z8 r5 {' Y" z/ I  S嵌人式操作系统变得必不可少。嵌人式操作系统uc/
9 }0 t, N7 b- x% E& U) ?( ROS- -II凭借其源代码公开.结构小巧、内核可剥夺、实
. f5 X! C8 z6 K8 ~* B3 v" }. @& d时性高等诸多特性使它成为实时性要求很高的情况
4 O. m! v# o3 c8 D8 z; w" t下嵌人式操作系统的重要选择之一。1 L, R9 v8 p0 j* G
1 uc/OS- -l1的移植: t: A  f8 z( _
1.1头文件处理
9 v' v2 G1 j( h* o+ guc/0S-II要求所有的C源文件都要包含头文件
% U1 v  N) d2 m. h" [" XIncludes.h。而在本文中另外增加一个头文件us-. w7 a6 Z% }3 _: \" r6 t
er_ .configer.h, 要求在所有用户的程序中都必须包含7 Q3 H9 \4 Y) [4 s7 u6 g
user_ configer.h, 在user_ .configer.h 中包含Includes.h8 ]: j+ R- T$ J% D! }+ y& l2 _( V8 ~
和特定应用的头文件和设置项,而在uc/0S-II的系' \. h* a( h9 f! _" p3 I
统文件中,只包含INCLUDES.H。所有有关应用的设1 u+ S) h9 i% e2 H9 p5 C, `" U
置改变都在user_ configer.h 中进行,Includes.h定下来
6 k8 b. V$ r6 D后就不必改动。这样做不仅大大减少了在编译过程中  @- t2 r7 l& |0 k
uc/OS-II的系统文件的编译次数;缩短编译时间,而3 O4 c& b' r, d0 v
且用户更改应用程序时不必改动uc/0S-II的系统文., D0 Y2 P' [( B: ~
件。1 I6 `2 U+ ?0 l' v
1.2 OS_ _CPU.H文件
/ j# Q8 P! T& M7 W" t! v由于C语言中的short、int等数据类型依赖于处5 l; ^+ }: m8 ?; T2 ?% W
理器,为了方便,一般在μc/0S _II内核中不直接使用& B6 o! M  M& a. ~) a
它们,以免产生错误隐患,而用移植性强的、不依赖于
$ k" ~( f2 g- P处理器的数据类型代替。堆栈都是按字节操作的,故
3 {  u% j# S5 K- ?9 a& l  c& x数据类型0S_STK声明为8位。方向从低地址向高地/ ?" Q' V' x2 i( [- w$ W
址方向递增,所以0S_ _STK _GROWTH设置为0。在本" B# ^. k' ?$ ~6 t% C

# s3 h7 g- n, X4 M( F8 O9 N文中把0S_ ENTER CRITICAL 0和0S_ EXIT_ CRITI-% V9 q( B  [  C. X# ~9 j! L/ F: K
CAL0定义为DisableINT0和EnableINTO,具体实现在2 V5 _, [9 z/ t1 a* n
OS_ CPU_ C.C文件中。由于51没有软中断故直接定
) [: i2 @- I) `4 _! O$ P/ e义OS_ TASK SW0宏为函数0SCxSw0。
6 v# E- Q- |. S0 a, J1.3 OS_ _CPU_ _C.C文件, s- w3 i9 F( m: a: T
移植μc/OS- -I1需要在0S_ _CPU_ _C.C中实现几个
7 S! r& U% f6 O. A! _$ Y重要的函数,其中OSTaskStkInit0用来初始化任务的/ I. n, l/ h1 p! j: c
堆栈。堆的大小可根据任务的实际情况自行确定。5; m( P4 r2 m5 G9 A# [; E' P
个系统钩子函数可直接定义它们为空函数。μc/OS -II .
  E% ?+ M, @6 S' O- L要求用户提供一个周期性的时钟源,来实现时间的延! Z* @$ _$ U/ `+ w+ o) g- _/ _
时和超时功能。时钟节拍应该每秒发生10-100次。为
3 G. [8 I6 R3 `9 J. i了完成该任务,本设计使用51的定时器0来提供时
+ n; X2 R' }- _1 v: C/ d& N钟节拍,因此OS_CPU_C.C文件中还包括定时器0的
$ p/ o/ w4 a7 p7 J6 p: o% N初始化函数。DisableINT0 、EnableINT0函数也在这个. X0 Q$ X: ]9 n5 Z
文件中实现。
0 X+ k9 H. k( K6 {# Zvoid *0STaskStkInit (void (*task)void *pd), void *ppda-
+ c& d  B( P; K$ e5 w2 ita, void *ptos, INT16U opl) reentrant
2 Q4 \- C) K1 O# B" i. f+ uINT8 i;; P% v! b! D3 v+ T, E$ h& P1 _
OS_ STK *stk;
% c. @% b! H( a/ Appdata=ppdata;I1ppdata没被用到保留此语句防
  x4 l, V4 c2 }止告警产生
5 L2 Q- V9 k6 e( qopt = opt; /opt 没被用到保留此语句防止告警产生8 w6 j2 r) Q/ u: R( j3 r6 a1 `
*stk= (OS_ STK *)ptos; /用户堆栈最低有效地址
& P' i1 m! y* T*atk++= 15; .2 u  ]1 I+ E+ H. I
//用户堆栈长度' c  L8 p, o9 _- {  t7 c; N
*stk++ = (INT16U)task & 0xFF; //任 务地址低8位& N# [- I; p9 {6 x, P0 ]
*stk++ = (INT16U)task >> 8;" F: I  ^& m# K/ g3 g! i8 }0 S6 I/ j
//任务地址高8位
. Q, v4 z( s3 P7 s8 _' E; M* Ufor(i=0;i<13;++)
% I+ K8 u1 L0 u, j7 m  l5 ?*stk ++ = .0x00;
, j$ B- I9 N. q//PSW, ACC, B, DPL,
& u: J+ W; X+ `0 Q3 U7 V3 j# M1 ?" s! u

  v, r, u3 j( _5 t7 g/ v  z7 m6 _) P4 u! G3 H9 `, d1 v
附件下载:
游客,如果您要查看本帖隐藏内容请回复
1 u4 T+ Q% c# z- Q; t  G

1 ]: X; s3 b4 Z. P" E

该用户从未签到

2#
发表于 2020-3-16 13:41 | 只看该作者
嵌人式操作系统结构小巧、内核可剥夺、实时性高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-21 18:49 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表