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

📄 systask.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  SysTask.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#define  SYSTASK_GLOBALS

#include "includes.h"
#include "bsp.h"
#include "systask.h"
#include "timetask.h"
#include "watchdog.h"
#include "message.h"
#include "tools.h"
#include "portdrv.h"
#include "gpsdrv.h"
#include "systime.h"
#include "zprint.h"
#include "public.h"
#include "audio.h"
#include "alarmer.h"
#include "poweramp.h"
#include "sensor.h"
#include "debug.h"
#include "VTPos.h"
#include "_KeyBoard.h"
#include "UartSer.h"
#include "Predictor.h"
#include "StaName.h"
#include "almtask.h"
#include "DisPlayTask.h"

#define SIZE_MSGBUF         20
#define  LEDPARA_WORKSTATE                  PORT_LEDRED,  20,  20

#if DEBUG_UARTNo_SYSTEM <=1
#if DEBUG_UARTNo_BUSSTATION >1
#define  STATIONFD        0
#define  STATIONARIVED    1
#define  STATIONSTART     2
#define  SHANGPOFD        3
#define  WANDAOFD         4
#define  XIAPOFD          5
#define  ADOBJFD          6

static  INT8U TempBuff[8];
static  INT8U SendBuff[8];
static ASMRULE_STRUCT  rules = {0x7e, 0x7d, 0x02, 0x01};
#endif 
#endif

static OS_QMSG MsgBuf[SIZE_MSGBUF];
static OS_STK  SysTaskStack[STACK_SYSTASK];
static INT8U wdgid;


/*
********************************************************************************
* Handler:  MSG_GPSDRV_NOAPPLY
********************************************************************************
*/
static void HdlMsg_GPSDRV_NOAPPLY(void)
{
#if EN_GPSSLEEP > 0
    if (!SensorValid_LOCK(_ACC) && !GpsIsApplied()) //SleepGps();
#endif
}


static void HdlMsg_AUDIO_TSK(void)
{
    ActivateAudio();
}


#if DEBUG_UARTNo_BUSSTATION <=1
static void HdlMSG_DEBUG_STATIONFD(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
      
      if((SysCurMsg.LMsgPara == SpecailStation.end_sta1) ||(SysCurMsg.LMsgPara == SpecailStation.end_sta2))
      {
           PrintFromUART(DEBUG_UARTNo_BUSSTATION, "终点站"); 
      }
      
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "站即将到达,请下车的乘客做好下车准备!!!\n"); 
}

static void HdlMSG_DEBUG_STATIONARIVED(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
      
      if((SysCurMsg.LMsgPara == SpecailStation.end_sta1) ||(SysCurMsg.LMsgPara == SpecailStation.end_sta2))
      {
           PrintFromUART(DEBUG_UARTNo_BUSSTATION, "终点站"); 
      }
      
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "站到了,下车的乘客,待车停稳后下车,下车后请注意交通规则!!!\n"); 
}

static void HdlMSG_DEBUG_STATIONSTART(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆起步,请拉好扶手,下一站是");
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
}

static void HdlMSG_DEBUG_SHANGPOFD(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆上坡");
    
}
static void HdlMSG_DEBUG_WANDAOFD(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆转弯");
}
static void HdlMSG_DEBUG_XIAPOFD(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆下坡");
      
}
static void HdlMSG_DEBUG_ADOBJ(void)
{
      PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n找到一个广告点"); 
}

static void HdlMSG_DEBUG_NAMEPRINT(void)
{
       PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
       PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
     
}

static void HdlMSG_DEBUG_OPSTATUS(void)
{
       PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
       
       if(SysCurMsg.LMsgPara == STS_SKIPUP)
       {
            PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***快进***"); 
       }
       else if (SysCurMsg.LMsgPara == STS_SKIPDOWN)
       {
            PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***快退***");
       }
       else if (SysCurMsg.LMsgPara == STS_PULLIN)
       {
            PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***进站***"); 
       }
       else if (SysCurMsg.LMsgPara == STS_PULLOUT)
       {
            PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***出站***");  
       } 
}


#else 
static void SendInfoToPC(INT8U type,INT16U id)
{
      INT8U datalen;
      
      TempBuff[1] = type;
      TempBuff[2] = (id>>8) & 0x0ff;
      TempBuff[3] = id & 0x0ff;
      TempBuff[0] = GetChkSum(&TempBuff[1],3);
      
      datalen = AssembleByRules(SendBuff,TempBuff,4,&rules);
      SendFromUART_MEM(1, SendBuff,  datalen);
 
}

static void HdlMSG_DEBUG_STATIONFD(void)
{
       
      SendInfoToPC(STATIONFD,SysCurMsg.LMsgPara);
}

static void HdlMSG_DEBUG_STATIONARIVED(void)
{
      SendInfoToPC(STATIONARIVED,SysCurMsg.LMsgPara);
}

