MCPcopy Create free account
hub / github.com/ArduPilot/ardupilot / init

Method init

libraries/AP_HAL_Linux/Scheduler.cpp:102–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100}
101
102void Scheduler::init()
103{
104 int ret;
105 const struct sched_table {
106 const char *name;
107 SchedulerThread *thread;
108 int policy;
109 int prio;
110 uint32_t rate;
111 } sched_table[] = {
112 SCHED_THREAD(timer, TIMER),
113 SCHED_THREAD(uart, UART),
114 SCHED_THREAD(rcin, RCIN),
115 SCHED_THREAD(io, IO),
116 };
117
118 _main_ctx = pthread_self();
119
120 init_realtime();
121 init_cpu_affinity();
122
123 /* set barrier to N + 1 threads: worker threads + main */
124 unsigned n_threads = ARRAY_SIZE(sched_table) + 1;
125 ret = pthread_barrier_init(&_initialized_barrier, nullptr, n_threads);
126 if (ret) {
127 AP_HAL::panic("Scheduler: Failed to initialise barrier object: %s",
128 strerror(ret));
129 }
130
131 for (size_t i = 0; i < ARRAY_SIZE(sched_table); i++) {
132 const struct sched_table *t = &sched_table[i];
133
134 t->thread->set_rate(t->rate);
135 t->thread->set_stack_size(1024 * 1024);
136 t->thread->start(t->name, t->policy, t->prio);
137 }
138
139#if defined(DEBUG_STACK) && DEBUG_STACK
140 register_timer_process(FUNCTOR_BIND_MEMBER(&Scheduler::_debug_stack, void));
141#endif
142}
143
144void Scheduler::_debug_stack()
145{

Callers

nothing calls this directly

Calls 5

strerrorFunction · 0.85
panicFunction · 0.70
set_rateMethod · 0.45
set_stack_sizeMethod · 0.45
startMethod · 0.45

Tested by

no test coverage detected