Hello everyone , I hope you guys can help me out ... I'm gonna try to port riot to the smaller variations of atmel processors ( I'm thinking atmega16 ) .. I'm more of a software guy , I haven't worked with embedded stuff a lot .. hope you guys help me out .. Thanks
On 09-Dec-2015 6:21 pm, "Kaspar Schleiser" <kas...@schleiser.de> wrote: > > Hey, > > On 12/09/15 12:57, ROUSSEL Kévin wrote: > > 1] Is RIOT OS kernel still *tickless*? > > Does it mean that there will be an interrupt every microsecond when > > 'xtimer' is used, or will we still have only an interrupt when a > > time-related event actually happens (which means RIOT still qualifies as > > a tickless OS) ? > > ("tickless" refers to the scheduler. That said:) > > Well, in order to keep the notion of "time" for periods larger than a > timer register, xtimer has to wakeup whenever the timer register > overflows in order to count exactly those overflows. At 1MHz accuracy on > 32bit timers, that's one tick every ~71minutes. On 16bit platforms, it's > more often. > > I would still call that 'tickless' in the former case. > > Also, there are plans to remove those wakeups if an RTC/RTT/slow low > power timer is present. > > > 2] Unless I'm mistaken, the 'hwtimer' feature that allowed to use as > > much 'hwtimer' instances (as the underlying hardware timers could offer > > counters/comparators is now gone, 'xtimer' being based on an unique > > (high-resolution) hardware timer onto which every 'xtimer' instance is > > multiplexed. > > Can someone confirm me that the previous statement---based on what I > > understand---is correct? > > Remember that xtimer provides multiplexing and wider-than-hardware-timer > periods on top of 'periph/timer'. > 'periph/timer' can be used as replacement for hwtimer. > > We replaced hwtimer (which abstracted timer hardware) and vtimer (which > provided multiplexing and long-term timers) with periph/timer and > xtimer. hwtimer had a "lifo queue", which we dropped in periph/timer to > keep that interface slim. > > Together, they have a much more sane design: > periph/timer is the slimmest possible abstraction of the different > hardware timers that we could come up with. > xtimer adds the timer functionality needed in most systems, like > multiplexing, long term timers, LPM abstraction, convenience like > sending message, unlocking mutex, ... > > They've been designed from the ground up, with the experience from > hwtimer/vtimer. > > So while still young compared to hwtimer, I think the combination will > be better suited for all applications compared to the old code. > > > 3] 'xtimer' is said to be based on a 1-MHz hardware timer, but does it > > mean we *really* have a granularity/jitter of the order of the microsecond? > > xtimer tries to offer a usable timer API that allows the use of natural > time values ("sleep 100 microseconds") on hardware that allows only > "sleep n timer ticks". > In order to simplify (and thus make more efficient) the implementation, > it assumes that the underlying hardware timer runs at 1MHz. (that will > change soon in some way). > If 1us accuracy is actually possible depends a lot on the hardware. > > If you check the "timer_periodic_wakeup" example, you will see that on > most hardware (and depending on correct xtimer tuning values) the wakeup > is extremely periodic (when waking up every second, the jitter is less > than can be measured with the same timer). > > native is a notable example, because when run under Linux, the acuracy > goes to hell. > > A single timer might arrive a little (constant) time late. I've got a > patch to mitigate that (trigger timer a couple of microseconds early, > then spin before shooting). > > xtimer as of now is only as exact as the underlying timer, so if 1*10^6 > timer ticks are not 1sec, xtimer is doomed. > > > Dianel Krebs warned me (during the discussion on PR #4178) that > > xtimer_usleep() was dependent on the scheduler and the delay for its > > next context switch, and that consequently, the delay passed as a > > parameter could suffer for an undetermined and potentially *big* jitter. > Whenever the timer triggers, if it executes a callback function, the > time from hardware interrupt until timer execute will be constant > (unless user code disables interrupts). > > If the callback wakes up a thread, there's jitter of a couple > instructions for the time needed by the scheduler to find the thread and > set it awake, but that jitter will not nearly approach a microsecond. > > There's also a slight delay (timers might trigger a little late), which > xtimer tries to compensate within the "convenience functions" like > xtimer_set_msg(). But, there's room for improvement. > > > In that case, what kind of jitter can we expect relative to the delays > > we pass as parameters to the xtimer functions? If this jitter is too > > high or too hard to predict, the status of RIOT OS as a real-time OS > > could be put in jeopardy? > xtimer as is needs some optimization in some corner cases, but if used > correctly, is very exact with little jitter. > > Concerning "real-time os status", xtimer does not offer strong real-time > guarantees, just as vtimer didn't. Use periph/timer if that is needed. > > > Since be able to have fine-grained real-time features is necessary to my > > work, can someone reassure me about the 'xtimer' module and its abilities? > I'm pretty sure xtimer will suit your needs. It can probably used as > drop-in replacement for hwtimer. > > If you need extreme predictability, you should use periph/timer. > > What kind of granularity and predictability do you need? Could you tell > us more about your application? > > Kaspar > _______________________________________________ > devel mailing list > devel@riot-os.org > https://lists.riot-os.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@riot-os.org https://lists.riot-os.org/mailman/listinfo/devel