mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-31 01:20:44 +00:00
extracted embedded_execute_once() for better
This commit is contained in:
parent
f51adbed2c
commit
0a1bad9b3c
@ -137,39 +137,45 @@ void embedded_dump_timer(void){
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute run_loop once
|
||||||
|
*/
|
||||||
|
void embedded_execute_once(void) {
|
||||||
|
data_source_t *ds;
|
||||||
|
|
||||||
|
// process data sources
|
||||||
|
data_source_t *next;
|
||||||
|
for (ds = (data_source_t *) data_sources; ds != NULL ; ds = next){
|
||||||
|
next = (data_source_t *) ds->item.next; // cache pointer to next data_source to allow data source to remove itself
|
||||||
|
ds->process(ds);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_TICK
|
||||||
|
// process timers
|
||||||
|
while (timers) {
|
||||||
|
timer_source_t *ts = (timer_source_t *) timers;
|
||||||
|
if (ts->timeout > system_ticks) break;
|
||||||
|
run_loop_remove_timer(ts);
|
||||||
|
ts->process(ts);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// disable IRQs and check if run loop iteration has been requested. if not, go to sleep
|
||||||
|
hal_cpu_disable_irqs();
|
||||||
|
if (trigger_event_received){
|
||||||
|
trigger_event_received = 0;
|
||||||
|
hal_cpu_enable_irqs();
|
||||||
|
} else {
|
||||||
|
hal_cpu_enable_irqs_and_sleep();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute run_loop
|
* Execute run_loop
|
||||||
*/
|
*/
|
||||||
void embedded_execute(void) {
|
void embedded_execute(void) {
|
||||||
data_source_t *ds;
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
embedded_execute_once();
|
||||||
// process data sources
|
|
||||||
data_source_t *next;
|
|
||||||
for (ds = (data_source_t *) data_sources; ds != NULL ; ds = next){
|
|
||||||
next = (data_source_t *) ds->item.next; // cache pointer to next data_source to allow data source to remove itself
|
|
||||||
ds->process(ds);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_TICK
|
|
||||||
// process timers
|
|
||||||
while (timers) {
|
|
||||||
timer_source_t *ts = (timer_source_t *) timers;
|
|
||||||
if (ts->timeout > system_ticks) break;
|
|
||||||
run_loop_remove_timer(ts);
|
|
||||||
ts->process(ts);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// disable IRQs and check if run loop iteration has been requested. if not, go to sleep
|
|
||||||
hal_cpu_disable_irqs();
|
|
||||||
if (trigger_event_received){
|
|
||||||
trigger_event_received = 0;
|
|
||||||
hal_cpu_enable_irqs();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
hal_cpu_enable_irqs_and_sleep();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user