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

📄 simple.c

📁 ucos在编译环境ads中arm移植代码
💻 C
字号:


/*
 *********************************************************************
 * $Workfile:   simple.c  $
 * $Revision:   1.0  $
 * $Author:   LiJ  $
 * $Date:   Oct 20 2004 14:11:12  $
 *
 * Project: CPU uC/OS-II Driver Development
 *
 * Description:
 *
 * Note: This example assume the stack for SVC mode and IRQ mode
 *   has been set before code starts.
 *
 * Revision History:
 * $Log:   //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh79524/ports/ucosii/simple.c-arc  $
 * 
 *    Rev 1.0   Oct 20 2004 14:11:12   LiJ
 * Initial revision.
 * 
 *
 *  SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION
 *  OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,
 *  AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES, 
 *  SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.
 *
 *  SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY 
 *  FOR THE PURPucosiiE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A 
 *  SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE
 *  FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.
 *  
 * COPYRIGHT (C) 2000 SHARP MICROELECTRONICS OF THE AMERICAS, INC.
 * 		       CAMAS, WA 
 ******************************************************************** 
 */


/*
*	simple.c
*
*	CPU uC/OS-II Driver Development
*
* 	Note: This example assume the stack for SVC mode and IRQ mode
*   has been set before code starts. Also, PCLK and HCLK has been
*   set before code starts
*
*/

#include    "includes.h"

/* Constants */

#define	TASK_STK_SIZE		8192 /* Size of each task's stack (# of WORDs) */
#define	N_TASKS				6

/* Variables */

static OS_STK		TaskStk[N_TASKS][TASK_STK_SIZE];
static OS_STK		TaskStartStk[TASK_STK_SIZE];
static INT8S 		TaskData[N_TASKS];
static INT32U		ctrTask[OS_LOWEST_PRIO];

/* Forward Declarations */
static void Task(void *data);
static void TaskStart(void *data);

/* MAIN */

int main(void)
{
	int idx;
	int jdx;

	/* Initialize stacks */ 
	for (idx = 0; idx < N_TASKS; idx++)
		for (jdx = 0; jdx < TASK_STK_SIZE; jdx++)
			TaskStk[idx][jdx] = 0;     /* Tasks stacks */

	for (idx = 0; idx < TASK_STK_SIZE; idx++)
			TaskStartStk[idx] = 0;

	/* init execution counters */ 
	for (idx = 0; idx < OS_LOWEST_PRIO; idx++)
			ctrTask[idx] = 0;

	/* Initialize uC/OS-II */
    OSInit(); 

	/* Create the startup task */ 
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);

	/* Start uC/OS-II */ 
    OSStart();

	return (0);
}

/* STARTUP TASK */

static void TaskStart (void *data)
{
	int idx;

	OSTimeSet(0);

    for (idx = 0; idx < N_TASKS; idx++) /* Create N_TASKS identical tasks */
	{
        TaskData[idx] = 'A' + idx; /* Each task has its own letter    */
        OSTaskCreate(Task,
			(void *)&TaskData[idx],
			&TaskStk[idx][TASK_STK_SIZE - 1],
			idx + 1);
    }

	/* Start the OS Ticker */ 
	/* This installs the IRQ interrupt handler, starts ticker */ 
	MCU_start_ticker (OS_TICKS_PER_SEC); /* os_cfg.h */ 
	
    OSStatInit();

	idx = 0;
    while (1)
	{
		/* put something on console every second */ 
		printf ("Time is now:  %d\n", (INT32S) OSTimeGet ());
		OSTimeDlyHMSM (0, 0, 1, 0);
		idx++;
		idx %= 256;
    }
}

/* TASKS */

static void Task (void *data)
{
	OS_TCB	tcb;
	INT8U	prio;
	INT8U * pid;

	pid = (INT8U *) data;

	OSTaskQuery(OS_PRIO_SELF,&tcb);
	prio = tcb.OSTCBPrio;

    while (1)
	{
		ctrTask[prio]++;
        OSTimeDlyHMSM(0,0,0,30 + prio);
    }
}

⌨️ 快捷键说明

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