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; } } }
/******************************************************************************** * 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); } }
void Outpix (PIXEL val, char *name) { Outint (val->row, name); Outint (val->col, name); }