From 5acf1106551fd474f98458f68704acb599b02da8 Mon Sep 17 00:00:00 2001 From: Fabio Utzig Date: Thu, 23 Mar 2017 13:20:48 +0000 Subject: Updated AVR os-less for new osal_vt git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10128 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/osal/os-less/AVR/osal.c | 115 +---------------------------------------- 1 file changed, 1 insertion(+), 114 deletions(-) (limited to 'os/hal/osal/os-less/AVR/osal.c') diff --git a/os/hal/osal/os-less/AVR/osal.c b/os/hal/osal/os-less/AVR/osal.c index 2f31a190f..c1a7ac3a4 100644 --- a/os/hal/osal/os-less/AVR/osal.c +++ b/os/hal/osal/os-less/AVR/osal.c @@ -23,6 +23,7 @@ */ #include "osal.h" +#include "osal_vt.h" /*===========================================================================*/ /* Module local definitions. */ @@ -39,11 +40,6 @@ */ const char *osal_halt_msg; -/** - * @brief Virtual timers delta list header. - */ -virtual_timers_list_t vtlist; - /*===========================================================================*/ /* Module local types. */ /*===========================================================================*/ @@ -56,115 +52,6 @@ virtual_timers_list_t vtlist; /* Module local functions. */ /*===========================================================================*/ -/** - * @brief Timers initialization. - * - * @notapi - */ -static void vtInit(void) { - - /* Virtual Timers initialization.*/ - vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist; - vtlist.vt_time = (systime_t)-1; - vtlist.vt_systime = 0; -} - -/** - * @brief Returns @p TRUE if the specified timer is armed. - * - * @param[out] vtp the @p virtual_timer_t structure pointer - * - * @notapi - */ -static bool vtIsArmedI(virtual_timer_t *vtp) { - - return vtp->vt_func != NULL; -} - -/** - * @brief Virtual timers ticker. - * @note The system lock is released before entering the callback and - * re-acquired immediately after. It is callback's responsibility - * to acquire the lock if needed. This is done in order to reduce - * interrupts jitter when many timers are in use. - * - * @notapi - */ -static void vtDoTickI(void) { - - vtlist.vt_systime++; - if (&vtlist != (virtual_timers_list_t *)vtlist.vt_next) { - virtual_timer_t *vtp; - - --vtlist.vt_next->vt_time; - while (!(vtp = vtlist.vt_next)->vt_time) { - vtfunc_t fn = vtp->vt_func; - vtp->vt_func = (vtfunc_t)NULL; - vtp->vt_next->vt_prev = (void *)&vtlist; - (&vtlist)->vt_next = vtp->vt_next; - osalSysUnlockFromISR(); - fn(vtp->vt_par); - osalSysLockFromISR(); - } - } -} - -/** - * @brief Enables a virtual timer. - * @note The associated function is invoked from interrupt context. - * - * @param[out] vtp the @p virtual_timer_t structure pointer - * @param[in] time the number of ticks before the operation timeouts, the - * special values are handled as follow: - * - @a TIME_INFINITE is allowed but interpreted as a - * normal time specification. - * - @a TIME_IMMEDIATE this value is not allowed. - * . - * @param[in] vtfunc the timer callback function. After invoking the - * callback the timer is disabled and the structure can - * be disposed or reused. - * @param[in] par a parameter that will be passed to the callback - * function - * - * @notapi - */ -static void vtSetI(virtual_timer_t *vtp, systime_t time, - vtfunc_t vtfunc, void *par) { - virtual_timer_t *p; - - vtp->vt_par = par; - vtp->vt_func = vtfunc; - p = vtlist.vt_next; - while (p->vt_time < time) { - time -= p->vt_time; - p = p->vt_next; - } - - vtp->vt_prev = (vtp->vt_next = p)->vt_prev; - vtp->vt_prev->vt_next = p->vt_prev = vtp; - vtp->vt_time = time; - if (p != (void *)&vtlist) - p->vt_time -= time; -} - -/** - * @brief Disables a Virtual Timer. - * @note The timer MUST be active when this function is invoked. - * - * @param[in] vtp the @p virtual_timer_t structure pointer - * - * @notapi - */ -static void vtResetI(virtual_timer_t *vtp) { - - if (vtp->vt_next != (void *)&vtlist) - vtp->vt_next->vt_time += vtp->vt_time; - vtp->vt_prev->vt_next = vtp->vt_next; - vtp->vt_next->vt_prev = vtp->vt_prev; - vtp->vt_func = (vtfunc_t)NULL; -} - - static void callback_timeout(void *p) { osalSysLockFromISR(); osalThreadResumeI((thread_reference_t *)p, MSG_TIMEOUT); -- cgit v1.2.3