From 27e9c3b23aa84dc3d1c8f5c50d28fdaf8e82a88d Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Sun, 24 Jul 2011 16:16:12 +0200 Subject: [PATCH] using ringbuffer and printf now --- firmware/shared/spi_proto.c | 1 + firmware/shared/spi_proto.h | 2 -- firmware/slavechip/Makefile | 2 +- firmware/slavechip/debug.c | 41 +++++++++--------------------- firmware/slavechip/debug.h | 20 ++++++++------- firmware/slavechip/filter.c | 5 ++-- firmware/slavechip/i2c_simple.c | 2 +- firmware/slavechip/main.c | 19 +++++++++----- firmware/slavechip/ringbuf_small.h | 6 +++++ firmware/slavechip/spi_pointers.c | 6 ++--- 10 files changed, 49 insertions(+), 55 deletions(-) diff --git a/firmware/shared/spi_proto.c b/firmware/shared/spi_proto.c index e55fc05..06e237c 100644 --- a/firmware/shared/spi_proto.c +++ b/firmware/shared/spi_proto.c @@ -3,6 +3,7 @@ #ifndef SPI_MASTER #include "main.h" +#include "filter.h" #endif /***** MASTER *****/ diff --git a/firmware/shared/spi_proto.h b/firmware/shared/spi_proto.h index cb9f0a7..81c8c15 100644 --- a/firmware/shared/spi_proto.h +++ b/firmware/shared/spi_proto.h @@ -2,7 +2,6 @@ #define SPI_PROTO_H #include - /***** MASTER *****/ #define SPI_WRITE_DATA 0x01 @@ -22,7 +21,6 @@ void call_func(uint8_t number); /***** MASTER END *****/ /***** SLAVE *****/ #include "spi_pointers.h" - uint16_t spi_proto_slaveaction(uint8_t opcode, uint8_t addr, uint16_t data); /***** SLAVE END *****/ diff --git a/firmware/slavechip/Makefile b/firmware/slavechip/Makefile index 264de00..0307efb 100644 --- a/firmware/slavechip/Makefile +++ b/firmware/slavechip/Makefile @@ -8,7 +8,7 @@ CFLAGS += -ffunction-sections -Wl,--gc-sections -Wl,--relax COMPILE = avr-gcc $(CFLAGS) $(DEFINES) -OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o debug.o filter.o +OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o debug.o filter.o ringbuf_small.o # symbolic targets: all: firmware.hex diff --git a/firmware/slavechip/debug.c b/firmware/slavechip/debug.c index 5dcc9a8..53f654c 100644 --- a/firmware/slavechip/debug.c +++ b/firmware/slavechip/debug.c @@ -1,38 +1,21 @@ #include "debug.h" -#include +#include "ringbuf_small.h" -char debugStr[DEBUGCHARS]; -volatile char dbgCurChar; -volatile uint8_t dbgStrFill; // amount of available chars in debugStr -volatile uint8_t dbgHasNewSPI; +ringbuf_t rb; +char dbuf[DEBUGCHARS]; -void dbgLog(const char* fmt, ...) { - uint8_t maxwrite = DEBUGCHARS - dbgStrFill; - va_list va; - va_start(va,fmt); - char* pos = debugStr + dbgStrFill; - dbgStrFill += vsnprintf(pos, maxwrite, fmt, va); - va_end(va); -} +FILE mystdout = FDEV_SETUP_STREAM(dbg_putchar, NULL, + _FDEV_SETUP_WRITE); -uint8_t dbgHasNew() { - dbgHasNewSPI = (dbgStrFill > 0); - return (dbgStrFill > 0); +void dbg_init() { + ringbuf_init(&rb,dbuf,sizeof(dbuf)); + } -char dbgReadChar() { - if(dbgHasNew()) { - char ret = debugStr[0]; - for(int i=0; i +#include +#include "ringbuf_small.h" -#define DEBUGCHARS 100 -extern char debugStr[]; -extern volatile uint8_t dbgStrFill; // amount of available chars in debugStr -extern volatile uint8_t dbgHasNewSPI; -extern volatile char dbgCurChar; +#define DEBUGCHARS 254 +extern FILE mystdout; +ringbuf_t rb; +char dbuf[DEBUGCHARS]; + +void dbg_init(); +int16_t dbg_getchar(); +uint8_t dbg_putchar(char c, FILE* stream); -void dbgLog(const char* fmt, ...); -uint8_t dbgHasNew(); -char dbgReadChar(); -void dbgAdvanceChar(); #endif + diff --git a/firmware/slavechip/filter.c b/firmware/slavechip/filter.c index 0ea3379..9d02551 100644 --- a/firmware/slavechip/filter.c +++ b/firmware/slavechip/filter.c @@ -1,6 +1,7 @@ #include "filter.h" #include +#include Sensordata sensordata[4]; float ambient_temp=25.; @@ -13,7 +14,7 @@ float avg_noise[CHANNELCOUNT]; void process_thermocouple_value(int16_t raw_data, uint8_t channel){ - dbgLog("procthermval, val %i, chan %i",raw_data,channel); + printf("procthermval, val %i, chan %i",raw_data,channel); // This function does everything that needs to be done to raw adc values float a = raw_data; a -= sensordata[channel].offset; @@ -37,7 +38,7 @@ void process_ambient_value(int16_t raw_data){ a = a * 0.03125; //adc to mV after amp a = a / 9.625; ambient_temp = a; - dbgLog("ambient: %3.3f°C (lastval %i)\n",a, raw_data); + printf("ambient: %3.3f°C (lastval %i)\n", a, raw_data); } diff --git a/firmware/slavechip/i2c_simple.c b/firmware/slavechip/i2c_simple.c index 571ea60..72602e4 100644 --- a/firmware/slavechip/i2c_simple.c +++ b/firmware/slavechip/i2c_simple.c @@ -16,7 +16,7 @@ void inline i2c_wait(){ while(!(TWCR & _BV(TWINT))){ cntr++; if(cntr >= 1000){ - dbgLog("i2c waittime exceeded!\n"); + printf("i2c waittime exceeded!\n"); } } } diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index 9bb9bf3..45c4d6a 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -4,9 +4,12 @@ #include "i2c_simple.h" #include "mcp_adc.h" #include "debug.h" -#include #include "filter.h" + +#include #include +#include + uint16_t timertmp; uint16_t temperatures[4]; @@ -45,6 +48,8 @@ void hardinit() { void softinit() { mcpadc_init(ADC_GAIN_2|ADC_CONV_CONT|ADC_BITS_16); + dbg_init(); + stdout = &mystdout; } @@ -56,11 +61,11 @@ int __attribute__((noreturn)) main(void) { int16_t data; for(;;){ - dbgLog("loop iteration\n"); + printf("loop iteration\n"); // measure temps 5*2 times for(uint8_t i=0; i<5; i++) { - dbgLog("starting temp measuring"); + printf("starting temp measuring"); for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm muxer_set(active_sensor); while(!mcpadc_has_new_data()) _delay_ms(10); @@ -70,13 +75,13 @@ int __attribute__((noreturn)) main(void) { data = mcpadc_get_data(); process_thermocouple_value(data,active_sensor); } - dbgLog("a"); + printf("a"); } - dbgLog("now measuring offsets"); + printf("now measuring offsets"); // measure 2 offsets for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm - dbgLog("active sensor: %i",active_sensor); + printf("active sensor: %i",active_sensor); muxer_set(active_sensor); offset_measure_start(active_sensor); while(!mcpadc_has_new_data()) _delay_ms(10); @@ -84,7 +89,7 @@ int __attribute__((noreturn)) main(void) { while(!mcpadc_has_new_data()) _delay_ms(10); data = mcpadc_get_data(); - dbgLog("retrieved offset data %i", data); + printf("retrieved offset data %i", data); // TODO: what to do with the offset? offset_measure_stop(); diff --git a/firmware/slavechip/ringbuf_small.h b/firmware/slavechip/ringbuf_small.h index 14c7091..ce6ff6b 100644 --- a/firmware/slavechip/ringbuf_small.h +++ b/firmware/slavechip/ringbuf_small.h @@ -1,3 +1,6 @@ +#ifndef __RINGBSML_H +#define __RINGBSML_H + #include typedef struct { @@ -9,4 +12,7 @@ typedef struct { void ringbuf_init(ringbuf_t* rb, char* buf, int size); +uint8_t ringbuf_put(ringbuf_t *rb, uint8_t value); +int16_t ringbuf_get(ringbuf_t *rb); +#endif diff --git a/firmware/slavechip/spi_pointers.c b/firmware/slavechip/spi_pointers.c index 3bf5ae0..005610b 100644 --- a/firmware/slavechip/spi_pointers.c +++ b/firmware/slavechip/spi_pointers.c @@ -1,15 +1,13 @@ #include "spi_pointers.h" #include "main.h" +#include "debug.h" uint8_t *spi_proto_globals8[] = { - &dbgHasNewSPI, - &dbgCurChar }; uint16_t *spi_proto_globals16[] = { }; funptr_t spi_proto_funcs[] = { - &dbgHasNew, - &dbgAdvanceChar + &dbg_getchar };