⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfunc.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 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 + -