This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

timer is strange in sometimes

nrf5_SDK 12.3.0 nrf52832 softdevice 3.1

My app used timer for buzzer and led. This timer call itself, and variable is discount. This is normal mostly, but in somtimes that is strange. That like timer was skip or so fast. I used RTT log.

This is my code. ledcnt start at 20.

#define APP_TIMER_PRESCALER 0
#define APP_TIMER_OP_QUEUE_SIZE 20
#define LED_ON_INTERVAL APP_TIMER_TICKS(300, APP_TIMER_PRESCALER)
#define LED_OFF_INTERVAL APP_TIMER_TICKS(700, APP_TIMER_PRESCALER)

static void timers_init(void)
{
	ret_code_t err_code;

	APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);
	
	err_code = app_timer_create(&led_timer_id, APP_TIMER_MODE_SINGLE_SHOT,
                            led_timer_handler);			
}

static void led_timer_handler(void * p_context)
{
SEGGER_RTT_WriteString(0, "led timer start\n");
uint8_t err_code;
	if(ledcnt > 0) {
		if(ledon) {
			SEGGER_RTT_WriteString(0, "led timer led on\n");
			nrf_gpio_pin_set(LED1);
			nrf_gpio_pin_set(LED2);
			ledon = false;
			err_code = app_timer_start(led_timer_id,LED_ON_INTERVAL,0);
		}else {
			SEGGER_RTT_WriteString(0, "led timer led off\n");
			nrf_gpio_pin_clear(EHI_LED1);
			nrf_gpio_pin_clear(EHI_LED2);
			ledon = true;
			err_code = app_timer_start(led_timer_id,LED_OFF_INTERVAL,0);
		}
		SEGGER_RTT_WriteString(0, "ledcnt--\n");
		sprintf(buf, "%d", ledcnt);
		SEGGER_RTT_WriteString(0, buf);
		SEGGER_RTT_WriteString(0, "\n");
                    ledcnt--;
	}else {
		if(findalert && connect_state && m_nus.is_notification_enabled) {
			if(click) {
				SEGGER_RTT_WriteString(0, "Write 0xEE\n");
					uart_send_data[0] = 0xEE;
					err_code = ble_nus_string_send(&m_nus, uart_send_data, 1);
					APP_ERROR_CHECK(err_code);
			}else {
					SEGGER_RTT_WriteString(0, "Write 0xFF\n");
					uart_send_data[0] = 0xFF;
					err_code = ble_nus_string_send(&m_nus, uart_send_data, 1);
					APP_ERROR_CHECK(err_code);
			}
			click = false;
			findalert = false;
		}
		keepflag = false;
	}
	SEGGER_RTT_WriteString(0, "led timer stop\n");
}

this is normal RTT log.

 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 19
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 18
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 17
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 16
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 15
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 14
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 13
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 12
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 11
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 10
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 9
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 8
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 7
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 6
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 5
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 4
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 3
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 2
 0> led timer stop
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 1
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 0
 0> led timer stop
 0> led timer start
 0> Write 0xFF
 0> led timer stop

this is strange RTT log.

 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 19
 0> led timer stop
 0> 18
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 14
 0> ledcnt--
 0> 13
 0> 12led timer start
 0> led timer led off
 0> ledcnt--
 0> 8
 0> led timer stop
 0> 7led timer start
 0> led timer led on
 0> ledcnt--
 0> 1
 0> led timer stop
 0> 0

and this log another strange RTT log.

 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 19
 0> led timer stop
 0> 18
 0> led timer start
 0> led timer led on
 0> ledcnt--
 0> 13
 0> led timer stop
 0> led timer start
 0> led timer led off
 0> ledcnt--
 0> 8
 0> led timer stop
 0> 7
 0> 6led timer start
 0> led timer led off
 0> ledcnt--
 0> 0
 0> led timer stop

That logs run same code. this problem had seeen when bluetooth has been connected. Why? I need your help.

Related