学习修改:uC/OS-II第1个实例
/**********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* EXAMPLE #1
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#defineTASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */
#define PrioTask0 0 // 任务0的优先级号
#define PrioTask1 1 // 任务1的优先级号
#define PrioTask2 2 // 任务2的优先级号
OS_STK Task0Stk; /* Tasks stacks */
OS_STK Task1Stk; /* Tasks stacks */
OS_STK Task2Stk; /* Tasks stacks */
voidTask0(void *pdata);
voidTask1(void *pdata);
voidTask2(void *pdata);
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
voidTask0(void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SRcpu_sr;
#endif
INT16S key;
pdata = pdata; /* Prevent compiler warning */
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();
OSTaskCreate(Task1, (void *)0, &Task1Stk, PrioTask1);
OSTaskCreate(Task2, (void *)0, &Task2Stk, PrioTask2);
while (1)
{
if (PC_GetKey(&key) == TRUE)
{
if (key == 0x1B) // 按ESC键,返回到DOS
{
PC_DOSReturn(); /* Return to DOS */
}
}
printf("TASK 0\n");
OSTimeDlyHMSM(0, 0, 1, 0); // 1秒运行1次
}
}
voidTask1(void *pdata)
{
pdata = pdata; /* Prevent compiler warning */
while (1)
{
printf("TASK 1\n");
OSTimeDlyHMSM(0, 0, 2, 0); // 2秒运行1次
}
}
voidTask2 (void *pdata)
{
pdata = pdata; /* Prevent compiler warning */
while (1)
{
printf("TASK 2\n");
OSTimeDlyHMSM(0, 0, 5, 0); // 5秒运行1次
}
}
voidmain (void)
{
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 */
OSTaskCreate(Task0, (void *)0, &Task0Stk, PrioTask0);
OSStart(); /* Start multitasking */
}
以下是运行结果:
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_436781.JPG
(原文件名:多任务-未命名.JPG) 能否分享一下你在PC上的仿真环境!! 不存在仿真环境
1、上面的就是源代码
但是建立的目录结构必须和原作者相同。
2、直接用BORLAND C++3.1 for DOS编译成.exe文件
3、在windows XP 下双击运行
页:
[1]