X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fser.c;h=bd27486b189beea4bdf3a8506beb5936a1d6949c;hb=81f2387d160fee072af03291b5682a06f5b807cd;hp=5f2b6fcd66af4298bdae8d95891c31276854ed57;hpb=8200b51bd42e69333cbb3d50532bbd8b45201da2;p=bertos.git diff --git a/bertos/drv/ser.c b/bertos/drv/ser.c index 5f2b6fcd..bd27486b 100644 --- a/bertos/drv/ser.c +++ b/bertos/drv/ser.c @@ -52,40 +52,33 @@ #include "ser.h" #include "wdt.h" +#include "timer.h" #include "ser_p.h" #include "cfg/cfg_ser.h" -#include "cfg/cfg_kern.h" +#include "cfg/cfg_proc.h" #include #include -#include /* memset */ +#include /* cpu_relax() */ + +#include /* memset() */ /* * Sanity check for config parameters required by this module. */ -#if !defined(CONFIG_KERNEL) || ((CONFIG_KERNEL != 0) && CONFIG_KERNEL != 1) - #error CONFIG_KERNEL must be set to either 0 or 1 in config.h +#if !defined(CONFIG_KERN) || ((CONFIG_KERN != 0) && CONFIG_KERN != 1) + #error CONFIG_KERN must be set to either 0 or 1 in cfg_kern.h #endif #if !defined(CONFIG_SER_RXTIMEOUT) - #error CONFIG_SER_TXTIMEOUT missing in config.h + #error CONFIG_SER_TXTIMEOUT missing in cfg_ser.h #endif #if !defined(CONFIG_SER_RXTIMEOUT) - #error CONFIG_SER_RXTIMEOUT missing in config.h + #error CONFIG_SER_RXTIMEOUT missing in cfg_ser.h #endif #if !defined(CONFIG_SER_DEFBAUDRATE) - #error CONFIG_SER_DEFBAUDRATE missing in config.h -#endif - -#if CONFIG_KERNEL && CONFIG_KERN_SCHED - #include -#else - #define proc_yield() do {} while(0) -#endif - -#if CONFIG_SER_TXTIMEOUT != -1 || CONFIG_SER_RXTIMEOUT != -1 - #include + #error CONFIG_SER_DEFBAUDRATE missing in cfg_ser.h #endif @@ -114,9 +107,7 @@ static int ser_putchar(int c, struct Serial *port) /* Wait while buffer is full... */ do { - /* Give up timeslice to other processes. */ - proc_yield(); - wdt_reset(); + cpu_relax(); #if CONFIG_SER_TXTIMEOUT != -1 if (timer_clock() - start_time >= port->txtimeout) @@ -162,9 +153,7 @@ static int ser_getchar(struct Serial *port) /* Wait while buffer is empty */ do { - /* Give up timeslice to other processes. */ - proc_yield(); - wdt_reset(); + cpu_relax(); #if CONFIG_SER_RXTIMEOUT != -1 if (timer_clock() - start_time >= port->rxtimeout) @@ -354,11 +343,7 @@ static int ser_flush(struct KFile *fd) */ while (!fifo_isempty(&fds->txfifo) || fds->hw->table->txSending(fds->hw)) - { - /* Give up timeslice to other processes. */ - proc_yield(); - wdt_reset(); - } + cpu_relax(); return 0; }