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

📄 memtest.c

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

extern void HW_Bd_Init(void);
extern void HW_Bd_Test(void);
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 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 Display_Lock(unsigned char Lock_State);
//

/*
*********************************************************************************************************
*                                              CONSTANTS
*********************************************************************************************************
*/


#define          TASK_START_PRIO    0                /* Application tasks priorities                  */
#define          TASK_1_PRIO        1                
#define          TASK_2_PRIO        2
#define          TASK_3_PRIO        3
#define          TASK_4_PRIO        4
#define          TASK_5_PRIO        5
#define          TASK_6_PRIO        6                
#define          TASK_7_PRIO        7
#define          TASK_8_PRIO        8
#define          TASK_9_PRIO        9
#define          TASK_10_PRIO        10
#define          TASK_11_PRIO        11
#define          TASK_12_PRIO        12
#define          TASK_13_PRIO        13

#define          MSG_QUEUE_SIZE     8                /* Size of message queue used in example         */

#define  TASK_STK_SIZE                 512       /* Size of each task's stacks          */
#define  N_TASKS                        14       /* 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];

//OS_STK           TaskStartStk[TASK_STK_SIZE];         /* Startup    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_STK           Task6Stk[TASK_STK_SIZE];             /* Task #6    task stack                         */
//OS_STK           Task7Stk[TASK_STK_SIZE];             /* Task #7    task stack                         */
//OS_STK           Task8Stk[TASK_STK_SIZE];             /* Task #8    task stack                         */
//OS_STK           Task9Stk[TASK_STK_SIZE];             /* Task #9    task stack                         */

#pragma romdata EXTMEM
rom unsigned char MemFill[6];
rom unsigned char MemArea[24570];

#pragma udata
//    rom char one[]="1--The first message--1";
//    rom char two[]="2--The first message--2";
//    rom char three[]="3--The first message--3";
//OS_EVENT       *MsgQueue;                            /* Message queue pointer                         */
OS_MEM			*MemPtr;
INT8U 	ResForTest[50];
#pragma romdata EXTRAM
//rom INT8U * rom UnusedMem[32];
OS_EVENT       *rom MsgQueue[N_TASKS];                            /* Message queue pointer                         */
rom void  *rom MsgQueueTbl[N_TASKS][MSG_QUEUE_SIZE];                     /* Storage for messages                          */
/*
*********************************************************************************************************
*                                         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);

/*$PAGE*/
/*
*********************************************************************************************************
*                                                  MAIN
*********************************************************************************************************
*/
void LoopForTest(void)
{
	INT8U	i;
	i=0;

	OS_ENTER_CRITICAL();
		for(;;){
			i++;
			i--;
/*			_asm
			movf STKPTR,0,0
			lfsr 2,0x300
			movwf POSTINC2,0
			movff TOSU,POSTINC2
			movff TOSH,POSTINC2
			movff TOSL,POSTINC2
						
			movlw 50
			lfsr 2,0x300
			rd_lloop:
			tblrdpostinc
			movff TABLAT,POSTINC2
			decf WREG,0x00,0
			bnz rd_lloop
			_endasm
*/
		}
	OS_EXIT_CRITICAL();
}
	

void main (void)
{
//    PC_DispClrScr(DISP_BGND_BLACK);                        /* Clear the screen                         */

	Func_Brd_Init();
	HW_Bd_Test();
    OSInit();                                              /* Initialize uC/OS-II                      */
    
//    PC_DOSSaveReturn();                                    /* Save environment to return to DOS        */

//    PC_VectSet(uCOS, OSCtxSw);                             /* Install uC/OS-II's context switch vector */

//    PC_ElapsedInit();                                      /* Initialized elapsed time measurement     */

//    TaskUserData[TASK_START_ID].TaskID=TASK_START_ID;
//	strcpy(TaskUserData[TASK_START_ID].TaskName,"StartTask");
   OSTaskCreate(TaskStart, (void *)0, (rom void *)TaskStk[TASK_START_PRIO],TASK_START_PRIO);
//    OSTaskCreateExt(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE-1], TASK_START_PRIO,
//                    TASK_START_ID, &TaskStartStk[0], TASK_STK_SIZE, &TaskUserData[TASK_START_ID], 0);
    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;
	INT16U	times;
	INT8U	localH;
	INT8U	localM;
	INT8U	localS;
    
    times=0x0030;

	localH=17;
	localM=15;
	localS=0;	//16:55:00

    data = data;                                           /* Prevent compiler warning                 */


	Do_LCD_Init();

	Func_Start_TMR1();
	Func_Start_UART();

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

  MemPtr=OSMemCreate(MemArea,32,256,&err);
  if(err!=OS_NO_ERR){
		CheckBytes[0]=255;
		CheckAddr=msg;
		LoopForTest();
  }
  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                   */

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

    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;
				LoopForTest();
			}
			
		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


			if(times&0x0001){
				localS++;
				if(localS>=60){
					localS=0;
					localM++;
					if(localM>=60){
						localM=0;
						localH++;
						if(localH>=24)	localH=0;
					}
				}
				i=Disp_Word(0,0,times,1);
				Display_Time(localH/10+0x30,localH%10+0x30,localM/10+0x30,localM%10+0x30,0);
			}
			else{
				Display_Time(localH/10+0x30,localH%10+0x30,localM/10+0x30,localM%10+0x30,1);
			}
			
//			if(times&0x0001)
//	    		Display_Start_Picture();
//	    	else
//	    		Do_Clear_Screen(0,0,7,127);

//				i=Disp_Word(0,0,times,1);
				times++;
				if(times>0x0039)	times=0x0030;
    	}
    	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);
			LoopForTest();

   		}


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


   		}
	}
}
/*$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;
    
    data = data;
    for (;;) {
/*			addr1=OSMemGet(MemPtr,&err);
			if(err!=OS_NO_ERR){
				CheckBytes[0]=TASK_1_PRIO+64;
				CheckAddr=addr1;
				LoopForTest();
			}
		msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);

			err=OSMemPut(MemPtr,addr1);
			if(err!=OS_NO_ERR){
				CheckBytes[0]=TASK_1_PRIO+32;
				CheckAddr=msg;
				LoopForTest();
			}
*/
		msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);

//		if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006
		if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006){

			CheckBytes[0]=TASK_1_PRIO+64;
			CheckBytes[1]=err;
			CheckAddr=msg;
			LoopForTest();

		}
		else if(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){
			CheckBytes[0]=TASK_1_PRIO;
			CheckBytes[1]=err;
			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);
			LoopForTest();
		}
		else{

			addr1=OSMemGet(MemPtr,&err);
			for(i=1;i<16;i++)		addr1[i]=0xEE;
			if(err!=OS_NO_ERR){
				CheckBytes[0]=TASK_1_PRIO+80;
				CheckAddr=addr1;
				LoopForTest();
			}

			msg[TASK_1_PRIO]=TASK_1_PRIO;
			for(i=1;i<16;i++)	addr1[i]=msg[i];
			
	        OSQPost(MsgQueue[TASK_START_PRIO],addr1);

			err=OSMemPut(MemPtr,msg);
			if(err!=OS_NO_ERR){
				CheckBytes[0]=TASK_1_PRIO+96;
				CheckAddr=msg;
				LoopForTest();
			}

//			msg[TASK_1_PRIO]=TASK_1_PRIO;
//	        OSQPost(MsgQueue[TASK_START_PRIO],msg);
//	        OSQPost(MsgQueue[TASK_START_PRIO],(rom INT8U *)8191);
		}

/*	//OS_ENTER_CRITICAL();
		for(i=1;i<16;i++)	CheckBytes[i]=msg[i];
	//OS_EXIT_CRITICAL();
		if(CheckBytes[TASK_13_PRIO]!=TASK_13_PRIO
			|| CheckBytes[TASK_12_PRIO]!=TASK_12_PRIO
			|| CheckBytes[TASK_11_PRIO]!=TASK_11_PRIO
			|| CheckBytes[TASK_10_PRIO]!=TASK_10_PRIO
			|| CheckBytes[TASK_9_PRIO]!=TASK_9_PRIO
			|| CheckBytes[TASK_8_PRIO]!=TASK_8_PRIO
			|| CheckBytes[TASK_7_PRIO]!=TASK_7_PRIO
			|| CheckBytes[TASK_6_PRIO]!=TASK_6_PRIO
			|| CheckBytes[TASK_5_PRIO]!=TASK_5_PRIO
			|| CheckBytes[TASK_4_PRIO]!=TASK_4_PRIO
			|| CheckBytes[TASK_3_PRIO]!=TASK_3_PRIO
			|| CheckBytes[TASK_2_PRIO]!=TASK_2_PRIO){
			CheckBytes[0]=TASK_1_PRIO;
			LoopForTest();
		}

		addr1=OSMemGet(MemPtr,&err);
		for(i=0;i<16;i++){
			addr1[i]=msg[i];
		}
		addr1[TASK_1_PRIO]=TASK_1_PRIO;

	//OS_ENTER_CRITICAL();
		for(i=1;i<16;i++)	CheckBytes[i]=addr1[i];
	//OS_EXIT_CRITICAL();
		if(CheckBytes[TASK_13_PRIO]!=TASK_13_PRIO
			|| CheckBytes[TASK_12_PRIO]!=TASK_12_PRIO
			|| CheckBytes[TASK_11_PRIO]!=TASK_11_PRIO
			|| CheckBytes[TASK_10_PRIO]!=TASK_10_PRIO
			|| CheckBytes[TASK_9_PRIO]!=TASK_9_PRIO
			|| CheckBytes[TASK_8_PRIO]!=TASK_8_PRIO
			|| CheckBytes[TASK_7_PRIO]!=TASK_7_PRIO
			|| CheckBytes[TASK_6_PRIO]!=TASK_6_PRIO
			|| CheckBytes[TASK_5_PRIO]!=TASK_5_PRIO
			|| CheckBytes[TASK_4_PRIO]!=TASK_4_PRIO
			|| CheckBytes[TASK_3_PRIO]!=TASK_3_PRIO
			|| CheckBytes[TASK_2_PRIO]!=TASK_2_PRIO
			|| CheckBytes[TASK_1_PRIO]!=TASK_1_PRIO){
			CheckBytes[0]=TASK_1_PRIO;

⌨️ 快捷键说明

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