⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taskmanagement.c

📁 运行在ucos下的实验用例程序
💻 C
字号:
/***************************************************************
 * 声明:
 *  本程序只具备演示功能,不能保证适用于您的真实应用。如需使用,请根据
 * 您的实际需要修改本程序。
 *******************************************************************
 *                      电子科技大学嵌入式软件工程中心 版权所有
 *
 *                  Copyright (C) 2006 UESTC ESEC
 **************************************************************/

/**************************************************************
 * 模块: init.c
 *
 * 目的:
 *      这个程序演示基本的任务管理。程序启动具有两个不同优先
 *      级的任务,完成任务的挂起和被唤醒的系列动作。
 **************************************************************/
/***********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*
************************************************************************************************************
*/

#include <stdio.h>
#include "/host/ide/workspace/ucos/src/includes.h"

/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

#define  TASK_STK_SIZE                 512       /* Size of each task's stacks (# of WORDs)            */
#define  N_TASKS                        2        /* Number of identical tasks                          */

/*
*********************************************************************************************************
*                                               VARIABLES
*********************************************************************************************************
*/

OS_STK        TaskStk[N_TASKS][TASK_STK_SIZE];        /* Tasks stacks                                  */
OS_STK        TaskStartStk[TASK_STK_SIZE];            /* TaskStart  task stack                         */
INT8U         TaskData[N_TASKS];                      /* Parameters to pass to each task               */

/*
*********************************************************************************************************
*                                           FUNCTION PROTOTYPES
*********************************************************************************************************
*/
		 void  Task0(void *pdata);                      /* Function prototypes of tasks                  */
		 void  Task1(void *pdata);
		 void  TaskStart(void *pdata);                  /* Function prototypes of Startup task           */
static   void  TaskStartCreateTasks(void);              /* Function prototypes of creat task             */

/*
*********************************************************************************************************
*                                                MAIN
*********************************************************************************************************
*/

extern void main(void);

/*
 *
 * *********************************************************************************************************
 *
 */

void boot_card()
{
	ucBsp_init();                              /* Initializa ucBsp                          */

    main();
}

extern void OSCpuInit();

extern void OS_Sched(void);
INT32U count=0;                                 /* Initialize count                         */
void  main (void)
{
	INT8U err;

	OSCpuInit();                                /* Install uC/OS-II's context switch vector  */
    OSInit();                                   /* Initialize uC/OS-II                       */

    printk("Welcome to ucos-II\n");
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);

    OSStart();                                  /* Start multitasking                        */
}

/*
*********************************************************************************************************
*                                              STARTUP TASK
*********************************************************************************************************
*/

void  TaskStart (void *pdata)
{

   #if OS_CRITICAL_METHOD == 3                             /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
   #endif

  pdata = pdata;                                           /* Prevent compiler warning                 */

    ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);   /* Install uC/OS-II's clock tick ISR    */
	ucos_timer_init();                                         /*Reprogram tick rate                   */

   TaskStartCreateTasks();                                 /* Create all the application tasks         */

   OSTaskSuspend(OS_PRIO_SELF);                            /*Suspend the TaskStart                     */
}

/*
***************************************************************************************************************
*                                             CREATE TASKS
***************************************************************************************************************
*/

void  TaskStartCreateTasks (void)
{
     INT8U  i;

	 for (i = 0; i < N_TASKS; i++)                      /* Create tasks                                  */
	 {
		  TaskData[i] =  i;                             /* Each task will display its own information    */
	 }
		OSTaskCreate(Task0, (void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE - 1], 5);
		OSTaskCreate(Task1, (void *)&TaskData[1], &TaskStk[1][TASK_STK_SIZE - 1], 6);
}

/*
*********************************************************************************************************
*                                               TASK #0
*
* Description: This task is suspended by itself,then it will be resumed by other tasks.
*********************************************************************************************************
*/

void  Task0 (void *pdata)
{
	  INT8U i;
	  INT8U err;
 	i=*(int *)pdata;
	for (;;)
	{
	 printk("==============================================================================\n");
	 printk("************************************************************\n");
	 printk("        The application tasks switch counts:%d        \n",++count);
	 printk("                 task0 is   running.                  \n");
	 printk("                 task1 is   suspended.                 \n");
	 err=OSTaskSuspend(5);                                                    /* suspend itself           */
	}
}

/*
*********************************************************************************************************
*                                               TASK #1
*
* Description: This task resume task0
*********************************************************************************************************
*/

void  Task1 (void *pdata)
{
	 INT8U i;
     INT8U err;
	 i=*(int *)pdata;
	 for (;;)
	 {
     OSTimeDly(150);
	 printk("************************************************************\n");
	 printk("        The application tasks switch counts:%d        \n",++count);
	 printk("                 task0 is   suspended.                  \n");
	 printk("                 task1 is   running.                  \n");
	 printk("==============================================================================\n");
	 printk("\n\n");
     OSTimeDly(150);
	 err=OSTaskResume(5);                                                       /* resume task0           */
	 }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -