最简单易懂的UCOS多任务切换例程

上一篇 / 下一篇  2006-08-16 10:22:23 / 天气: 晴朗 / 心情: 高兴 / 个人分类:Backup

#include "config.h"
.ZY3N+^"?8o0EDA中国门户网站:BwF_.W
#define    TaskStkLengh    64            EDA中国门户网站M T 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.q V0OS_EVENT  *TASK3;    EDA中国门户网站N%u^`cCUPN^r

^;f G7gM~M2H"x0void     Task0(void *pdata);            //Task0 ÈÎÎñ0
[i A: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)
0Y j.z:R n[0{  uint16 Fdiv;
;z&xi"Me:Z0
/Avw0T/X)].E0   U0LCR = 0x83;                    EDA中国门户网站4t)UeQka
   Fdiv = (Fpclk / 16) / UART_BPS;  EDA中国门户网站^$LgRU[G
   U0DLM = Fdiv / 256;                            
x&OLQ%HGC e0   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 );        // µÈ´ýÊý¾&Yacute
S[S8ob:D7F0}EDA中国门户网站:FO7l$_;E'v!H

7uk Tn;h"nG0int main (void)
e;}!cr g0{EDA中国门户网站M9deyX n'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 Z v0O0    TASK2=    OSSemCreate(0);  EDA中国门户网站kS-Rdd(Z1~1f1a:K3g b
    TASK3=    OSSemCreate(0);     
L'nX&h!p&^l)m+H0    TargetInit(); EDA中国门户网站6g.s6B;Y5jw
    OSStart ();
Sl njhx-j${0    return 0;                                                            EDA中国门户网站Fq _:jz x!d6? ux
}EDA中国门户网站\6DHVPfF
/*********************************************************************************************************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中国门户网站0o uHf&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`9T WT~&B
        {     
&M,}3F7EL&lVC0              OSSemPend(TASK1,10,&err    EDA中国门户网站HJ?:t$Y5Vig/N
             if(err==OS_NO_ERR)EDA中国门户网站ue*h|P JwZ'{
               {EDA中国门户网站(} KH!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$rqF Ey
EDA中国门户网站2|$m wWh8T
    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中国门户网站[V4GNJ
            EDA中国门户网站8Q&G7m"Y8}p7K!jg_(Mz
               UART0_SendByte(0x02); EDA中国门户网站J'L R_pO3~
            EDA中国门户网站Qs%R0l;uw7t5L
               OSSemPost(TASK3);   EDA中国门户网站0e9f+n c(mGH!F`
EDA中国门户网站 k]+H ?#w9aIbj
             }EDA中国门户网站 ] Fu Y v2t)e
       
7vk*^,hb L0        }EDA中国门户网站/f4kk?T8O~?ib 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
    
gP0yxZ y0        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        }
A2aXK.f0}
mW"yZ`7Y0EDA中国门户网站\$G)fREq
三个任务分别通过UART0输出0X01,0X02,0X03,可以学习理解信号量的基本用法及多任务的调度方法.
0FGLqD8Wz.E0f7P0以上例子基于LPC2200系列ARM.


FPGA/CPLD器件价格查询

TAG: EDA

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 9925
  • 日志数: 96
  • 建立时间: 2006-08-07
  • 更新时间: 2007-06-30

RSS订阅

Open Toolbar