📄 main.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* OSTaskStatHook Applation Funtion
*
*
* File : main.c
* By : Tj
* Time : 2008.8.8
*
*
*********************************************************************************************************
*/
//#pragma warning( disable: C196 )
#define Reentrant reentrant
#include "includes.h"
#include "..\driver\lcd\lcd.h"
#include "..\driver\c51.h"
extern unsigned char Os_Enter_Sum;
#define TASK_STK_SIZE MaxStkSize
#define TASK_START_ID 0 /* Application tasks IDs */
#define TASK_CLK_ID 1
#define TASK_1_ID 2
#define TASK_2_ID 3
#define TASK_3_ID 4
#define TASK_4_ID 5
#define TASK_5_ID 6
#define TASK_START_PRIO 10 /* Application tasks priorities */
#define TASK_CLK_PRIO 11
#define TASK_1_PRIO 12
#define TASK_2_PRIO 13
#define TASK_3_PRIO 14
#define TASK_4_PRIO 15
#define TASK_5_PRIO 16
#define MSG_QUEUE_SIZE 20
OS_EVENT *MsgQueue; /* Message queue pointer */
void *MsgQueueTbl[20]; /* Storage for messages */
OS_STK TaskStartStk[TASK_STK_SIZE]; /* Startup task stack */
OS_STK TaskClkStk[TASK_STK_SIZE]; /* Clock 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_STK Task4Stk[TASK_STK_SIZE]; /* Task #4 task stack */
OS_STK Task5Stk[TASK_STK_SIZE]; /* Task #5 task stack */
OS_EVENT *AckMbox; /* Message mailboxes for Tasks #4 and #5 */
OS_EVENT *TxMbox;
OS_EVENT *pPrintSem;
OS_EVENT *pPutSem;
TASK_USER_DATA TaskUserData[7];
void TaskStart(void *ppdata) Reentrant; /* Function prototypes of tasks */
static void TaskStartCreateTasks(void)Reentrant;
static void TaskStartDispInit(void)Reentrant;
static void TaskStartDisp(void)Reentrant;
void TaskClk(void *ppdata)Reentrant;
void Task1(void *ppdata)Reentrant;
void Task2(void *ppdata)Reentrant;
void Task3(void *ppdata)Reentrant;
void Task4(void *ppdata)Reentrant;
void Task5(void *ppdata)Reentrant;
void InitSerial()
{
SCON = 0x2; /* SM0 SM1 =0 SM2 0 REN=0 TB8=0 RB8=0 TI=1 RI=0 */
TI=1;
}
void main(void)
{
INT8U i;
Os_Enter_Sum=0;
InitHardware();
InitSerial();
lcd_init();
lcd_clr(0x0);
/* for(i=0;i<128;i++)
{
LCD_ClrLine(0,29,i);
} */
C51_ElapsedInit();
OSInit();
strcpy(TaskUserData[TASK_START_ID].TaskName, "TkStart");
OSTaskCreateExt(TaskStart,
(void *)0,
&TaskStartStk[0],
TASK_START_PRIO,
TASK_START_ID,
&TaskStartStk[TASK_STK_SIZE - 1],
TASK_STK_SIZE,
&TaskUserData[TASK_START_ID],
0);
OSStart();
}
void Taskstart(void *ppdata) Reentrant
{
ppdata=ppdata;
ET0=1;
TR0=1;
TR1 = 1;
ET1=1;
EA=1;
OSStatInit();
pPrintSem = OSSemCreate(1);
pPutSem = OSSemCreate(1);
TaskStartDispInit();
MsgQueue = OSQCreate(&MsgQueueTbl[0], MSG_QUEUE_SIZE);
TaskStartCreateTasks();
for(;;){
LCD_Print(8,13,0,"%2d ",(int)OSTaskCtr);
LCD_Print(25,13,0,"%3d%% ",(int)OSCPUUsage);
LCD_Print(12,15,0,"%3d ",(int)OSCtxSwCtr);
OSTimeDly(100);
OSCtxSwCtr = 0; /* Clear the context switch counter */
// OSTimeDly(OS_TICKS_PER_SEC); /* Wait one second */
}
}
static void TaskStartCreateTasks (void) Reentrant
{
strcpy(TaskUserData[TASK_CLK_ID].TaskName, "Clock");
OSTaskCreateExt(TaskClk,
(void *)0,
&TaskClkStk[0],
TASK_CLK_PRIO,
TASK_CLK_ID,
&TaskClkStk[TASK_STK_SIZE - 1],
TASK_STK_SIZE,
&TaskUserData[TASK_CLK_ID],
0);
strcpy(TaskUserData[TASK_1_ID].TaskName, "MQ Rx");
OSTaskCreateExt(Task1,
(void *)0,
&Task1Stk[0],
TASK_1_PRIO,
TASK_1_ID,
&Task1Stk[TASK_STK_SIZE - 1],
TASK_STK_SIZE,
&TaskUserData[TASK_1_ID],
0);
strcpy(TaskUserData[TASK_2_ID].TaskName, "MQ Tx#2");
OSTaskCreateExt(Task2,
(void *)0,
&Task2Stk[0],
TASK_2_PRIO,
TASK_2_ID,
&Task2Stk[TASK_STK_SIZE - 1],
TASK_STK_SIZE,
&TaskUserData[TASK_2_ID],
0);
strcpy(TaskUserData[TASK_3_ID].TaskName, "MQ Tx#3");
OSTaskCreateExt(Task3,
(void *)0,
&Task3Stk[0],
TASK_3_PRIO,
TASK_3_ID,
&Task3Stk[TASK_STK_SIZE - 1],
TASK_STK_SIZE,
&TaskUserData[TASK_3_ID],
0);
strcpy(TaskUserData[TASK_4_ID].TaskName, "MQ Tx#4");
OSTaskCreateExt(Task4,
(void *)0,
&Task4Stk[0],
TASK_4_PRIO,
TASK_4_ID,
&Task4Stk[TASK_STK_SIZE-1],
TASK_STK_SIZE,
&TaskUserData[TASK_4_ID],
0);
strcpy(TaskUserData[TASK_5_ID].TaskName, "DlyTask");
OSTaskCreateExt(Task5,
(void *)0,
&Task5Stk[0],
TASK_5_PRIO,
TASK_5_ID,
&Task5Stk[TASK_STK_SIZE-1],
TASK_STK_SIZE,
&TaskUserData[TASK_5_ID],
0);
}
static void TaskStartDispInit (void) Reentrant
{
LCD_Print(0,0,0,"-------UC/OS Example #3-------");
LCD_Print(0,1,0,"-------Designed by Tj -------");
LCD_Print(0,3,0,"Task Cnt ExeT ToT %%Tot");
LCD_Print(0,13,0,"tasks:");
LCD_Print(20,13,0,"cpu:");
LCD_Print(0,15,0,"Task sw/sec:");
LCD_Print(24,15,0,"V%1d.%02d", OSVersion() / 100, OSVersion() % 100);
}
static void TaskStartDisp (void) Reentrant
{
}
void Task1 (void *ppdata) Reentrant
{
char *msg;
INT8U err;
ppdata = ppdata;
for (;;) {
msg = (char *)OSQPend(MsgQueue, 0, &err);
LCD_PutStr(20,12,1, msg);
// OSTimeDlyHMSM(0, 0, 0,500);
}
}
void Task2 (void *ppdata) Reentrant
{
char msg[20];
ppdata = ppdata;
strcpy(&msg[0], "Task 2");
for (;;) {
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDlyHMSM(0, 0, 2,0);
}
}
void Task3 (void *ppdata) Reentrant
{
char msg[20];
ppdata = ppdata;
strcpy(&msg[0], "Task 3");
for (;;) {
OSTimeDlyHMSM(0, 0, 0, 500);
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDlyHMSM(0, 0, 1, 500);
}
}
void Task4 (void *ppdata) Reentrant
{
char msg[20];
ppdata = ppdata;
strcpy(&msg[0], "Task 4");
for (;;) {
OSTimeDlyHMSM(0, 0, 1, 0);
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
void Task5 (void *ppdata) Reentrant
{
char msg[20];
ppdata = ppdata;
strcpy(&msg[0], "Task 5");
for (;;) {
OSTimeDlyHMSM(0, 0, 1, 500);
OSQPost(MsgQueue, (void *)&msg[0]);
OSTimeDlyHMSM(0, 0, 0, 500);
}
}
void TaskClk (void *ppdata) Reentrant
{
ppdata = ppdata;
for (;;) {
OSTimeDly(OS_TICKS_PER_SEC);
OSTimeDly(OS_TICKS_PER_SEC);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -