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

📄 taskswitch.c

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


/*
*********************************************************************************************************
*                                              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                 256       /* 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--;
		}
	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;

    INT16S key;
    INT8U	err;
    rom INT8U *msg;
    unsigned short long slint;
    
    INT16U times=0x0030;

    data = data;                                           /* Prevent compiler warning                 */


	Func_Start_TMR1();
	Func_Start_UART();
	
//    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_13_PRIO] = OSQCreate(MsgQueueTbl[TASK_13_PRIO], MSG_QUEUE_SIZE); /* Create a message queue                   */

	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{
		
		if(msg[TASK_13_PRIO]==TASK_13_PRIO){
			_asm
    		BTG	LATC,1,0
    		_endasm

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

   		}

  		}
	}
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #1
*
* Description: This task executes 5 times per second but doesn't do anything.
*********************************************************************************************************
*/
void  Task13 (void *data)
{
    rom INT8U *msg;
    INT8U  err;
    INT8U i;
	rom INT8U *addr1;
	unsigned short long slint;
	INT16U blocks;
	
	blocks=0;
    
    data = data;
    for (;;) {
       OSTimeDly(20);                       /* Wait one second                          */

		msg=(rom INT8U *)0x11a006;	//OSMemGet(MemPtr,&err);

			slint=(unsigned short long)msg;
			if(slint<0x11a006 || slint>=0x11c006){
				CheckBytes[0]=TASK_13_PRIO+64;
				CheckBytes[1]=0xe1;
				CheckAddr=msg;
				LoopForTest();
			}
			
			err=(INT8U)(slint & 0xff);
			if(err!=6){
				CheckBytes[0]=TASK_13_PRIO+128;
				CheckBytes[1]=0xe2;
				CheckAddr=msg;
				LoopForTest();
			}


		for(i=0;i<32;i++)
			msg[i]=0xee;
		msg[TASK_13_PRIO]=TASK_13_PRIO;
        OSQPost(MsgQueue[TASK_START_PRIO],msg);
    }
}
//===================================================================

⌨️ 快捷键说明

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