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

📄 timertest.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*                                                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 "UserTimer.h"
#include "includes.h"

//external functions
//hardware part
extern void HW_Bd_Init(void);
extern void HW_Bd_Test(void);
extern void Func_Start_I2C(void);

//LCD control part and display part
extern void Do_LCD_Init(void);
extern void Do_Clear_Screen(unsigned char,INT8U,INT8U,INT8U);
extern unsigned char Disp_Word(unsigned char PosX,unsigned char PosY,unsigned int unicode,unsigned char Type);

extern void TimerMgtInit(void);


//
extern void Display_Start_Picture(void);
extern void Display_Signal_Qual(unsigned char S_Q);
extern void Display_Bat_Lvl(unsigned char B_L);
extern void Display_SM(unsigned char Y_N);
extern void Display_Ser(unsigned char Ser);
extern void Display_Date(unsigned char YearH,
				  unsigned char YearL,
				  unsigned char MonthH,
				  unsigned char MonthL,
				  unsigned char DateH,
				  unsigned char DateL);
extern void Display_Time(unsigned char HourH,
				  unsigned char HourL,
				  unsigned char MinuteH,
				  unsigned char MinuteL,
				  unsigned char CTL);
extern void Display_Local_Num(unsigned char rom * ptrNum);
extern void TimerManager(OS_EVENT *);

extern void Display_Lock(unsigned char Lock_State);


extern void FileSysInit(void);
extern INT8U FileOpen(INT8U File_ID);
extern INT8U FileSave(INT8U FileHandle, INT16U Position, INT8U rom * ptrData, INT16U DataLen);
extern INT8U FileRead(INT8U FileHandle, INT16U Position, INT8U rom * ptrData, INT16U DataLen);
//

/*
*********************************************************************************************************
*                                              CONSTANTS
*********************************************************************************************************
*/
#define          MSG_QUEUE_SIZE     8                /* 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
*********************************************************************************************************
*/

OS_EVENT        *RandomSem;
//INT8U	chrCurHandle;
INT8U	CheckBytes[16];
rom INT8U *CheckAddr;

#pragma romdata EXTSTK
OS_STK	TaskStk[N_TASKS][TASK_STK_SIZE];

#pragma romdata EXTMEM
rom unsigned char MemFill[6];
rom unsigned char MemAreaS[2048];
rom unsigned char MemAreaL[8192];

#pragma udata
//OS_EVENT       *MsgQueue;                            /* Message queue pointer                         */
OS_MEM			*pMemSml;
OS_MEM			*pMemLge;

unsigned char DebugReadLength;
rom unsigned char *DebugReadAddr;
unsigned char DebugContent[48];

//INT8U 	ResForTest[50];
#pragma romdata EXTRAM
//rom INT8U * rom UnusedMem[32];
OS_EVENT       *rom MsgQueue[N_TASKS];                            /* Message queue pointer                         */
OS_EVENT	*rom peventDEBUG;
OS_EVENT	*rom peventWICResp;
OS_EVENT	*rom peventHardware;

OS_EVENT	*rom peventWIC;
OS_EVENT	*rom peventMCNM;
OS_EVENT	*rom peventDVS;


rom void  *rom MsgQueueTbl[N_TASKS][MSG_QUEUE_SIZE];                     /* Storage for messages                          */
OS_EVENT       *rom DisplaySem;
OS_EVENT       *rom EepromSem;

/*
*********************************************************************************************************
*                                         FUNCTION PROTOTYPES
*********************************************************************************************************
*/

void             TaskStart(void *data);               /* Function prototypes of tasks                  */
void             Task1(void *data);
void             Task2(void *data);
void             Task3(void *data);
void             Task4(void *data);
void             Task5(void *data);
void             Task6(void *data);
void             Task7(void *data);
void             Task8(void *data);
void             Task9(void *data);
void             Task10(void *data);
void             Task11(void *data);
void             Task12(void *data);
void             Task13(void *data);
void             Task14(void *data);

extern void tskDebug(void *data);
extern void tskWICResp(void *data);
extern void tskHardware(void *data);
extern unsigned char Func_ChangeCOMMode(unsigned char mode);

INT8U rom TestRomData[100];
/*$PAGE*/
/*

*********************************************************************************************************
*                                                  MAIN
*********************************************************************************************************
*/
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<DebugReadLength;){
				DebugContent[i++]=TOSL;
				DebugContent[i++]=TOSH;
				DebugContent[i++]=TOSU;
				if(i>=48)	break;
				STKPTR--;
			}
			
		for(;;){
//		for(i=0;i<DebugReadLength;i++)
//			DebugContent[i]=*(DebugReadAddr++);
		i=taskid;
		i=taskid;
		i=taskid;
		}
	}
	OS_EXIT_CRITICAL();
}
	
