📄 test.c
字号:
/*
*********************************************************************************************************
* uC/OS-II 第一次试验成果
* 建立两个任务A,B,并可以被挂起和恢复,并显示被挂起任务的信息
* 2009-3-24
* B06513班9号
* 邵玉广
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */
#define N_TASKS 10 /* Number of identical tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK MyTaskStkA[TASK_STK_SIZE]; //定义自己的任务堆栈
OS_STK MyTaskStkB[TASK_STK_SIZE]; //定义自己的任务堆栈
INT16S key; //设置推出键
INT8U x=0,y=2;
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void MyTaskA(void *data);//定义自己的任务
void MyTaskB(void *data);//定义自己的任务
/*$PAGE*/
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
char *s_MA="I am TaskA!"; //定义要输出的字符
char *s_MB="I am TaskB!"; //定义要输出的字符
void main (void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */
OSInit(); /* Initialize uC/OS-II */
PC_DOSSaveReturn(); /* Save environment to return to DOS */
PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */
PC_DispStr(26, 0, "uC/OS-II", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
OSTaskCreate(MyTaskA,s_MA,&MyTaskStkA[TASK_STK_SIZE-1], 0);
OSTaskCreate(MyTaskB,s_MB,&MyTaskStkB[TASK_STK_SIZE-1], 1);
OSStart(); /* Start multitasking */
}
/*$PAGE*/
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
/********************************************************************************************************
定义自己的任务
*******************************************************************************************************/
void MyTaskA(void *pdata)
{ OS_TCB aa;
char *s,*a;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();
OSStatInit(); /* Initialize uC/OS-II's statistics */
for(;;)
{
if(x>10)
{
x=0;
y+=2;
}
PC_DispStr(x,y,pdata,DISP_BGND_BLACK+DISP_FGND_RED); //为什么第一个 参数不能是 WHITE
x+=11;
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
OSTaskSuspend(1);//挂起任务B
PC_DispStr(30, 8, "Task B is suspended!", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
OSTaskQuery(1,&aa);
sprintf(s,"%d",aa.OSTCBPrio); /* Display CPU usage in %*/
PC_DispStr(30, 10,"Task B's prio:", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr(45, 10, s, DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
}
else
{
OSTaskResume(1);
PC_DispStr(30, 12, "Task B is live!", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
OSTimeDlyHMSM(0,0,5,0); //等待5秒
PC_DOSReturn(); //返回dos
}
}
OSTimeDlyHMSM(0,0,1,0); //等待1秒
}
}
/********************************************************************************************************
定义自己的任务
*******************************************************************************************************/
void MyTaskB(void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();
OSStatInit();
x=15; /* Initialize uC/OS-II's statistics */
for(;;)
{
if(x>10)
{
x=15;
}
PC_DispStr(x,y,pdata,DISP_BGND_BLACK+DISP_FGND_RED); //为什么第一个 参数不能是 WHITE
x+=11;
if(PC_GetKey(&key)==TRUE)
{
if(key==0x0B)
{
PC_DOSReturn(); //返回dos
}
}
OSTimeDlyHMSM(0,0,1,0); //等待1秒
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -