最简单易懂的UCOS多任务切换例程
上一篇 /
下一篇 2006-08-16 10:22:23 / 天气: 晴朗
/ 心情: 高兴
/ 个人分类:Backup
#include "config.h"
.ZY3N+^"?8o0EDA中国门户网站:BwF_.W
#define TaskStkLengh 64 EDA中国门户网站MT vy @v
OS_STK TaskStk [TaskStkLengh];
(H8nN:I&A"`0OS_STK TaskStk1 [TaskStkLengh];
,Xi,jR
^'U8lA:M0OS_STK TaskStk2 [TaskStkLengh];EDA中国门户网站8ui o"IR+yu
N)u/r ?:Fb0OS_EVENT *TASK1; EDA中国门户网站0`+L^T9H:jtN
OS_EVENT *TASK2;
Ul v#M6]Og.qV0OS_EVENT *TASK3; EDA中国门户网站 N%u^`cCUPN^r
^;f G7gM~M2H"x0void Task0(void *pdata); //Task0 ÈÎÎñ0
[ iA:ho%J:K0void Task1(void *pdata);
#R0U.C'_
~ z0void Task2(void *pdata);
o"]!eW;lnP0
4LQwT7V0uint8 err;EDA中国门户网站ZQGd#v/S
void UART0_Ini(void)
0Yj.z:Rn[0{ uint16 Fdiv;
;z&xi"Me:Z0
/Avw0T/X)].E0 U0LCR = 0x83; EDA中国门户网站4t)UeQka
Fdiv = (Fpclk / 16) / UART_BPS; EDA中国门户网站^$Lg RU[G
U0DLM = Fdiv / 256;
x&OLQ%HGCe0 U0DLL = Fdiv % 256;
T&o*e$Sd n+m1bM0 U0LCR = 0x03;EDA中国门户网站3[C7f.t;z
} EDA中国门户网站y(^0?p1vg'w V5N
Oj
void UART0_SendByte(uint8 data)EDA中国门户网站e1{6Df
bifzS4q%Q
{ U0THR = data; // ·¢ËÍÊý¾Ý
fM+^SHZ%@.{0EDA中国门户网站
A^-uy%_k
while( (U0LSR&0x40)==0 ); // µÈ´ýÊý¾Ý
S[S8ob:D7F0}EDA中国门户网站:FO7l$_;E'v!H
7uk
Tn;h"nG0int main (void)
e;}!crg0{EDA中国门户网站M9deyXn'C5N+O
OSInit EDA中国门户网站 t#lE@/M
(); EDA中国门户网站$LvE5C*F[p9|
OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 0); EDA中国门户网站&S8{8a]0@9dH8h
TASK1= OSSemCreate(0);
}g^"F
Zv0O0 TASK2= OSSemCreate(0); EDA中国门户网站kS-Rdd(Z1~1f1a:K3gb
TASK3= OSSemCreate(0);
L'nX&h!p&^l)m+H0 TargetInit(); EDA中国门户网站6g.s6B;Y5jw
OSStart ();
Sl njhx-j${0 return 0; EDA中国门户网站Fq _:j z
x!d6?ux
}EDA中国门户网站\6DH VPfF
/*********************************************************************************************************EDA中国门户网站ptgwL+bP Zi-t
** Task0 ÈÎÎñ0EDA中国门户网站 D_yU U7@
********************************************************************************************************/
7dY(DC(S`)Q:b0
)npwN%Jj.c%`7U0 void Task0 (void *pdata)
ary*e)_E/i)GX AO0{
r j1Ut4[9N0 UART0_Ini();EDA中国门户网站0ouHf&Oo;Ap4AP+Na
OSTaskCreate(Task1, (void *)0, &TaskStk1[TaskStkLengh-1], 9); EDA中国门户网站v k,f"\7Lj
OSTaskCreate(Task2, (void *)0, &TaskStk2[TaskStkLengh-1], 10);
,r
Tf#Ve0 OSSemPost(TASK1);
T)C
Oz3P!b!I.Dkc0 for (;;)EDA中国门户网站HP7`9TWT ~&B
{
&M,}3F7EL&lVC0 OSSemPend(TASK1,10,&err EDA中国门户网站HJ?:t$Y5Vig/N
if(err==OS_NO_ERR)EDA中国门户网站ue*h|P JwZ'{
{EDA中国门户网站(} K H!j
y j#^2o
M
EDA中国门户网站b6KN U
Lu"w Qy2}:]x
UART0_SendByte(0x01); EDA中国门户网站7Jp
_[3zC&C5@
OSSemPost(TASK2);EDA中国门户网站W
@,^c;~g&Z9PW
}EDA中国门户网站UH2M,VvNS)P,r
0{r+crt5wP0 }EDA中国门户网站tk } hS!P-M@ J
}EDA中国门户网站2\O9oGq/^2qo
/*********************************************************************************************************
0O+C3RaRk
N0** Task1 ÈÎÎñ1
k'q!Goj8a:f!x0********************************************************************************************************/EDA中国门户网站g#C
@TCG
i,Y
EDA中国门户网站+MJ!Eu$rqFEy
EDA中国门户网站2|$mwWh8T
void Task1 (void *pdata)
2Qrf!~,sH1v5]J'}0{EDA中国门户网站#ol_SP}
3`E(VEA){0 UART0_Ini();
6_c~Q\G5Us0 for (;;)
iR
P7g-`6\p,@0 {EDA中国门户网站7\#k2D_ M7J;@
OSSemPend(TASK2,10,&err);
)uQ8o!^d)H|.N0 if(err==OS_NO_ERR)EDA中国门户网站ABV1Gg
~2E0i
{ EDA中国门户网站[V4GN J
EDA中国门户网站8Q&G7m"Y8}p7K!jg_(Mz
UART0_SendByte(0x02); EDA中国门户网站 J'LR_pO3~
EDA中国门户网站Qs%R0l;uw7t5L
OSSemPost(TASK3); EDA中国门户网站0e9f+nc(mGH!F`
EDA中国门户网站k]+H ?#w9aIbj
}EDA中国门户网站 ]FuY v2t)e
7vk*^,hb L0 }EDA中国门户网站/f4kk?T8O~?i b
Y
}
eQ&l:N8w0
r
Od*_5nh,GtYl0
[0L0\,C^&`
E+I*y1P0 void Task2 (void *pdata)
U"M%KP-\ ?9T8hv&U K0{EDA中国门户网站K6A$z+z ^0ht
gP0yxZy0 UART0_Ini();EDA中国门户网站WukrP+~G
for (;;)EDA中国门户网站7Q{ xvi^
{EDA中国门户网站J-P'F7J2KD)~Ofp
OSSemPend(TASK3,10,&err);//»& EDA中国门户网站\*yg#a3~L{)J
if(err==OS_NO_ERR)
8{9`Q5V!A7M6A0 {
[f,^2]
er0
+]5A&^:F.V#^v0 UART0_SendByte(0x03); EDA中国门户网站K
`n;Y w2Y7c
1L:]2~QvW*p-lvU0 OSSemPost(TASK1);
+PXb1vl0 }
(]
J.U3L#YF
_Y7a2M h:L0
p#l3wE)o9X;Sbo0 }
A2a XK.f0}
mW"yZ`7Y0EDA中国门户网站 \$G)fREq
三个任务分别通过UART0输出0X01,0X02,0X03,可以学习理解信号量的基本用法及多任务的调度方法.
0FGLqD8Wz.E0f7P0以上例子基于LPC2200系列ARM.
导入论坛
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
EDA