static void HdlMSG_DEBUG_STATIONSTART(void)
{
      SendInfoToPC(STATIONSTART,SysCurMsg.LMsgPara);
    
}

static void HdlMSG_DEBUG_SHANGPOFD(void)
{
      SendInfoToPC(SHANGPOFD,0);
    
}
static void HdlMSG_DEBUG_WANDAOFD(void)
{
      SendInfoToPC(WANDAOFD,0);
}
static void HdlMSG_DEBUG_XIAPOFD(void)
{
      SendInfoToPC(XIAPOFD,0);
      
}

static void HdlMSG_DEBUG_ADOBJ(void)
{
      SendInfoToPC(ADOBJFD,0); 
}

#endif

#if DEBUG_UARTNo_KEYBOARD <= 1
static void HdlMSG_DEBUG_KEYBOARD(void)
{
     INT8U key;
      
      key = SysCurMsg.LMsgPara;
      
      switch(key)
      {
         case 0x01:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[1](礼貌用语1)");
         break;
         case 0x02:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[5](增大音量)");
         break;
         case 0x03:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[9](下行)");
         break;
         case 0x04:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n进站");
         break; 
         case 0x05:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[2](礼貌用语2)"); 
         break;
         case 0x06:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[6](减小音量)"); 
         break;
         case 0x07:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[0](快退)"); 
         break;
         case 0x08:                           
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n出站"); 
         break;
         case 0x09:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[3](礼貌用语3)"); 
         break;
         case 0x0a:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[7](按键音启闭)"); 
         break;
         case 0x0b:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n确认键(快进)"); 
         break;
         case 0x0c:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n重拨键"); 
         break;
         case 0x0d:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[4](礼貌用语4)"); 
         break;
         case 0x0e:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[8](上行)");
         break;
         case 0x0f:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n取消键"); 
         break;
         case 0x10:
         PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n功能切换键"); 
         break;
         default:
         break;
         
      }
}

#endif

static FUNCENTRY_STRUCT functionentry[] = {
                                           
                                              MSG_GPSDRV_NOAPPLY,             HdlMsg_GPSDRV_NOAPPLY,
#if DEBUG_UARTNo_SYSTEM <=1
                                              
                                              MSG_DEBUG_STATIONFD,            HdlMSG_DEBUG_STATIONFD,
                                              MSG_DEBUG_STATIONARIVED,        HdlMSG_DEBUG_STATIONARIVED,
                                              MSG_DEBUG_STATIONSTART,         HdlMSG_DEBUG_STATIONSTART,
                                              MSG_DEBUG_SHANGPOFD,            HdlMSG_DEBUG_SHANGPOFD,
                                              MSG_DEBUG_WANDAOFD,             HdlMSG_DEBUG_WANDAOFD,
                                              MSG_DEBUG_XIAPOFD,              HdlMSG_DEBUG_XIAPOFD,
                                              MSG_DEBUG_ADOBJ,                HdlMSG_DEBUG_ADOBJ,
#if DEBUG_UARTNo_KEYBOARD <= 1
                                              MSG_DEBUG_KEYBOARD,             HdlMSG_DEBUG_KEYBOARD,
#endif
#if DEBUG_UARTNo_BUSSTATION <=1
                                              MSG_DEBUG_NAMEPRINT,            HdlMSG_DEBUG_NAMEPRINT,
                                              MSG_DEBUG_OPSTATUS,             HdlMSG_DEBUG_OPSTATUS,
#endif
#endif
                                              MSG_AUDIO_TSK,                  HdlMsg_AUDIO_TSK
                                              
                                        
 };


static void SysTask(void *pd)
{
    pd = pd;
    ComType = 0;
    
#if DEBUG_UARTNo_SYSTEM <= 1  
    PrintFromUART(DEBUG_UARTNo_SYSTEM, "启动SysTask......\n");
#endif   
   	InitSysTime();	
   	InitGpsDrv();
   	InitPortDrv();
    InitPowerAmp();
    VTPosInit();
     
    InitUartSer();

    InstallPermnentPort(LEDPARA_WORKSTATE);
    
        

    wdgid = ApplyWatchDogID();

    for(;;) 
    {
        if (OSQPend(SysTaskMsgQue, 20, &SysCurMsg) == OS_NO_ERR) 
        {
            FindProcEntry(SysCurMsg.MsgID, functionentry, sizeof(functionentry)/sizeof(functionentry[0]));
        }
        
        ResetWatchDog(wdgid);
    }
}

void CreateSysTask(void)
{
    SysTaskMsgQue = OSQCreate(MsgBuf, sizeof(MsgBuf)/sizeof(MsgBuf[0]));
    OSTaskCreate(SysTask, (void *)0, &SysTaskStack[STACK_SYSTASK], PRIO_SYSTASK);
}

⌨️ 快捷键说明

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