📄 main.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* uC/OS-II 切嚼侩 抗力 家胶
*
* (c) Copyright 2005, KInG
* All Rights Reserved
*
* File : Main.c
* Des : 绢敲府纳捞记 皋牢 风凭
* By : KInG(kimingoo@hotmail.com)
* History : 2005.07.30 -> draft
*********************************************************************************************************
*/
#include "includes.h"
#include <stdarg.h>
#include <stdio.h>
#include "os_cpu.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
// 阿 弊府扁 怕胶农俊 傈崔瞪 沥焊甫 淬篮 备炼眉
// OSTaskCreate() 窃荐狼 牢磊肺 静烙
//typedef struct {
// int color;
// int x1, x2, y1, y2;
//}DATA;
#define TASK_STK_SIZE 1024 /* Size of each task's stacks (# of WORDs) */
#define TASK_START_ID 0 /* Application tasks IDs */
#define TASK_1_ID 1
#define TASK_2_ID 2
#define TASK_3_ID 4
#define TASK_4_ID 5
#define TASK_START_PRIO 10 /* Application tasks priorities */
#define TASK_1_PRIO 11
#define TASK_2_PRIO 12
#define TASK_3_PRIO 13
#define TASK_4_PRIO 14
#define MSG_QUEUE_SIZE 20 /* Size of message queue used in example */
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
typedef struct {
char TaskName[30];
INT16U TaskCtr;
INT16U TaskExecTime;
INT32U TaskTotExecTime;
} TASK_USER_DATA;
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE]; /* Clock task stack */
OS_STK Task2Stk[TASK_STK_SIZE]; /* Task #1 task stack */
OS_STK Task3Stk[TASK_STK_SIZE]; /* Task #3 task stack */
OS_STK Task4Stk[TASK_STK_SIZE]; /* Task #4 task stack */
TASK_USER_DATA TaskUserData[7];
OS_EVENT *MsgQueue; /* Message queue pointer */
void *MsgQueueTbl[20]; /* Storage for messages */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void TaskStart(void *pdata); /* Function prototypes of Startup task */
static void TaskStartCreateTasks(void);
void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);
void Task4(void *pdata);
/*
*********************************************************************************************************
* UART1狼 Receive 牢磐反飘 辑厚胶 风凭
*********************************************************************************************************
*/
void isrUart0RxD(void)
{
rSUBSRCPND |= BIT_SUB_RXD0;
rSRCPND |= BIT_UART0;
rINTPND |= BIT_UART0;
}
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void Main(void)
{
OSInit(); /* Initialize uC/OS-II */
strcpy(TaskUserData[TASK_START_ID].TaskName, "StartTask");
OSTaskCreateExt(TaskStart,
(void *)0,
&TaskStartStk[TASK_STK_SIZE-1],
TASK_START_PRIO,
TASK_START_ID,
&TaskStartStk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_START_ID],
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSStart();
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *pdata)
{
// 矫胶袍 檬扁拳(UART, LCD, TimeTick)
InitSystem();
pdata = pdata; /* Prevent compiler warning */
OSStatInit(); /* Initialize uC/OS-II's statistics */
MsgQueue = OSQCreate(&MsgQueueTbl[0], MSG_QUEUE_SIZE); /* Create a message queue */
TaskStartCreateTasks(); /* Create all the application tasks */
for (;;) {
OSCtxSwCtr = 0; /* Clear the context switch counter */
OSTimeDly(OS_TICKS_PER_SEC); /* Wait one second */
}
}
/*
*********************************************************************************************************
* CREATE TASKS
*********************************************************************************************************
*/
static void TaskStartCreateTasks (void)
{
strcpy(TaskUserData[TASK_1_ID].TaskName, "MsgQ Rx Task");
OSTaskCreateExt(Task1,
(void *)0,
&Task1Stk[TASK_STK_SIZE - 1],
TASK_1_PRIO,
TASK_1_ID,
&Task1Stk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_1_ID],
0);
strcpy(TaskUserData[TASK_2_ID].TaskName, "MsgQ Tx Task #2");
OSTaskCreateExt(Task2,
(void *)0,
&Task2Stk[TASK_STK_SIZE - 1],
TASK_2_PRIO,
TASK_2_ID,
&Task2Stk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_2_ID],
0);
strcpy(TaskUserData[TASK_3_ID].TaskName, "MsgQ Tx Task #3");
OSTaskCreateExt(Task3,
(void *)0,
&Task3Stk[TASK_STK_SIZE - 1],
TASK_3_PRIO,
TASK_3_ID,
&Task3Stk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_3_ID],
0);
strcpy(TaskUserData[TASK_4_ID].TaskName, "MsgQ Tx Task #4");
OSTaskCreateExt(Task4,
(void *)0,
&Task4Stk[TASK_STK_SIZE - 1],
TASK_4_PRIO,
TASK_4_ID,
&Task4Stk[0],
TASK_STK_SIZE,
&TaskUserData[TASK_4_ID],
0);
}
/*
*********************************************************************************************************
* TASK #1
*********************************************************************************************************
*/
void Task1 (void *pdata)
{
char *msg;
INT8U err;
pdata = pdata;
for (;;) {
msg = (char *)OSQPend(MsgQueue, 0, &err);
uprintf("%s\n", msg);
OSTimeDly(200); /* Wait one second */
}
}
/*
*********************************************************************************************************
* TASK #2
*********************************************************************************************************
*/
void Task2 (void *pdata)
{
char msg[20];
pdata = pdata;
strcpy(&msg[0], "Task 2");
for (;;) {
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDly(500); /* Wait one second */
}
}
/*
*********************************************************************************************************
* TASK #3
*********************************************************************************************************
*/
void Task3 (void *pdata)
{
char msg[20];
pdata = pdata;
strcpy(&msg[0], "Task 3");
for (;;) {
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDly(500); /* Wait one second */
}
}
/*
*********************************************************************************************************
* TASK #4
*********************************************************************************************************
*/
void Task4 (void *pdata)
{
char msg[20];
pdata = pdata;
strcpy(&msg[0], "Task 4");
for (;;) {
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDly(500); /* Wait one second */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -