/******************************************************************************* * @brief register micro task * @author zhanggaoxin * @date 2013-03-19 * @param [in]task: * @param [in]callInterval: * @return T_U8 * @retval the handle of micro task *******************************************************************************/ T_U8 Fwl_MicroTaskRegister(TASK_FUNC task,T_U16 CallInterval)//CallInterval以10ms为单位 { T_U8 i; for(i=0;i<MAX_MICRO_TASK;i++) { if(task_param[i].TaskCalBak == AK_NULL) { task_param[i].TaskCalBak = task; task_param[i].BackUpInterval = task_param[i].CallInterval = CallInterval; RunTaskCnt++; TaskRegMap |= (1<<i);//注册记录 if(RunTaskCnt == 1) { TaskTimer = vtimer_start(10, AK_TRUE, TaskTimerCallBak); if(TaskTimer == ERROR_TIMER) { akerror("task timer start fail",0,1); while(1); } } return i; } } return 0xff; }
static void main_thread(void *pdata) { QueueSetHandle_t qs; QueueSetMemberHandle_t active; ASSERT((qs = xQueueCreateSet(SERIAL_RX_SIZE * 3))); serial_start(cli_serial, 115200, qs); serial_start(&Serial4, 57600, qs); serial_start(&Serial5, cfg.gps_baud_rate ? cfg.gps_baud_rate : 57600, qs); cli_set_output(cli_serial); log_start(cli_serial); cl_enabled = 1; load_eeprom(); cfg.flags &= ~FLAG_HOLDOVER_TEST; if (cfg.flags & FLAG_GPSEXT) { gps_serial = &Serial5; } else { gps_serial = &Serial4; } if (!cfg.holdover) { cfg.holdover = 60; } if (!cfg.loopstats_interval) { cfg.loopstats_interval = 60; } ppscapture_start(); vtimer_start(); tcpip_start(); test_reset(); cli_banner(); if (!(cfg.flags & FLAG_GPSEXT)) { ublox_configure(); if (HAS_FEATURE(PPSEN) && (cfg.flags & FLAG_PPSEN)) { GPIO_OFF(PPSEN); } } cl_enabled = 0; while (1) { watchdog_main = 5; active = xQueueSelectFromSet(qs, pdMS_TO_TICKS(1000)); if (active == cli_serial->rx_q) { int16_t val = serial_get(cli_serial, TIMEOUT_NOBLOCK); ASSERT(val >= 0); cli_feed(val); } else if (active == gps_serial->rx_q) { int16_t val = serial_get(gps_serial, TIMEOUT_NOBLOCK); ASSERT(val >= 0); gps_byte_received(val); if (cfg.flags & FLAG_GPSOUT) { char tmp = val; serial_write(&Serial5, &tmp, 1); } #if 0 } else if (active == Serial5.rx_q) { char tmp = serial_get(&Serial5, TIMEOUT_NOBLOCK); serial_write(&Serial4, &tmp, 1); #endif } } }
T_TIMER Fwl_TimerStartMilliSecond(T_U16 milliSeconds, T_BOOL loop) { return vtimer_start(milliSeconds, loop, vtimer_callback_func); }
T_TIMER Fwl_TimerStartSecond(T_U8 seconds, T_BOOL loop) { return vtimer_start((T_U16)(seconds*1000), loop, vtimer_callback_func); }
T_TIMER Fwl_TimerStart(T_U16 milliSeconds, T_BOOL loop, T_fVTIMER_CALLBACK callback) { return vtimer_start(milliSeconds, loop, callback); }