📄 clockinterrupt.c
字号:
/***************************************************************
* 声明:
* 本程序只具备演示功能,不能保证适用于您的真实应用。如需使用,请根据
* 您的实际需要修改本程序。
*******************************************************************
* 电子科技大学嵌入式软件工程中心 版权所有
*
* Copyright (C) 2006 UESTC ESEC
**************************************************************/
/**************************************************************
* 模块: init.c
*
* 目的:
* 这个程序演示嵌入式实时操作系统μC/OS中中断的使用情况。
**************************************************************/
/**********************************************************************************************************
* 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 TASK_START_ID 0 /* Application tasks IDs */
#define TASK_START_PRIO 10 /* Application tasks priorities */
#define TASK_1_PRIO 12
#define TASK_2_PRIO 13
#define TASK_3_PRIO 14
#define N_TASKS 5 /* Number of tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK TaskStartStk[TASK_STK_SIZE]; /* Startup task stack */
OS_STK Task1Stk[TASK_STK_SIZE]; /* Task #1 task stack */
OS_STK Task2Stk[TASK_STK_SIZE]; /* Task #2 task stack */
OS_STK Task3Stk[TASK_STK_SIZE]; /* Task #3 task stack */
OS_EVENT *InterruptSem;
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE/sizeof(OS_STK)]; /* Tasks stacks */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void TaskStart(void *data); /* Function prototypes of tasks */
static void TaskStartCreateTasks(void);
void Task1(void *data);
void Task2(void *data);
void Task3(void *data);
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
typedef struct {
char TaskName[30];
INT16U TaskCtr;
INT16U TaskExecTime;
INT32U TaskTotExecTime;
} TASK_USER_DATA;
TASK_USER_DATA TaskUserData[7];
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
extern void main(void);
void boot_card()
{
ucBsp_init(); /* Initializa ucBsp */
main();
}
extern void OSCpuInit();
extern void OS_Sched(void);
void main (void)
{
printk("Welcome to ucos-II\n");
printk("\n");
OSCpuInit(); /* Install uC/OS-II's context switch vector */
OSInit(); /* Initialize uC/OS-II */
OSTaskCreateExt(TaskStart,
(void *)0,
&TaskStartStk[TASK_STK_SIZE - 1],
TASK_START_PRIO,
TASK_START_ID,
&TaskStartStk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_START_ID],
0);
OSStart(); /* Start multitasking */
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *pdata)
{
INT16S key;
int i;
pdata = pdata; /* Prevent compiler warning */
ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00); /* Reprogram tick rate */
ucos_timer_init(); /* Initialize timer */
InterruptSem=OSSemCreate(1); /* create 1 signal */
TaskStartCreateTasks(); /* Create all the application tasks */
OSTaskSuspend(OS_PRIO_SELF); /* Suspend the TaskStart */
}
/*
*********************************************************************************************************
* CREATE TASKS
*********************************************************************************************************
*/
void TaskStartCreateTasks (void)
{
OSTaskCreate(Task1,(void *)0,&Task1Stk[TASK_STK_SIZE - 1],TASK_1_PRIO);
OSTaskCreate(Task2,(void *)0,&Task2Stk[TASK_STK_SIZE - 1],TASK_2_PRIO);
OSTaskCreate(Task3,(void *)0,&Task3Stk[TASK_STK_SIZE - 1],TASK_3_PRIO);
}
/*
*********************************************************************************************************
* Task1
*********************************************************************************************************
*/
void Task1 (void *pdata)
{
INT8U err;
pdata=pdata;
for (;;)
{
OSTimeDly(100);
printk( "\nTask1 is try to get semaphore.\n\n"); /*task1 delay 100 clock ticks */
OSSemPend(InterruptSem, 0, &err); /* Acquire semaphore to get into the room */
printk("Task1 has Succeed to obtain semaphore.\n");
printk("Task1 is delayed.\n\n");
OSTimeDly(200);
// OSTimeDly(100);
printk("\nThe delay of Task1 finished .\n");
printk("Task1 release semaphore.\n");
OSSemPost(InterruptSem); /* Release semaphore */
OSTimeDly(200);
}
}
/*
*********************************************************************************************************
* Task2
*********************************************************************************************************
*/
void Task2 (void *pdata)
{
INT8U err;
pdata=pdata;
for (;;)
{
printk( "\nTask2 is try to get semaphore.\n");
OSSemPend(InterruptSem, 0, &err); /* Acquire semaphore to get into the room */
printk( "Task2 has Succeed to obtain semaphore.\n");
printk("Task2 is delayed.\n\n");
OSTimeDly(500); /*task2 delay 500 clock ticks */
// OSTimeDly(100);
printk("\nThe delay of Task2 finished .\n");
printk("Task2 release semaphore.\n");
OSSemPost(InterruptSem); /* Release semaphore */
OSTimeDly(200);
// printk("Task2 is waitting.\n");
}
}
/*
*********************************************************************************************************
* Task3
*********************************************************************************************************
*/
void Task3 (void *pdata)
{
pdata=pdata;
for (;;)
{
printk("Task3 has got the CPU:|||||||||||||||||||||||||||||||||||||\n");
OSTimeDly(100);
// printk("Task3://///////////////////////////////////\n");
// OSTimeDly(50);
// printk("Task3:-------------------------------------\n");
// OSTimeDly(50);
// printk("Task3:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n");
// OSTimeDly(50);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -