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

📄 clockinterrupt.c

📁 运行在ucos下的实验用例程序
💻 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 + -