资源描述:
《ucos-ii的移植例子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、两个任务分别控制一个led,位于PB4和PB5.PB4上的led每秒闪一次,PB5上的led每四秒闪一次。#include"lf2407.h"#include"ucos_ii.h"OS_STKMain_TaskStk[64];OS_STKSub_TaskStk[64];voidMain_Task(void*data);voidSub_Task(void*data);voidInitCPU(void){ SCSR1=0x00fd; SCSR2=(SCSR2
2、0x000b)&0x000f;
3、 WDCR=0x00e8; WSGR=0x0040; MCRA=0x0FFF; PBDATDIR=PBDATDIR
4、0x0F000; T2CON=0x0000; GPTCONA=0x0000; T2CNT=0x0000; T2PR=50000; T2CON=0xd340; IMR=0x0000; IFR=0x003f; IMR=0x0004; EVAIFRA=0xFFFF; EVAIFRB=0x
5、FFFF; EVAIFRC=0xFFFF; EVAIMRA=0x0000; EVAIMRB=0x0000; EVAIMRC=0x0000; EVBIFRA=0xFFFF; EVBIFRB=0xFFFF; EVBIFRC=0xFFFF; EVBIMRA=0x0000; EVBIMRB=0x0000; EVBIMRC=0x0000; asm("CLRCINTM");}intmain(void){ InitCPU(); OSInit();
6、 OSTaskCreate(Main_Task,(void*)0,&Main_TaskStk[63],0); OSStart(); return0;}voidMain_Task(void*p_arg){ EnableTick(); OSTaskCreate(Sub_Task,(void*)0,&Sub_TaskStk[63],10); while(1) { PBDATDIR
7、=0x0010; OSTimeDlyH
8、MSM(0,0,0,500); PBDATDIR&=0x0ffef; OSTimeDlyHMSM(0,0,0,500); }}voidSub_Task(void*p_arg){ while(1) { PBDATDIR
9、=0x0020; OSTimeDlyHMSM(0,0,2,0); PBDATDIR&=0x0ffdf; OSTimeDlyH
10、MSM(0,0,2,0); }}ucos-ii的移植及rtos下的应用APIFOR44B0要保证μC/OS-Ⅱ移植到微处理器后能正确运行;处理器需具备如下特性:1)处理器的c编译器支持可重入函数可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。下面的两个例子可以比较可重入型函数和非可重入型函数:程序1:可重入型函数voidsw
11、ap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;程序2:非可重入型函数inttemp;voidswap(int*x,int*y)temp=*x;*x=*y;*y=temp;程序1中使用的是局部变量temp作为变量。通常的C编译器,把局部变量分配在栈中。所以,多次调用同一个函数,可以保证每次的temp互不受影响。而程序2中temp定义的是全局变量,多次调用函数的时候,必然受到影响。代码的可重入性是保证完成多任务的基础,除了在C程序中使用局部变量以外,还需要C编译器的支持。
12、笔者使用的是ARMSDT以及ADS的集成开发环境,均可以生成可重入的代码。2)在程序中可以打开和关闭中断在μC/OS-Ⅱ中,可以通过OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏来控制系统关闭或者打开中断。这需要处理器的支持,在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。3)处理器支持中断,并且能产生定时器中断(uc/