Hi,
When calling app_sched_event_put inside the same hanler i am exit to main for(;;)
The main loop
for (;;)
{
nrf_drv_wdt_channel_feed(m_channel_id);
app_sched_execute();//going to otaWifi_scheduler_event_handler
//never get here
power_manage();
}
Scheduler event handler
void otaWifi_scheduler_event_handler(void *p_event_data, uint16_t event_size)
{
uint32_t err_code = app_sched_event_put(NULL, 1, otaWifi_scheduler_event_handler);
APP_ERROR_CHECK(err_code);
//never exit to main loop from here!!!!
}
Why?
UPDATE 1
changed to:
uint32_t err_code = app_sched_event_put(NULL, 0, otaWifi_scheduler_event_handler);
APP_ERROR_CHECK(err_code);
but still not exit, go to the while loop inside "app_sched_execute":
void app_sched_execute(void)
{
while (!is_app_sched_paused() && !APP_SCHED_QUEUE_EMPTY())
{
// Since this function is only called from the main loop, there is no
// need for a critical region here, however a special care must be taken
// regarding update of the queue start index (see the end of the loop).
uint16_t event_index = m_queue_start_index;
void * p_event_data;
uint16_t event_data_size;
app_sched_event_handler_t event_handler;
p_event_data = &m_queue_event_data[event_index * m_queue_event_size];
event_data_size = m_queue_event_headers[event_index].event_data_size;
event_handler = m_queue_event_headers[event_index].handler;
event_handler(p_event_data, event_data_size);
// Event processed, now it is safe to move the queue start index,
// so the queue entry occupied by this event can be used to store
// a next one.
m_queue_start_index = next_index(m_queue_start_index);
}
UPDATE 2
void otaWifi_scheduler_event_handler(void *p_event_data, uint16_t event_size)
{
bool finish = otaPro();
if(finish)
return;
else{
uint32_t err_code = app_sched_event_put(NULL, 0, otaWifi_scheduler_event_handler);
APP_ERROR_CHECK(err_code);
//never exit to main loop from here!!!!
}
}
This is still problem because i need to feed a WDG in main loop!