Files
klipper/src/simulator/main.c
Kevin O'Connor 78982ebb51 avr: Implement internal avr specific timer to handle 16bit overflows
Don't rely on the generic scheduler code to always have a timer no
more than 1ms in the future.  Instead, create an avr specific timer
that will be called every 0x8000 ticks.  This simplifies the generic
code and it reduces the amount of code that needs to be run every
millisecond.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2017-08-08 00:27:28 -04:00

123 lines
2.0 KiB
C

// Main starting point for host simulator.
//
// Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net>
//
// This file may be distributed under the terms of the GNU GPLv3 license.
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include "board/misc.h" // timer_from_us
#include "board/irq.h" // irq_disable
#include "sched.h" // sched_main
/****************************************************************
* Interrupts
****************************************************************/
irqstatus_t Interrupt_off;
void
irq_disable(void)
{
Interrupt_off = 1;
barrier();
}
void
irq_enable(void)
{
barrier();
Interrupt_off = 0;
}
irqstatus_t
irq_save(void)
{
irqstatus_t flag = Interrupt_off;
irq_disable();
return flag;
}
void
irq_restore(irqstatus_t flag)
{
barrier();
Interrupt_off = flag;
}
void
irq_wait(void)
{
}
void
irq_poll(void)
{
}
/****************************************************************
* Timers
****************************************************************/
uint32_t
timer_from_us(uint32_t us)
{
return 0; // XXX
}
uint8_t
timer_is_before(uint32_t time1, uint32_t time2)
{
return (int32_t)(time1 - time2) < 0;
}
uint32_t
timer_read_time(void)
{
return 0; // XXX
}
void
timer_kick(void)
{
}
/****************************************************************
* Turn stdin/stdout into serial console
****************************************************************/
// Encode and transmit a "response" message
void
console_sendf(const struct command_encoder *ce, va_list args)
{
}
/****************************************************************
* Startup
****************************************************************/
// Periodically sleep so we don't consume all CPU
void
simu_pause(void)
{
// XXX - should check that no timers are present.
usleep(1);
}
DECL_TASK(simu_pause);
// Main entry point for simulator.
int
main(void)
{
// Make stdin non-blocking
fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK);
sched_main();
return 0;
}