📄 mainfunc.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
*
* V2.00
*
* EXAMPLE #3
*********************************************************************************************************
*/
#define EX3_GLOBALS
#include "includes.h"
#include "UserTimer.h"
#include "hardware.h"
#include "funclcd.h"
#include "funcfontlib.h"
#include "funcfile.h"
#include "funcint.h"
#include "device.h"
extern void TimerISR(void);
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define MSG_QUEUE_SIZE 20 /* Size of message queue used in example */
#define TASK_STK_SIZE 311 /* Size of each task's stacks */
#define N_TASKS 62 /* Number of identical tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
#pragma romdata EXTSTK
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
#pragma romdata EXTMEM
rom INT8U MemFill[6];
//Huge mem. block can only be used in MCNM data receiving process
rom INT8U MemAreaS[2048];//32*64]; //small memblock
rom INT8U MemAreaL[8192];//256*32]; //large memblock
rom INT8U MemAreaH[32768];//4096*8]; //huge memblock
#pragma udata
OS_MEM *pMemSml;
OS_MEM *pMemLge;
OS_MEM *pMemHug;
INT8U DebugReadLength;
rom unsigned char *DebugReadAddr;
unsigned char DebugContent[32];
#pragma romdata EXTRAM
OS_EVENT *rom peventTimer;
OS_EVENT *rom peventCartoon;
OS_EVENT *rom peventTone;
OS_EVENT *rom peventDEBUG; //to receive upword message
OS_EVENT *rom peventWICResp; //Receive bytes from module
OS_EVENT *rom peventWIC; //Receive responses from WICResp
OS_EVENT *rom peventWICCmd; //Receive commands from other tasks or receive some unsolicited responses
OS_EVENT *rom peventHardware;
OS_EVENT *rom peventMCNM;
OS_EVENT *rom peventDVS;
OS_EVENT *rom peventSysTime;
OS_EVENT *rom peventCharge;
OS_EVENT *rom peventMenu;
OS_EVENT *rom peventTxProtocol;
OS_EVENT *rom peventRxProtocol;
OS_EVENT *rom peventPPPHandler;
OS_EVENT *rom peventIPHandler;
OS_EVENT *rom peventPPPReceiver;
OS_EVENT *rom peventNet;
OS_EVENT *rom DisplaySem;
OS_EVENT *rom EepromSem;
rom void *rom MsgQueueTbl[N_TASKS][MSG_QUEUE_SIZE]; /* Storage for messages */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void TaskStart(void *data); /* Function prototypes of tasks */
extern void tskHardware(void * data);
extern void tskTone(void * data);
extern void tskCartoon(void * data);
extern void tskWIC(void * data);
extern void tskWICResp(void * data);
extern void tskMCNM(void * data);
extern void tskDVS(void * data);
extern void tskDebug(void *data);
extern void tskSysTime(void *data);
extern void tskCharge(void *data);
extern void tskMenu(void *data);
extern void tskTxProtocol(void * data);
extern void tskRxProtocol(void * data);
extern void tskPPPHandler(void * data);
extern void tskPPPReceiver(void * data);
extern void tskIPHandler(void * data);
void tskNet(void * Pdata);
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void main (void)
{
Func_Brd_Init();
Do_LCD_Init();
HW_Bd_Test();
Func_ChangeCOMMode(S_MONITOR); //For test
isr_init();
sysdev_init();
sysdev_load(&DEV_KEYBRD);
sysdev_load(&DEV_I2C);
sysdev_load(&DEV_SEEPROM);
sysdev_load(&DEV_UART0);
OSInit(); /* Initialize uC/OS-II */
DisplaySem = OSSemCreate(1);
Do_Clear_Screen(0,0,7,127); //Clear whole screen
OSTaskCreate(TaskStart, (void *)0, (rom void *)TaskStk[TASK_START_PRIO],TASK_START_PRIO);
OSStart(); /* Start multitasking */
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void OSTrap(INT8U taskid);
void TaskStart (void *data){
UBYTE i;
INT16S key;
INT8U err;
rom INT8U *msg;
unsigned short long slint;
data = data; /* Prevent compiler warning */
isr_set(INT_TMR1,TimerISR);
//isr_set(INT_TMR2,Func_TMR2_ISR);
//isr_set(INT_RB,Func_RB_ISR);
isr_set(INT_HIGHP,Func_Receive_ISR);
TimerMgtInit();
Func_Start_TMR1();
pMemSml=OSMemCreate(MemAreaS,64,32 ,&err); //Create 64 mem. blocks each has 32 bytes
pMemLge=OSMemCreate(MemAreaL,32,256,&err); //Create 32 mem. blocks each has 256 bytes
pMemHug=OSMemCreate(MemAreaH,8,4096,&err); //Create 2 mem. blocks each has 4096 bytes
peventTimer = OSQCreate(MsgQueueTbl[TASK_START_PRIO], MSG_QUEUE_SIZE);
peventDVS = OSQCreate(MsgQueueTbl[TASK_DVS_PRIO], MSG_QUEUE_SIZE);
peventMCNM = OSQCreate(MsgQueueTbl[TASK_MCNM_PRIO], MSG_QUEUE_SIZE);
peventTone = OSQCreate(MsgQueueTbl[TASK_TONE_PRIO], MSG_QUEUE_SIZE);
peventCartoon = OSQCreate(MsgQueueTbl[TASK_CARTOON_PRIO], MSG_QUEUE_SIZE);
peventWIC = OSQCreate(MsgQueueTbl[TASK_WIC_PRIO], MSG_QUEUE_SIZE);
peventDEBUG = OSQCreate(MsgQueueTbl[TASK_DEBUG_PRIO], MSG_QUEUE_SIZE);
peventWICResp = OSQCreate(MsgQueueTbl[TASK_WICRESP_PRIO], MSG_QUEUE_SIZE);
peventHardware = OSQCreate(MsgQueueTbl[TASK_HARDWARE_PRIO], MSG_QUEUE_SIZE);
peventSysTime = OSQCreate(MsgQueueTbl[TASK_SYSTIME_PRIO], MSG_QUEUE_SIZE);
peventCharge = OSQCreate(MsgQueueTbl[TASK_CHARGE_PRIO], MSG_QUEUE_SIZE);
peventMenu = OSQCreate(MsgQueueTbl[TASK_MENU_PRIO], MSG_QUEUE_SIZE);
peventTxProtocol = OSQCreate(MsgQueueTbl[TASK_TXPROT_PRIO], MSG_QUEUE_SIZE);
peventRxProtocol = OSQCreate(MsgQueueTbl[TASK_RXPROT_PRIO], MSG_QUEUE_SIZE);
peventWICCmd = OSQCreate(MsgQueueTbl[N_TASKS-1], MSG_QUEUE_SIZE);
peventPPPHandler = OSQCreate(MsgQueueTbl[TASK_PPPHANDLER_PRIO], MSG_QUEUE_SIZE);
peventIPHandler = OSQCreate(MsgQueueTbl[TASK_IPHANDLER_PRIO], MSG_QUEUE_SIZE);
peventPPPReceiver = OSQCreate(MsgQueueTbl[TASK_PPPRx_PRIO], MSG_QUEUE_SIZE);
peventNet = OSQCreate(MsgQueueTbl[TASK_NET_PRIO], MSG_QUEUE_SIZE);
EepromSem = OSSemCreate(1);
OSTaskCreate(tskDVS, (void *)0, (rom void *)TaskStk[TASK_DVS_PRIO], TASK_DVS_PRIO);
OSTaskCreate(tskMCNM, (void *)0, (rom void *)TaskStk[TASK_MCNM_PRIO], TASK_MCNM_PRIO);
OSTaskCreate(tskCartoon, (void *)0, (rom void *)TaskStk[TASK_CARTOON_PRIO], TASK_CARTOON_PRIO);
OSTaskCreate(tskTone, (void *)0, (rom void *)TaskStk[TASK_TONE_PRIO], TASK_TONE_PRIO);
OSTaskCreate(tskWIC, (void *)0, (rom void *)TaskStk[TASK_WIC_PRIO], TASK_WIC_PRIO);
OSTaskCreate(tskDebug, (void *)0, (rom void *)TaskStk[TASK_DEBUG_PRIO], TASK_DEBUG_PRIO);
OSTaskCreate(tskWICResp, (void *)0, (rom void *)TaskStk[TASK_WICRESP_PRIO], TASK_WICRESP_PRIO);
OSTaskCreate(tskHardware,(void *)0, (rom void *)TaskStk[TASK_HARDWARE_PRIO],TASK_HARDWARE_PRIO);
OSTaskCreate(tskSysTime, (void *)0, (rom void *)TaskStk[TASK_SYSTIME_PRIO], TASK_SYSTIME_PRIO);
OSTaskCreate(tskCharge, (void *)0, (rom void *)TaskStk[TASK_CHARGE_PRIO], TASK_CHARGE_PRIO);
OSTaskCreate(tskMenu, (void *)0, (rom void *)TaskStk[TASK_MENU_PRIO], TASK_MENU_PRIO);
OSTaskCreate(tskTxProtocol, (void *)0, (rom void *)TaskStk[TASK_TXPROT_PRIO], TASK_TXPROT_PRIO);
OSTaskCreate(tskRxProtocol, (void *)0, (rom void *)TaskStk[TASK_RXPROT_PRIO], TASK_RXPROT_PRIO);
OSTaskCreate(tskPPPHandler, (void *)0, (rom void *)TaskStk[TASK_PPPHANDLER_PRIO], TASK_PPPHANDLER_PRIO);
OSTaskCreate(tskIPHandler, (void *)0, (rom void *)TaskStk[TASK_IPHANDLER_PRIO], TASK_IPHANDLER_PRIO);
OSTaskCreate(tskPPPReceiver, (void *)0, (rom void *)TaskStk[TASK_PPPRx_PRIO], TASK_PPPRx_PRIO);
OSTaskCreate(tskNet, (void *)0, (rom void *)TaskStk[TASK_NET_PRIO], TASK_NET_PRIO);
//FileSysInit();
for(;;){
TimerManager(peventTimer);
}
}
//These two functions are debug functions
void OSTrap(INT8U taskid)
{
INT8U i;
DebugReadLength=16;
OS_ENTER_CRITICAL();
for(;;){
i=taskid;
i=taskid;
i=taskid;
DebugReadLength=STKPTR+STKPTR+STKPTR;
for(i=0;i<32;i++){
DebugContent[i]=MemAreaS[i];
}
// for(i=0;i<DebugReadLength;){
// DebugContent[i++]=TOSL;
// DebugContent[i++]=TOSH;
// DebugContent[i++]=TOSU;
// if(i>=48) break;
// STKPTR--;
// }
for(;;){
i=taskid;
i=taskid;
i=taskid;
}
}
OS_EXIT_CRITICAL();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -