ba_wang_mao 发表于 2009-4-16 08:48:25

学习修改: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)

js001sdx 发表于 2009-6-18 14:35:56

能否分享一下你在PC上的仿真环境!!

ba_wang_mao 发表于 2009-6-22 13:58:00

不存在仿真环境

1、上面的就是源代码
  但是建立的目录结构必须和原作者相同。
2、直接用BORLAND C++3.1 for DOS编译成.exe文件
3、在windows XP 下双击运行

armok 发表于 2010-2-14 21:17:13

页: [1]
查看完整版本: 学习修改:uC/OS-II第1个实例