//led0任务函数 void led0_task(void *p_arg) { OS_ERR err; u8 test[20]; u8 times = 0; CPU_SR_ALLOC(); u8 temp; p_arg = p_arg; while(1) { OS_CRITICAL_ENTER(); temp = FloatTaskTCB.MsgQ.NbrEntriesSize - FloatTaskTCB.MsgQ.NbrEntries; printf("que remain %d.\r\n",temp); OS_CRITICAL_EXIT(); sprintf((char *)test,"led_send_que %d",times++); printf("led0 task send que.\r\n"); OSTaskQPost((OS_TCB* )&FloatTaskTCB, //向任务Msgdis发送消息 (void* )test, (OS_MSG_SIZE)20, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } }
//定时器1的回调函数 void tmr1_callback(void *p_tmr,void *p_arg) { u8 *pbuf; static u8 msg_num; OS_ERR err; pbuf = mymalloc(SRAMIN,10); //申请10个字节 if(pbuf) //申请内存成功 { msg_num++; sprintf((char*)pbuf,"ALIENTEK %d",msg_num); //发送消息 OSTaskQPost((OS_TCB* )&Msgdis_TaskTCB, //向任务Msgdis发送消息 (void* )pbuf, (OS_MSG_SIZE)10, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); if(err != OS_ERR_NONE) { myfree(SRAMIN,pbuf); //释放内存 OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err); //停止定时器1 tmr1sta = !tmr1sta; LCD_ShowString(40,150,100,16,16,"TMR1 STOP! "); } } }
//led0任务函数 void led0_task(void *p_arg) { OS_ERR err; u8 test[20]; u8 test1[20] = "abcde"; u8 test2[20] = "12345"; u8 test3[20] = "45678"; u8 times = 0; CPU_SR_ALLOC(); u8 temp; p_arg = p_arg; while(1) { OS_CRITICAL_ENTER(); temp = FloatTaskTCB.MsgQ.NbrEntriesSize - FloatTaskTCB.MsgQ.NbrEntries; printf("que remain %d.\r\n",temp); OS_CRITICAL_EXIT(); sprintf((char *)test,"led_send_que %d",times++); printf("led0 task send que.\r\n"); //消息队列传送的是地址 且不会进行数据拷贝 //同一地址传输速度比处理任务快 会导致数据被覆盖 造成数据丢失 //消息队列传送的是需要读取某个地址的次数 OSTaskQPost((OS_TCB* )&FloatTaskTCB, //向任务Msgdis发送消息 (void* )test, (OS_MSG_SIZE)20, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); OSTaskQPost((OS_TCB* )&FloatTaskTCB, //向任务Msgdis发送消息 (void* )&test1, (OS_MSG_SIZE)20, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); OSTaskQPost((OS_TCB* )&FloatTaskTCB, //向任务Msgdis发送消息 (void* )&test2, (OS_MSG_SIZE)20, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); OSTaskQPost((OS_TCB* )&FloatTaskTCB, //向任务Msgdis发送消息 (void* )&test3, (OS_MSG_SIZE)20, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } }
void TIM2_IRQHandler() { OS_ERR err; if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET) { OSIntEnter(); OSTaskQPost(&TIM2Hisr_TCB,NULL,0,NULL,&err); TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); OSIntExit(); } }
void TERM_TASK_sensor(void *p_arg) { OS_ERR err; while(DEF_ON) { TERM_get_sensor_value(&acc_sensor_x, &acc_sensor_y); //acc_sensor_x=TERM_get_accsensor_x(); OSTaskQPost((OS_TCB *)&TERM_TCB_motor_x, (void *)acc_sensor_x, (OS_MSG_SIZE)sizeof(acc_sensor_x), (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR *)&err); //acc_sensor_y=TERM_get_accsensor_y(); OSTaskQPost((OS_TCB *)&TERM_TCB_motor_y, (void *)acc_sensor_y, (OS_MSG_SIZE)sizeof(acc_sensor_y), (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR *)&err); OSTimeDlyHMSM(0, 0, 0, 500, OS_OPT_TIME_HMSM_STRICT, &err); } }
void tasklet_schedule(struct tasklet_struct *t) { OS_ERR err; CPU_SR cpu_sr; CPU_CRITICAL_ENTER(); if(t->state == TASKLET_STATE_SCHED) { CPU_CRITICAL_EXIT(); return; } t->state = TASKLET_STATE_SCHED; CPU_CRITICAL_EXIT(); OSTaskQPost(&TaskletActionTCB ,t,sizeof(struct tasklet_struct), OS_OPT_POST_FIFO,&err); if(err != OS_ERR_NONE) USBH_DBG("tasklet_schedule OSTaskQPost Failed %d\r\n",err); }
void ts_recv_isr(void *recv_buff_0, void *recv_nbr_0) { OS_ERR err; uint32_t i; uint32_t start_pos; uint8_t *recv_buff = (uint8_t *)recv_buff_0; uint32_t *recv_nbr = (uint32_t *)recv_nbr_0; uint32_t len; if (*recv_nbr >= TS_RECV_BUFF_LEN) { *recv_nbr = 0; } *recv_nbr += UART_Receive(LPC_UART0, recv_buff + *recv_nbr, \ TS_RECV_BUFF_LEN - *recv_nbr); start_pos = *recv_nbr - 1; if (*recv_nbr > MIN_RECV_LEN) { for (i = 0; i < *recv_nbr-1; i++) { //if (recv_buff[i] == 0xa5 && recv_buff[i+1] == 0x5a) //if (recv_buff[i] == 0xa5 && recv_buff[i+1] == 0x5a) if (recv_buff[i] == START_CHAR) { start_pos = i; break; } } } else return; if (start_pos < *recv_nbr - 1 ) { if (start_pos != 0) { for (i = 0; i < *recv_nbr - start_pos ; i++) { recv_buff[i] = recv_buff[i + start_pos]; } *recv_nbr -= start_pos; } if (*recv_nbr > MIN_RECV_LEN) { //if (*recv_nbr == recv_buff[2] + 3) if (recv_buff[*recv_nbr - 2] == END_CHAR_1 && recv_buff[*recv_nbr - 1] == END_CHAR_2) { len = *recv_nbr; recv_buff[len] = recv_buff[4]; recv_buff[len + 1] = recv_buff[5]; recv_buff[len + 2] = recv_buff[6]; Mem_Copy(recv_buff_copy, recv_buff, len + 3); *recv_nbr = 0; OSTaskQPost(&ts_serv_task_tcb, (uint8_t *)recv_buff_copy, len + 3, OS_OPT_POST_FIFO, &err); } } else return; } else { *recv_nbr = 1; recv_buff[0] = recv_buff[start_pos]; } }
/** * @brief This function handles PPP interrupt request. * @param None * @retval None */ void USART1_IRQHandler(void) { OS_ERR err; u8 *memblk; u8 getChar; u32 i,index; if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); getChar = (u8)USART_ReceiveData(USART1); switch(gUsart1RxState) { case USART1_RX_IDLE: switch(gUsart1RxStep) { case 0: if(getChar == 0x5F) gUsart1RxStep++; else gUsart1RxStep = 0; break; case 1: if(getChar == 0x5F) gUsart1RxStep++; else gUsart1RxStep = 0; break; case 2: gUsart1RxStep++; gUsart1RxLength = getChar; break; case 3: gUsart1RxStep++; gUsart1RxState = USART1_RX_BUSY; gUsart1RxPoint = gUsart1RxBuff; gUsart1RxLength = (u16)(getChar << 8)|(gUsart1RxLength); break; default: gUsartRxOver = 0; gUsart1RxStep = 0; gUsart1RxPoint = NULL; gUsart1RxState = USART1_RX_IDLE; break; } break; case USART1_RX_BUSY: index = gUsart1RxStep - 4; if((getChar == 0xAA)&&(gUsart1RxStep-4 == gUsart1RxLength)) { gUsartRxOver = 1; } else if((getChar == 0x55)&&(gUsartRxOver == 1)) { memblk = (u8*)AllocMem(gUsart1RxLength); if(memblk != NULL) { memset(memblk,0,gUsart1RxLength); for(i=0;i<gUsart1RxLength;i++) { memblk[i] = gUsart1RxBuff[i]; } gUsartRxOver = 0; gUsart1RxStep = 0; gUsart1RxPoint = NULL; gUsart1RxState = USART1_RX_IDLE; OSTaskQPost(&MsgHandler_TCB,NULL,0,OS_OPT_POST_FIFO,&err); } } else { if((gUsart1RxStep-4) > gUsart1RxLength) { gUsartRxOver = 0; gUsart1RxStep = 0; gUsart1RxLength = 0; gUsart1RxPoint = NULL; gUsart1RxState = USART1_RX_IDLE; } gUsart1RxStep++; gUsart1RxPoint[index] = getChar; } break; default: gUsartRxOver = 0; gUsart1RxStep = 0; gUsart1RxLength = 0; gUsart1RxPoint = NULL; gUsart1RxState = USART1_RX_IDLE; break; } } }