📄 test.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
*
* Fujitsu MB90F543 Example
*
* File : TEST.C
* By : Andrey Mozzhevilov
*
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_STK_SIZE 128 /* Size of each task's stacks (# of WORDs) */
#define TASK_START_PRIO 11 /* Application tasks priorities */
#define TASK_1_PRIO 12
#define TASK_2_PRIO 1
#define TASK_3_PRIO 5
/*
*********************************************************************************************************
* 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 *TxSem;
OS_EVENT *RxSem;
/*
*********************************************************************************************************
* 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);
extern void InitIrqLevels(void);
/*
*********************************************************************************************************
* hardware_init
*********************************************************************************************************
*/
void hardware_init (void)
{
off(RED_LED);
off(YELLOW_LED);
off(GREEN_LED);
direct(RED_LED,O);
direct(YELLOW_LED,O);
direct(GREEN_LED,O);
}
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void main (void)
{
hardware_init();
InitIrqLevels();
OSInit(); /* Initialize uC/OS-II */
OSTaskCreate (TaskStart,
0,
&TaskStartStk[TASK_STK_SIZE - 1],
TASK_START_PRIO);
OSStart(); /* Start multitasking */
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *data)
{
data = data; /* Prevent compiler warning */
OS_ENTER_CRITICAL(); /* Install uC/OS-II's clock tick ISR */
SETUP_SYSTEM_TICK();
OS_EXIT_CRITICAL();
/* OSStatInit(); /* Initialize uC/OS-II's statistics */
TxSem = OSSemCreate(0);
RxSem = OSSemCreate(0);
TaskStartCreateTasks(); /* Create all other tasks */
for (;;) {
OSTimeDly(5); /* Wait 5 ticks */
cpl(GREEN_LED);
}
}
/*
*********************************************************************************************************
* CREATE TASKS
*********************************************************************************************************
*/
static void TaskStartCreateTasks (void)
{
OSTaskCreate (Task1,
0,
&Task1Stk[TASK_STK_SIZE - 1],
TASK_1_PRIO);
OSTaskCreate (Task2,
0,
&Task2Stk[TASK_STK_SIZE - 1],
TASK_2_PRIO);
OSTaskCreate (Task3,
0,
&Task3Stk[TASK_STK_SIZE - 1],
TASK_3_PRIO);
}
void Task1 (void *data)
{
data = data;
for (;;) {
on(YELLOW_LED);
OSSemPost(TxSem); /* Send message to Task #2 */
OSTimeDly(1);
}
}
void Task2 (void *data)
{
INT8U err;
data = data;
for (;;) {
OSSemPend(TxSem, 0, &err); /* Wait for message from Task #1 */
off(YELLOW_LED);
}
}
/*
*********************************************************************************************************
Task 3. Wait sem from isr
*********************************************************************************************************
*/
void Task3 (void *data)
{
INT8U err;
data = data;
TMCSR1_CSL0 = 0;
TMCSR1_CSL1 = 1; /* 2 us clock source */
TMCSR1_MOD0 = 0;
TMCSR1_MOD1 = 0;
TMCSR1_MOD2 = 0;
TMCSR1_OUTE = 0; /* TOUT is a general-purpose port */
TMCSR1_RELD = 1; /* Reload mode */
TMRLR1 = 250; /* 500 mks */
TMCSR1_INTE = 1; /* Interrupt enable */
TMCSR1_UF = 0; /* */
TMCSR1_CNTE = 1; /* Cnt enable */
TMCSR1_TRG = 1; /* Start count */
ICR12 = 5;
for (;;) {
OSSemPend(RxSem, 0, &err); /* Wait for sem from ISR */
off(RED_LED);
}
}
__interrupt void RELOAD_TIMER1_ISR(void)
{
cpl(RED_LED);
C_ISR_ENTER();
TMCSR1_UF = 0;
OSSemPost(RxSem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -