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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

6 }0 H- g- L5 ?- m+ {+ m: V摘要:研究嵌入式实时操作系统μC/OS-1在51微控制器上的移植,提出μc/OS-II任务8 `3 J. \+ X  ?. O
的编写规范以及注意事项。对μc/OS-II的移植具有普遍的指导意义,并为51平台的) q3 x  ^8 R/ a' A* p) S3 N9 ~
更高层次的开发和拓展打下了基础。
5 a7 P: b/ _8 l7 c. y1 x* {6 g5 f# `& W8 ~7 @0 U: r
关键词: μc/OS-II; 51单片机;移植  D- n0 z# H' d/ l! Y

  {; p- S, T* \% @0引言8 M6 E; g* _) d( G, C% F) P- ?
随着现代计算机技术的飞速发展,嵌人式系统扮
) W# M0 u! w+ O! ~5 Y0 N- @演了越来越重要的角色,嵌人式系统设计日趋复杂,
- r9 n- E% B4 u6 Y嵌人式操作系统变得必不可少。嵌人式操作系统uc/! ?8 G, f0 n6 X$ s
OS- -II凭借其源代码公开.结构小巧、内核可剥夺、实
* q, g5 A, P% `  j0 {- r0 X时性高等诸多特性使它成为实时性要求很高的情况) t+ q! m9 c9 [
下嵌人式操作系统的重要选择之一。
0 O6 C" i8 B# t" c$ O8 E0 h! e. ?1 uc/OS- -l1的移植
4 {9 U8 b. w' p" o/ b& Z' W1.1头文件处理
. x5 x- m' T) J5 \% n1 U- }uc/0S-II要求所有的C源文件都要包含头文件
6 \# F7 F; H% C7 W4 h( JIncludes.h。而在本文中另外增加一个头文件us-- n. R1 W# c' _. G" O2 d5 H
er_ .configer.h, 要求在所有用户的程序中都必须包含. ~$ p9 h8 a; m% h+ a& U3 g7 R3 x5 R
user_ configer.h, 在user_ .configer.h 中包含Includes.h0 C2 a! O: s4 H# l
和特定应用的头文件和设置项,而在uc/0S-II的系+ s+ ^$ Z# o* I# Z" K
统文件中,只包含INCLUDES.H。所有有关应用的设
5 A0 @8 T* t) x8 Z+ Y置改变都在user_ configer.h 中进行,Includes.h定下来1 ]( f" X& y- w
后就不必改动。这样做不仅大大减少了在编译过程中
% h- }6 ^6 f; |+ N4 [' j9 w* Buc/OS-II的系统文件的编译次数;缩短编译时间,而
% L9 [, ?" T9 E2 k且用户更改应用程序时不必改动uc/0S-II的系统文.
: h( o$ b- x; z" U件。5 ~3 m; _" N4 h; v
1.2 OS_ _CPU.H文件
) h9 A. h, u2 ^, f6 I' S8 u由于C语言中的short、int等数据类型依赖于处! Q2 U2 K# e3 p0 Z7 L" x
理器,为了方便,一般在μc/0S _II内核中不直接使用- @! e# M% [  F" R. c* R
它们,以免产生错误隐患,而用移植性强的、不依赖于
- g$ N% R% R( E6 s- {' a) r0 n- Z- p处理器的数据类型代替。堆栈都是按字节操作的,故9 ?' j& Z  Q; w, b4 z$ K
数据类型0S_STK声明为8位。方向从低地址向高地: f1 p* n$ D' W: S
址方向递增,所以0S_ _STK _GROWTH设置为0。在本& k3 ]  D1 }4 K6 U

. t1 \* t$ G( p" j文中把0S_ ENTER CRITICAL 0和0S_ EXIT_ CRITI-" h  m6 [4 G# h7 A7 a
CAL0定义为DisableINT0和EnableINTO,具体实现在& T, Y5 C: t: Y4 L7 C
OS_ CPU_ C.C文件中。由于51没有软中断故直接定6 z) N3 E7 l* y: I2 Y8 `
义OS_ TASK SW0宏为函数0SCxSw0。
6 }8 b. M' R+ P9 L% j( j2 q1.3 OS_ _CPU_ _C.C文件
, ?, T* W' J6 W+ v移植μc/OS- -I1需要在0S_ _CPU_ _C.C中实现几个
; q6 L9 `+ B3 F' S) |重要的函数,其中OSTaskStkInit0用来初始化任务的3 d& o% k) V# q3 B0 V" d
堆栈。堆的大小可根据任务的实际情况自行确定。5' _( c' H. {. Y. `% r1 Y
个系统钩子函数可直接定义它们为空函数。μc/OS -II .
/ g& |1 A+ e# ?$ p( l) Q3 `- l1 i8 ~要求用户提供一个周期性的时钟源,来实现时间的延
+ l0 k* t+ M; K) |6 G( p时和超时功能。时钟节拍应该每秒发生10-100次。为
4 I# F+ |' d- m* H: z了完成该任务,本设计使用51的定时器0来提供时& K( n6 N& Z1 K3 Y9 [! B
钟节拍,因此OS_CPU_C.C文件中还包括定时器0的. j9 [9 O5 @" P- C6 W5 |* `+ l
初始化函数。DisableINT0 、EnableINT0函数也在这个% E4 o# B- C" c! ^3 w/ O& c5 {
文件中实现。! J$ P1 X* n* I& A0 g0 V4 d# G
void *0STaskStkInit (void (*task)void *pd), void *ppda-1 z* m3 ?' b4 L) R# j' H9 ?
ta, void *ptos, INT16U opl) reentrant) \7 `4 B. V" w+ S) Z
INT8 i;3 s4 m+ F, l: b' R" S8 I2 d$ C$ m% L
OS_ STK *stk;
  X" b7 p& v* {; T2 ]  G% xppdata=ppdata;I1ppdata没被用到保留此语句防* h- a; w5 h3 W/ H3 Q/ H
止告警产生- a1 Y- C/ v: f  L: C# C: ]
opt = opt; /opt 没被用到保留此语句防止告警产生5 g% G, h6 q4 S: \* M
*stk= (OS_ STK *)ptos; /用户堆栈最低有效地址
6 W9 X4 W  l4 Q* `% y*atk++= 15; .
- I" D5 E3 X  s. f4 p2 B//用户堆栈长度; _! Q4 P! z3 W" Q: k" g
*stk++ = (INT16U)task & 0xFF; //任 务地址低8位" s$ j  J8 j4 ?) O4 Y0 z7 B
*stk++ = (INT16U)task >> 8;
5 H# |7 C' [, z! x: B//任务地址高8位" t; `% S/ Y$ ]2 A4 u' R
for(i=0;i<13;++)
8 m" B6 X4 M% k7 H*stk ++ = .0x00;7 W! M/ e$ W3 ]+ F% Y( w
//PSW, ACC, B, DPL,
; u, R- q7 F: X1 y' L
* d/ y3 d4 `$ T) B1 z
: j$ l, ]7 Q( W& l' E" _, `( y$ I3 Z! P5 a* x- j9 c# ~6 G
附件下载:
游客,如果您要查看本帖隐藏内容请回复

" N# H* @' b8 z! m- D% w; j9 t
1 Q$ }: O: `+ L$ z; h

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-2 08:45 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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