#include "main.h" #include "spi.h" uint8_t foo; uint16_t bar; void baz() { foo++; } void hardinit() { /* initializes the hardware */ // enable softtimer isr TCCR1A = _BV(WGM10); TCCR1B = _BV(WGM12) | _BV(CS11); // clk/8 prescaler, 4kHz PWM-freq. TIMSK1 |= _BV(TOIE1); spi_init(); sei(); } void softinit() { } int __attribute__((noreturn)) main(void) { hardinit(); softinit(); foo = 0x87; bar= 0xfafa; for(;;){ SOFTTIMER(1,500) { // do_stuff(); } } } ISR(TIMER1_OVF_vect,ISR_NOBLOCK){ uint16_t tmp; tmp=timer1_acc; tmp++; /* the ATOMIC is acutally only needed if timer1_acc is never read from an ISR, which * is probably the case. * ATOMIC_FORCEON: the ISR_NOBLOCK sets sei() a few cycles before. */ ATOMIC_BLOCK(ATOMIC_FORCEON){ timer1_acc=tmp; } }