void LoopForTest(void)
{
	INT8U	i;
	i=0;

	OS_ENTER_CRITICAL();
		for(;;){
//			i++;
//			i--;
			DebugReadLength=STKPTR+STKPTR+STKPTR;
			for(i=0;i<DebugReadLength;){
				DebugContent[i++]=TOSL;
				DebugContent[i++]=TOSH;
				DebugContent[i++]=TOSU;
				if(i>=48)	break;
				STKPTR--;
			}
			for(;;){
			i=i;
			i=i;
			}
		}
	OS_EXIT_CRITICAL();
}
	

void main (void)
{
	Func_Brd_Init();
	Do_LCD_Init();
	HW_Bd_Test();
	Func_ChangeCOMMode(1);
	Do_Clear_Screen(0,0,7,127);
	
	OSInit();                                              /* Initialize uC/OS-II                      */
    
   OSTaskCreate(TaskStart, (void *)0, (rom void *)TaskStk[TASK_START_PRIO],TASK_START_PRIO);

    OSStart();                                             /* Start multitasking                       */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                               STARTUP TASK
*********************************************************************************************************
*/

void  TaskStart (void *data)
{
    UBYTE  i;
//    char   s[100];
//    char   s[80];
    INT16S key;
    INT8U	err;
    rom INT8U *msg;
    unsigned short long slint;

    data = data;                                           /* Prevent compiler warning                 */


//	Do_LCD_Init();

	TimerMgtInit();

	Func_Start_TMR1();
	Func_Start_UART();
	Func_Start_I2C();

//	Do_Clear_Screen(0,0,7,127);
	
//    OSStatInit();                                          /* Initialize uC/OS-II's statistics         */

  pMemSml=OSMemCreate(MemAreaS,64,32,&err);		//2KB
  pMemLge=OSMemCreate(MemAreaL,32,256,&err);		//8KB
  if(err!=OS_NO_ERR){
		CheckBytes[0]=255;
		CheckAddr=msg;
		OSTrap(255);
  }

  MsgQueue[TASK_START_PRIO] = OSQCreate(MsgQueueTbl[TASK_START_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_1_PRIO] = OSQCreate(MsgQueueTbl[TASK_1_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_2_PRIO] = OSQCreate(MsgQueueTbl[TASK_2_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_3_PRIO] = OSQCreate(MsgQueueTbl[TASK_3_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_4_PRIO] = OSQCreate(MsgQueueTbl[TASK_4_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_5_PRIO] = OSQCreate(MsgQueueTbl[TASK_5_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_6_PRIO] = OSQCreate(MsgQueueTbl[TASK_6_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_7_PRIO] = OSQCreate(MsgQueueTbl[TASK_7_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_8_PRIO] = OSQCreate(MsgQueueTbl[TASK_8_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_9_PRIO] = OSQCreate(MsgQueueTbl[TASK_9_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_10_PRIO] = OSQCreate(MsgQueueTbl[TASK_10_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_11_PRIO] = OSQCreate(MsgQueueTbl[TASK_11_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_12_PRIO] = OSQCreate(MsgQueueTbl[TASK_12_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */
  MsgQueue[TASK_13_PRIO] = OSQCreate(MsgQueueTbl[TASK_13_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */

  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);
	DisplaySem=OSSemCreate(1);
	EepromSem=OSSemCreate(1);
	
   OSTaskCreate(Task1, (void *)0, (rom void *)TaskStk[TASK_1_PRIO],TASK_1_PRIO);

   OSTaskCreate(Task2, (void *)0, (rom void *)TaskStk[TASK_2_PRIO],TASK_2_PRIO);
   OSTaskCreate(Task3, (void *)0, (rom void *)TaskStk[TASK_3_PRIO],TASK_3_PRIO);
   OSTaskCreate(Task4, (void *)0, (rom void *)TaskStk[TASK_4_PRIO],TASK_4_PRIO);
   OSTaskCreate(Task5, (void *)0, (rom void *)TaskStk[TASK_5_PRIO],TASK_5_PRIO);
   OSTaskCreate(Task6, (void *)0, (rom void *)TaskStk[TASK_6_PRIO],TASK_6_PRIO);
   OSTaskCreate(Task7, (void *)0, (rom void *)TaskStk[TASK_7_PRIO],TASK_7_PRIO);
   OSTaskCreate(Task8, (void *)0, (rom void *)TaskStk[TASK_8_PRIO],TASK_8_PRIO);
   OSTaskCreate(Task9, (void *)0, (rom void *)TaskStk[TASK_9_PRIO],TASK_9_PRIO);
   OSTaskCreate(Task10, (void *)0, (rom void *)TaskStk[TASK_10_PRIO],TASK_10_PRIO);
   OSTaskCreate(Task11, (void *)0, (rom void *)TaskStk[TASK_11_PRIO],TASK_11_PRIO);
   OSTaskCreate(Task12, (void *)0, (rom void *)TaskStk[TASK_12_PRIO],TASK_12_PRIO);
   OSTaskCreate(Task13, (void *)0, (rom void *)TaskStk[TASK_13_PRIO],TASK_13_PRIO);

   OSTaskCreate(Task14, (void *)0, (rom void *)TaskStk[14],29);	//14

   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);

	for(;;){
		TimerManager(MsgQueue[TASK_START_PRIO]);
	}
	
/*    for(;;){
    
        msg = (rom INT8U *)OSQPend(MsgQueue[TASK_START_PRIO],0, &err);

        if(msg==(rom INT8U *)0){
			_asm
	    	BTG	LATA,0,0
	    	_endasm
		}

		else{
		
			slint=(unsigned short long)msg;
			if(slint<0x11a006 || slint>=0x11c006){
				CheckBytes[0]=TASK_START_PRIO+64;
				CheckBytes[1]=0xe1;
				CheckAddr=msg;
				OSTrap(TASK_START_PRIO+64);
			}
			
		if(msg[TASK_1_PRIO]==TASK_1_PRIO && msg[TASK_2_PRIO]==TASK_2_PRIO &&
				msg[TASK_3_PRIO]==TASK_3_PRIO && msg[TASK_4_PRIO]==TASK_4_PRIO &&
				msg[TASK_5_PRIO]==TASK_5_PRIO && msg[TASK_6_PRIO]==TASK_6_PRIO &&
				msg[TASK_7_PRIO]==TASK_7_PRIO && msg[TASK_8_PRIO]==TASK_8_PRIO  &&
				msg[TASK_9_PRIO]==TASK_9_PRIO && msg[TASK_10_PRIO]==TASK_10_PRIO &&
				msg[TASK_11_PRIO]==TASK_11_PRIO && msg[TASK_12_PRIO]==TASK_12_PRIO &&
				msg[TASK_13_PRIO]==TASK_13_PRIO){
			_asm
    		BTG	LATC,1,0
    		_endasm

    	}
    	else{
			CheckBytes[0]=TASK_START_PRIO;
			for(i=1;i<14;i++)	CheckBytes[i+1]=msg[i];
			CheckAddr=msg;
			//CheckBytes[1]=(INT8U)((msg>>16)&0xff);
			//CheckBytes[2]=(INT8U)((msg>>8)&0xff);
			//CheckBytes[3]=(INT8U)(msg&0xff);
			OSTrap(TASK_START_PRIO);

   		}


		err=OSMemPut(pMemSml,msg);
		if(err!=OS_NO_ERR){
			CheckBytes[0]=TASK_START_PRIO+128;
			CheckAddr=msg;
			OSTrap(TASK_START_PRIO+128);
		}


   		}
	}
*/	
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #1
*
* Description: This task executes 5 times per second but doesn't do anything.
*********************************************************************************************************
*/


void  Task1 (void *data)
{
    rom INT8U *msg;
    INT8U  err;
//	rom INT8U *addr1;
	INT8U i;
	INT8U toggle=0;
	
	TIMER_MESSAGE *rmsg;
	TIMER_MESSAGE *addr1;
//	rom INT8U *rmsg;
//	rom INT8U *addr1;
    
    data = data;

				addr1=(TIMER_MESSAGE *)OSMemGet(pMemSml,&err);
				if(err!=OS_NO_ERR){
				OSTrap(TASK_1_PRIO+32);
				}
//				addr1[0]=8
//				addr1[1]=TASK_1_PRIO;
//				addr1[2]=TASK_TIMER_PRIO;
//				addr1[3]=Timer_Start;
//				addr1[4]=1;
//				addr1[5]=0;
//				addr1[6]=50;
//				addr1[7]=0;
				
				addr1->Len=8;
				addr1->Src=TASK_1_PRIO;
				addr1->Des=TASK_TIMER_PRIO;
				addr1->MID=Timer_Start;
				addr1->TID=0x1234;
				addr1->Val=50;
			    OSQPost(MsgQueue[TASK_TIMER_PRIO],(rom INT8U *)addr1);

    for (;;) {
		msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);

		if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006){
			OSTrap(TASK_1_PRIO+64);
		}
		else{
			rmsg=(TIMER_MESSAGE *)msg;
			if(rmsg->Src==TASK_TIMER_PRIO && rmsg->Des==TASK_1_PRIO && rmsg->MID==Timer_TimeOut){

				if(toggle>=10){
				_asm
//    			BTG	LATC,1,0
				BSF LATC,1,0
    			_endasm
    			toggle=0;
    			}
    			else{
				_asm
				BCF LATC,1,0
				_endasm
    			}
    			toggle++;

/*
				OSSemPend (DisplaySem,0,&err);
				if(err!=OS_NO_ERR)	OSTrap(TASK_1_PRIO+48);

				if(toggle){
					(void)Disp_Word(16,16,0x0036,0);
					toggle=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -