#include "exception.h" #include "system.h" #include "bsp_time.h" #include "nrf_delay.h" #include "hal_wearshoes.h" typedef struct _Task_UseTime { uint32_t task_id; uint32_t task_us; uint32_t total_us; } Task_UseTime_t; static int _report_task_useTime_code = 0; static bool is_report_task_useTime = false; static Task_UseTime_t last_round_task_max_useTime = {0xFFFFFFFF,0,0},cur_round_task_max_useTime = {0xFFFFFFFF,0,0},all_round_task_max_useTime = {0xFFFFFFFF,0,0}; //系统函数 void FPS_process(void) { #if DEBUG_FPS static uint32_t tem1 = 0; static uint32_t tem2 = 0; static uint32_t fps_max=0; static uint32_t cnt_max=0; uint32_t fps; tem2 = NRF_RTC0->COUNTER; if(tem2=5000){ tim = TIME_GetTicks(); DEBUG_LOG("fps=%dms,cnt=%d\n",fps_max,cnt_max); fps_max = 0; } tem1 = NRF_RTC0->COUNTER; #endif } //休眠时间 ms static uint32_t systermSleepTime = 1000; static uint8_t sleep_num = 0; static Sleep_cb sleep_cb[sleep_cb_max]={0}; int Sleep_Regist(Sleep_cb cb) { for(uint8_t i=0;i=process_max) return -1; mProcess[process_dex].cb = cb; mProcess[process_dex].enable =1; mProcess[process_dex].Peroid = peroid; mProcess[process_dex].tim = TIME_GetTicks(); #if ProcessTime_EN mProcess[process_dex].name = name; #endif process_dex++; // DEBUG_LOG("process num(%d)\n",process_dex); return 0; } void Process_Stop(PROCESS_cb cb) { for(uint8_t i=0;iCOUNTER; #endif uint32_t cnt1 = NRF_RTC0->COUNTER; if(mProcess[i].Peroid ==0) mProcess[i].cb(); else if(TIME_GetTicks()-mProcess[i].tim >= mProcess[i].Peroid ){ mProcess[i].tim = TIME_GetTicks(); mProcess[i].cb(); } uint32_t cnt2 = NRF_RTC0->COUNTER; if(cnt2 cur_round_task_max_useTime.task_us) { cur_round_task_max_useTime.task_us = task_useTime; cur_round_task_max_useTime.task_id = i; } #if ProcessTime_EN if(NRF_RTC0->COUNTERCOUNTER+16777216-useTime); else useTime = (NRF_RTC0->COUNTER-useTime); useTime = useTime*1000/32.768; if(mProcess[i].useTime all_round_task_max_useTime.task_us) { all_round_task_max_useTime.task_us = cur_round_task_max_useTime.task_us; all_round_task_max_useTime.task_id = cur_round_task_max_useTime.task_id; } if(is_report_task_useTime) { sprintf(buf,"code:%d,report useTime:%d,%d,%d,%d,%d,%d,%d,%d\r\n",_report_task_useTime_code, \ last_round_task_max_useTime.task_id, \ last_round_task_max_useTime.task_us, \ last_round_task_max_useTime.total_us, \ cur_round_task_max_useTime.task_id, \ cur_round_task_max_useTime.task_us, \ cur_round_task_max_useTime.total_us, \ all_round_task_max_useTime.task_id, \ all_round_task_max_useTime.task_us); Except_TxError(EXCEPT_EXCEPTION,buf); is_report_task_useTime = false; } last_round_task_max_useTime.task_us = cur_round_task_max_useTime.task_us; last_round_task_max_useTime.total_us = cur_round_task_max_useTime.total_us; last_round_task_max_useTime.task_id = cur_round_task_max_useTime.task_id; for(i=0;iCOUNTER; if(tem2=DisInterval){ tim = TIME_GetTicks(); DEBUG_LOG("\n============ Tatol(%d process) : %d us ==========\n",process_dex,fps_max); for(i=0;i500) DEBUG_LOG("[%d]%s : %d us\n",i,mProcess[i].name,mProcess[i].useTime); mProcess[i].useTime = 0; } DEBUG_LOG("\n",fps_max); fps_max = 0; } tem1 = NRF_RTC0->COUNTER; #endif return ret; } //触发上报上一轮、当前轮、所有轮任务中最大的耗时任务和ID,因为实时性的原因,所以不作保证性发送。 void Process_report_task_useTime(int report_task_useTime_code) { _report_task_useTime_code = report_task_useTime_code; is_report_task_useTime = true; } //大循环 void USR_Process(void) { //app进程调度 if(Process_App()==0){ //进入低功耗模式 Sleep_Event(); systermSleepTime = rtc_sleep(hal_wearshoes_is_wearshoes()); // DEBUG_LOG("process_sleep_time:%d\n",process_sleep_time); Wakeup_Event(); } FPS_process(); }