#include "system.h" #include "bsp_time.h" #include "nrf_delay.h" #include "hal_imu.h" #include "hal_ble_client.h" #include "hal_ble_host.h" //系统函数 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=1000){ tim = TIME_GetTicks(); SEGGER_RTT_printf(0,"fps=%dms,cnt=%d\n",fps_max,cnt_max); fps_max = 0; } tem1 = NRF_RTC0->COUNTER; #endif } uint16_t lose_pack_all =0; #if LOSSPACK_ENANBLE void LossPack_process(void){ static uint16_t pack_l =0; pack_l = lose_pack_all; // SEGGER_RTT_printf(0,">>>>>loss pack,%d:%d\n",pack_l,rssi); uint8_t buf[8]; uint8_t L = 0; buf[L++] = (uint8_t)(pack_l>>8); buf[L++] = (uint8_t)(pack_l); buf[L++] = (uint8_t)(IMU_GetHostRssi()); BLE_Client_Tx_Send(0,0x03,buf,L); static uint8_t temp =0; temp++; if(temp >= 100){ lose_pack_all =0; temp =0; } } #endif //休眠时间 ms 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(int 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 sprintf(mProcess[process_dex].name_t,"%s",name); #endif process_dex++; // SEGGER_RTT_printf(0,"process num(%d)\n",process_dex); return 0; } void Process_Stop(PROCESS_cb cb) { for(uint8_t i=0;icnt1_rtc = NRF_RTC0->COUNTER; #endif 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(); } #if ProcessTime_EN target->cnt2_rtc = NRF_RTC0->COUNTER; #endif } if(mProcess[i].holdon) ret = 1; //不能进入低功耗 } #if ProcessTime_EN char Display[100]={0}; static uint32_t tim =0; if(TIME_GetTicks()-tim>=DisInterval){ tim = TIME_GetTicks(); for(target=head_handle;target;target=target->next){ if(target->cb && target->cnt2_rtc >= (target->cnt1_rtc +2)) { sprintf(Display,"%s, time:%02f us\n",target->name_t,(target->cnt2_rtc-target->cnt1_rtc)/32.768 * 1000); SEGGER_RTT_printf(0,"%s",Display); memset(Display,0,sizeof(Display)); } } } #endif return ret; } //大循环 void USR_Process(void) { //app进程调度 if(Process_App()==0){ //进入低功耗模式 Sleep_Event(); systermSleepTime = rtc_sleep(); if(systermSleepTime==0){ systermSleepTime = 13; nrf_delay_ms(systermSleepTime); } Wakeup_Event(); } FPS_process(); }