Long wait after given semaphore

The main loop in our nRF9160 (NCS v1.8.0) is a typical main loop with semaphore following https://docs.zephyrproject.org/latest/kernel/services/threads/system_threads.html?highlight=writing main function#id2

static K_SEM_DEFINE(timer_semaphore, 0, 1);


static void rtc0_handler(nrfx_rtc_int_type_t int_type)
{
// [ some logic related to RTC count ]

  if(expired) {
    LOG_INF("Give timer semaphore");
    k_sem_give(&timer_semaphore);
  }
}

static int rtc_config(void)
{
  int32_t err_code = 0;
  nrfx_rtc_config_t config = NRFX_RTC_DEFAULT_CONFIG;
  config.prescaler = 4095;
  err_code = nrfx_rtc_init(&rtc0, &config, rtc0_handler);
// [ some error logic ]
  nrfx_rtc_tick_enable(&rtc0, true);
  nrfx_rtc_enable(&rtc0);
  return 0;
}

void main(void)
{
// [ some initializations ]
  rtc_config();
// [ other initializations ]

  while (1)
  {
    LOG_INF("Wait for timer semaphore");
    k_sem_take(&timer_semaphore, K_FOREVER);
    LOG_INF("A timer expired");
// [ sensor data collect and send ]
  }
}

 

But there is a huge delay between the time semaphore is given and taken.

Some typical log extract follows:

00> [00:12:54.485,198] <inf> : Wait for timer semaphore
00> [00:15:40.744,873] <inf> : Give timer semaphore
00> [00:17:04.000,000] <inf> : A timer expired

-> 84 seconds delay

00> [00:17:06.688,018] <inf> : Wait for timer semaphore
00> [00:18:40.744,873] <inf> : Give timer semaphore
00> [00:21:23.187,957] <inf> : A timer expired

-> 83 seconds delay

00> [00:21:26.028,198] <inf> : Wait for timer semaphore
00> [00:24:40.744,873] <inf> : Give timer semaphore
00> [00:25:36.000,000] <inf> : A timer expired

-> 56 seconds delay

How is it possible to troubleshoot this kind of issue?

Parents Reply Children
No Data
Related