SDK14+NRF52832.
I used one timer to do something every millisecond. and I used another function to do a loop action, the function maybe breaked if the time period exceed one value.
now I found when execute the loop action function, the timer can't trigger, if normally it should be called every millisecond.
#define NRF_TICK_INTERVAL APP_TIMER_TICKS(1) static void nrf_tick_init(void) { uint32_t err_code; err_code = app_timer_create(&m_nrf_tick_timer_id, APP_TIMER_MODE_REPEATED, nrf_tick_event_handler); APP_ERROR_CHECK(err_code); err_code = app_timer_start(m_nrf_tick_timer_id, NRF_TICK_INTERVAL, NULL); APP_ERROR_CHECK(err_code); } void nrf_ticks_set(unsigned long tick) { nrf_ms_ticks = tick; } //----------------------------------------------------------------- int nrf_ticks_get(unsigned long *tick) { *tick = nrf_ms_ticks; return 0; } //----------------------------------------------------------------- static void nrf_tick_event_handler(void * p_context) { UNUSED_PARAMETER(p_context); nrf_ms_ticks++; NRF_LOG_PRINTF("%s\n", __FUNCTION__); } void home_motor_then_stop(void) { NRF_LOG_PRINTF("HOMEing...\n"); bool tail_flag = Is_arrived_tail_point(); unsigned long start_time = 0, end_time = 0, interval_len; if(false == tail_flag) { set_motor_to_tail(GLOBAL_MIN_GRADE); nrf_ticks_get(&start_time); end_time = start_time; while((false==tail_flag)&&((end_time-start_time)<=30000)) //the end_time can't increase { nrf_ticks_get(&end_time); //always get the same value interval_len = end_time - start_time; NRF_LOG_PRINTF("stop_cup_then_home, interval_len=%d\n ", interval_len); tail_flag = Is_arrived_tail_point(); }; stop_motor(); } } int main(void) { application_init();//here called nrf_tick_init() home_motor_then_stop(); // while(1) { power_manage(); } } //
I found when run into the while of home_motor_then_stop(), the nrf_tick_event_handler can't trigger. this lead the function can't return.
what fault ?