📄 simple.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 + -