diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-11-26 17:42:33 +0100 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-11-26 17:42:33 +0100 |
| commit | 9c8cfc2e52b0446f7cab14325028075760869b45 (patch) | |
| tree | b85a0f9403bd38ac7947cdf709de787241509533 /lib | |
| parent | 786bd02b01d80e335d4445698d721213a1884ff5 (diff) | |
further cleanup
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/buffer/ringbuffer.c | 46 | ||||
| -rw-r--r-- | lib/logger/log.c | 20 |
2 files changed, 18 insertions, 48 deletions
diff --git a/lib/buffer/ringbuffer.c b/lib/buffer/ringbuffer.c index 9e3adaf..dcf7bc2 100644 --- a/lib/buffer/ringbuffer.c +++ b/lib/buffer/ringbuffer.c @@ -3,45 +3,37 @@ // todo: syncing access to buffer. #define FOOLOS_MODULE_NAME "ringbuffer" + #include "lib/bool/bool.h" #include "lib/logger/log.h" #include "kernel/spinlock.h" -static volatile int front; -static volatile int back; -static volatile int size; - #define RINGBUFFER_SIZE 10 +static volatile int size=RINGBUFFER_SIZE; +static volatile int front=RINGBUFFER_SIZE-1; +static volatile int back=RINGBUFFER_SIZE-1; static volatile char buf[RINGBUFFER_SIZE]; -bool ringbuffer_selftest(); - -void ringbuffer_init() -{ - size=RINGBUFFER_SIZE; - front=size-1; - back=size-1; - -// ringbuffer_selftest(); -// while(1); -} - bool ringbuffer_put(char c) { + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put wants lock)"); lock_spin(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by put)"); + if((back-1+size)%size==front) { lock_release(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)"); return false; } + buf[back]=c; log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put %d %d (%c)", back, front,c); back--; back+=size; back%=size; + lock_release(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)"); @@ -51,7 +43,6 @@ bool ringbuffer_put(char c) bool ringbuffer_get(char *c) { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"get wants lock)"); lock_spin(3); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by get)"); @@ -74,24 +65,3 @@ bool ringbuffer_get(char *c) return true; } - -bool ringbuffer_selftest() -{ - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"ringbuffer selftest"); - char c; - - ringbuffer_put('a'); - ringbuffer_put('b'); - ringbuffer_put('c'); - ringbuffer_put('d'); - ringbuffer_put('e'); - - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - ringbuffer_get(&c); - -} diff --git a/lib/logger/log.c b/lib/logger/log.c index 703658a..d58d2d6 100644 --- a/lib/logger/log.c +++ b/lib/logger/log.c @@ -14,23 +14,16 @@ static char buffer[LOG_BUF_SIZE]; static int first=0; static int last=0; -static bool init=false; void log(char *module_name, int log_level, char *format_string, ...) { -#ifdef FOOLOS_LOG_OFF + #ifdef FOOLOS_LOG_OFF return; -#endif + #endif if(log_level<FOOLOS_LOG_INFO)return; - if(!init) - { - init=true; - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"buffer: 0x%08X, first=%08X, last=%08X",buffer,&first,&last); - } - char buf_info[256]; char buf_log[256]; char buf_time[20]; @@ -39,7 +32,7 @@ void log(char *module_name, int log_level, char *format_string, ...) uint32_t s=t/25; uint32_t ms=t*1000/25-1000*s; - tfp_sprintf(buf_time,"[%3d.%05d] ",s,ms); + tfp_sprintf(buf_time,"[%3d.%05d]",s,ms); va_list va; va_start(va,format_string); @@ -71,6 +64,13 @@ void panic(char *module_name, char *message) void log_log() { + #ifdef FOOLOS_LOG_OFF + return; + #endif + + char buf_log[256]; + tfp_sprintf(buf_log,"[ 0.00000] log: buffer state: first=%d, last=%d, buf_size=%d\n",first,last,LOG_BUF_SIZE); + console_put_str(buf_log); for(int i=first;i!=last;i++) { console_put_char(buffer[i]); |
