X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fser.c;h=cbcc33a388d9bdc435e2408f0de2950f2fde2134;hb=46b32fefc02b4b8fc3a9ee1e7225f3053b514a02;hp=65a333daf746d21da6ee54fb19b8bc0583147c35;hpb=7bc87271c5cf15a352dadef1c425b808aab5d35e;p=bertos.git diff --git a/bertos/drv/ser.c b/bertos/drv/ser.c index 65a333da..cbcc33a3 100644 --- a/bertos/drv/ser.c +++ b/bertos/drv/ser.c @@ -28,7 +28,6 @@ * * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/) * Copyright 2000 Bernie Innocenti - * * --> * * \brief Buffered serial I/O driver @@ -61,7 +60,9 @@ #include -#include /* memset */ +#include /* cpu_relax() */ + +#include /* memset() */ /* * Sanity check for config parameters required by this module. @@ -79,14 +80,6 @@ #error CONFIG_SER_DEFBAUDRATE missing in config.h #endif -#if CONFIG_KERNEL - #include -#endif - -#if CONFIG_SER_TXTIMEOUT != -1 || CONFIG_SER_RXTIMEOUT != -1 - #include -#endif - struct Serial *ser_handles[SER_CNT]; @@ -113,11 +106,8 @@ static int ser_putchar(int c, struct Serial *port) /* Wait while buffer is full... */ do { - wdt_reset(); -#if CONFIG_KERNEL && CONFIG_KERN_SCHED - /* Give up timeslice to other processes. */ - proc_switch(); -#endif + cpu_relax(); + #if CONFIG_SER_TXTIMEOUT != -1 if (timer_clock() - start_time >= port->txtimeout) { @@ -158,14 +148,12 @@ static int ser_getchar(struct Serial *port) ticks_t start_time = timer_clock(); #endif + /* Wait while buffer is empty */ do { - wdt_reset(); -#if CONFIG_KERNEL && CONFIG_KERN_SCHED - /* Give up timeslice to other processes. */ - proc_switch(); -#endif + cpu_relax(); + #if CONFIG_SER_RXTIMEOUT != -1 if (timer_clock() - start_time >= port->rxtimeout) { @@ -354,13 +342,7 @@ static int ser_flush(struct KFile *fd) */ while (!fifo_isempty(&fds->txfifo) || fds->hw->table->txSending(fds->hw)) - { - #if CONFIG_KERNEL && CONFIG_KERN_SCHED - /* Give up timeslice to other processes. */ - proc_switch(); - #endif - wdt_reset(); - } + cpu_relax(); return 0; }