void kernel_footprint(void) { init(); // generate code for process struct Process *p = proc_new(proc1_main, 0, sizeof(proc1_stack), proc1_stack); proc_setPri(p, 5); proc_yield(); // generate code for msg Msg msg; msg_initPort(&in_port, event_createSignal(p, SIG_USER1)); msg_put(&in_port, &msg); msg_peek(&in_port); Msg *msg_re = msg_get(&in_port); msg_reply(msg_re); // generate code for signals sig_send(p, SIG_USER0); // generate code for msg Semaphore sem; sem_init(&sem); sem_obtain(&sem); sem_release(&sem); sig_wait(SIG_USER0); }
float measures_intTemp(void) { sem_obtain(&i2c_sem); float res = DEG_T_TO_FLOATDEG(lm75_read(&i2c_bus, LM75_ADDR)); sem_release(&i2c_sem); return res; }
float measures_acceleration(Mma845xAxis axis) { sem_obtain(&i2c_sem); int acc = mma845x_read(&i2c_bus, 0, axis); sem_release(&i2c_sem); if (acc == MMA_ERROR) return -6.66; else return (acc * 9.81 * 4.0) / 512; }
static void NORETURN acc_process(void) { ticks_t start = timer_clock(); mtime_t delay = 0; while (1) { sem_obtain(&i2c_sem); bool r = mma845x_rawAcc(&i2c_bus, 0, acc_buf[acc_idx].acc); sem_release(&i2c_sem); if (!r) kprintf("ACC error!\n"); if (++acc_idx >= countof(acc_buf)) { acc_idx = 0; logging_acc(acc_buf, sizeof(acc_buf)); } /* Wait for the next sample adjusting for time spent above */ delay += (1000 / ACC_SAMPLE_RATE); timer_delay(delay - ticks_to_ms(timer_clock() - start)); } }