Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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));
	}
}