Пример #1
0
void TaskProtocol(void *p_arg)
{
    MSG_t msg;
     INT8U err , i;
     IDPROTOCOL_t *pProto;
  //   INT8U *p;

 // SendString("TaskProtocol \n");
    for (;;)
    {
        msg = (MSG_t)OSQPend(ProtocolMBox, 0, &err);
      //  OSTimeDly(3000);
         //SendString("taskprotocol");

        switch (msg)
        {
            // 串口1接收到协议数据
            case UART1_BUFF0_RECV:
            case UART1_BUFF1_RECV:
                pProto = &gU1RecvBuff[msg - UART1_BUFF0_RECV];
								if ((pProto->direction & ID_DESTMASK) == ID_RFIRBOARD)
								{
										if (pProto->command == CMD_SETID)
										{
											Flash_Write(RFIR_ID_ADDR,pProto->data,4);//读取buf存入FLASH
													SendString("\n\rID setok:");
												Flash_Read(RFIR_ID_ADDR, MY_ID, 4);    //读取FLASH ID存入BUF
													for(i=0;i<4;i++)//sizeof(ID)
													{
														SendString(";");
														Outint(MY_ID[i]);
													}
										}
								}
									// 查看是否需要应答
								if (IS_PROTO_NEED_ACK(pProto))
								{
										// 返回应答数据
										SendIDAck(USART1, pProto);
								}
								break;
            default:
                break;
        }

    }
}
Пример #2
0
/********************************************************************************
 * FunctionName: TaskSet
 *
 * Description : 设置任务,设置完删除任务
 *
 * Parameters  : None.
 *
 * Returns     : None.
 *******************************************************************************/
void TaskSet(void *p_arg)
{
  unsigned char k, data_flash_temp[208]={0xAE, 0x35, 0x24, 0x70, 0x80, 0xB7, 0x80, 0xBA, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x5C, 0x1B, 0x5E, 0x02, 0x77, 0x02, 0xED, 0xEF, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1F, 0x80, 0x9B, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x8F, 0x70, 0x02, 0xEA, 0x8C, 0x80, 0xB8, 0x80, 0xB9, 0x1D, 0x5C, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x80, 0x9A, 0x1E, 0x80, 0xF5, 0x1E, 0x85, 0x88, 0x80, 0xB8, 0x80, 0xB8, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9A, 0x1E, 0x5C, 0x1E, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x15, 0x80, 0xA4, 0x02, 0x86, 0xB7, 0x04, 0x81, 0x6D, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0x77, 0x02, 0xAF, 0xFB, 0x02, 0x77, 0x1F, 0x5B, 0x1F, 0x5B, 0x1E, 0x5B, 0x1E, 0x80, 0x9B, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7}; 
	// INT8U i;
    u32 seed;
    u8 random_data,i;
   //INT32U msg = 0;
    //INT8U err = 0;
    OS_CPU_SR  cpu_sr = 0;
    p_arg = p_arg;
    DelayMs(30);
    OS_ENTER_CRITICAL();
	
    BSP_Init();
    Flash_Read(RFIR_ID_ADDR, MY_ID, 4);    //读取FLASH ID存入BUF
    #if 0
    SendString("\n\rMY ID:");
    for(i=0;i<4;i++)//sizeof(ID)
    {
      SendString(";");
       Outint(MY_ID[i]);
    }
#endif

/********************************************************************************
 * Description : 任务建立   共9个任务
 *******************************************************************************/

		CT361SndErrSemp = OSSemCreate(0);//creat sem
		
  //创建协议解析任务
    OSTaskCreate(TaskProtocol,
                 (void*)0,
                 &TaskProtocolStk[TASK_PROTOCOL_STKSIZE-1],
                 TASK_PROTOCOL_PRIO);

    //创建串口发送任务
    OSTaskCreate(TaskProtoSend,
                 (void*)0,
                 &TaskProtoSendStk[TASK_PROTO_SEND_STKSIZE-1],
              TASK_PROTO_SEND_PRIO );

    //创建量产测试任务
    OSTaskCreate(TaskTest,
                 (void*)0,
                 &TaskTestStk[TASK_TEST_STKSIZE-1],
                 TASK_TEST_PRIO );

    //创建4432接收任务
    OSTaskCreate(TaskSi4432Read,
                 (void*)0,
                 &TaskSi4432ReadStk[TASK_SET_STKSIZE-1],
                 TASK_Si4432_READ_PRIO );
		
		//创建返回码接收任务
		OSTaskCreate(TaskCT361SndErr,\
						(void*)0,\
						&TaskCT361SndErrStk[TASK_CT361_SND_ERR_STKSIZE-1],\
						TASK_CT361_SND_ERR_PRIO);


/********************************************************************************
 * Description : 创建消息队列
 *******************************************************************************/
  //  SetMBox  = OSQCreate(&SetQBuff[0], TASK_SET_QSIZE);
    ProtocolMBox  = OSQCreate(&ProtocolQBuff[0], TASK_PROTOCOL_QSIZE);
    ProtoSendMBox = OSQCreate(&ProtoSendQBuff[0], TASK_PROTOSEND_QSIZE);
    TestMBox      = OSQCreate(&TestQBuff[0], TASK_TEST_QSIZE);
    Si4432ReadMBox   = OSQCreate(&Si4432ReadQBuff[0], TASK_Si4432READ_QSIZE);

   OS_EXIT_CRITICAL();
   SysTickInit();

    //自我删除
   //  OSTaskDel(OS_PRIO_SELF);
    /*自我删除函数会自动进行任务的调度,因此此处不需要添加延时*/

	Flash_Write(0x800D678,data_flash_temp,208);
  for (;;)
    {
         /**********学习状态指示灯********/
            if(learn_cmd==1)  //学习开始标志位
            {
                                    LED_Send(0);// 绿灯关闭
                                    LED_Learn(1);//红灯闪烁
                                     WatchDog_Feed(); //喂狗
                                    OSTimeDly(4);
                                     WatchDog_Feed(); //喂狗
                                    LED_Learn(0);
                                     WatchDog_Feed(); //喂狗
                                    OSTimeDly(4);
                                     WatchDog_Feed(); //喂狗
                                    Timout_Count--;
                                    if(Timout_Count==0)
                                {
                                    Timout_Count=TIMOUT_20s;
                                    OSQPost(TestMBox, (void*)Stu_Fail); //学习失败信号
                                    learn_cmd=0; //清空学习成功标志位
                                }
            }
             if(learn_cmd==0)  //学习成功标志位
           {
                                    LED_Learn(0);//红灯关闭
                                    LED_Send(1); //绿灯开启
           }
       /**********生成随机滚动序列*********/
           seed+=23;
           if(seed>65000)
           seed=0;
           srand(seed);
           random_data=rand();
           test_roll_list=random_data^0x29;
                     if(learn_cmd==0)
                     {
                      Timout_Count2--;
                        if((Timout_Count2>=40)&&(Timout_Count2<=200))
                    {
                            LED_Send(0);
                    }
                    else if((Timout_Count2<40)&&(Timout_Count2>=1))
                    {
                            LED_Send(1);
                    //  Timout_Count2=200;
                    }
                    else if(Timout_Count2<=0)
                            Timout_Count2=200;
                        }
             WatchDog_Feed(); //喂狗
           OSTimeDly(1);

    }
  }
Пример #3
0
void Outpix (PIXEL val, char *name)
{
	Outint (val->row, name);
	Outint (val->col, name);
}