?? renwu guanli.c
字號(hào):
/***************************************************************
* 聲明:
* 本程序只具備演示功能,不能保證適用于您的真實(shí)應(yīng)用。如需使用,請(qǐng)根據(jù)
* 您的實(shí)際需要修改本程序。
*******************************************************************
* 電子科技大學(xué)嵌入式軟件工程中心 版權(quán)所有
*
* Copyright (C) 2006 UESTC ESEC
**************************************************************/
/**************************************************************
* 模塊: init.c
*
* 目的:
* 這個(gè)程序演示基本的任務(wù)管理。程序啟動(dòng)具有兩個(gè)不同優(yōu)先
* 級(jí)的任務(wù),完成任務(wù)的掛起和被喚醒的系列動(dòng)作。
**************************************************************/
/***********************************************************************************************************
* 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 */
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -