Hi everyone,
I have one problem with the application timer. When I change the state of characteristic to the value of 1, the following code is executed:
err_code = app_timer_stop(m_mass_timer_id);
p_mass->load_cell_calibration.flag_offset = 1;
err_code = app_timer_start(m_mass_timer_id, MASS_MEAS_100MS_INTERVAL ,NULL);
APP_ERROR_CHECK(err_code);
The m_mass_timer_id handler is defined as:
static void mass_timer_handler(void * p_context)
{
uint8_t err_code;
if(m_mass.mass_flag == 1)
{
m_mass.mass_flag = 0;
err_code = app_timer_start(m_mass_one_cycle_timer_id, MASS_MEAS_30MS_INTERVAL, NULL);
APP_ERROR_CHECK(err_code);
SEGGER_RTT_WriteString(0, "MASS_TIMER\n");
err_code = app_timer_start(m_mass_timer_id, MASS_MEAS_INTERVAL, NULL);
APP_ERROR_CHECK(err_code);
}
else
{
SEGGER_RTT_WriteString(0, "MISTAKE\n");
}
}
where m_mass_one_cyler_timer is executed by the following code:
static void mass_one_cycle_timer_handler(void * p_context)
{
uint8_t err_code;
if(m_mass.load_cell_calibration.flag_offset == 1)
{
err_code = ble_mgs_offset_load_cell_update(&m_mass,0);
APP_ERROR_CHECK(err_code);
}
m_mass.mass_flag = 1;
}
If I change the state of characteristic a few times in a row, then the mass_timer_handler does not instantly execute but it holds on for a few seconds. I do not get any error and I do not know why this latency occurs. I am using SDK 10. The initialization of both timers are defined by the following code:
static void timers_init(void)
{
APP_TIMER_APPSH_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, true);
uint8_t err_code;
err_code = app_timer_create(&m_mass_timer_id, APP_TIMER_MODE_SINGLE_SHOT, mass_timer_handler);
APP_ERROR_CHECK(err_code);
//
err_code = app_timer_create(&m_mass_one_cycle_timer_id, APP_TIMER_MODE_SINGLE_SHOT, mass_one_cycle_timer_handler);
APP_ERROR_CHECK(err_code);
}
I would kindly appreciate your assistance on this issue.
Edit: A few minutes ago, I tested the program only with timer m_mass_timer_id I removed timer m_mass_one_cycle_timer_id, but I got the same problem as was described.
static void mass_timer_handler(void * p_context)
{
uint8_t err_code;
if(m_mass.mass_flag == 1)
{
if(m_mass.load_cell_calibration.flag_offset == 1)
{
err_code = ble_mgs_offset_load_cell_update(&m_mass,0);
APP_ERROR_CHECK(err_code);
}
SEGGER_RTT_WriteString(0, "MASS_TIMER\n");
err_code = app_timer_start(m_mass_timer_id, MASS_MEAS_INTERVAL, NULL);
APP_ERROR_CHECK(err_code);
}
else
{
SEGGER_RTT_WriteString(0, "MISTAKE\n");
}
}
I hope that I will get reply to my problem as fast as possible.
Thanks in advance.
Best regards Mike