From 9971f999b382ef51a3a3d1db4a3385b7cc23a3a0 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 5 Jun 2016 14:52:17 -0400 Subject: generic: Create generic board infrastructure and move misc.h to it Instead of creating a misc.h file in each board directory, create a generic board directory and declare misc.h there. Signed-off-by: Kevin O'Connor --- src/avr/Makefile | 2 +- src/avr/alloc.c | 25 ------------------------- src/avr/misc.c | 37 +++++++++++++++++++++++++++++++++++++ src/avr/misc.h | 25 ------------------------- src/avr/serial.c | 2 +- src/command.c | 19 +------------------ src/generic/alloc.c | 13 +++++++++++++ src/generic/crc16_ccitt.c | 22 ++++++++++++++++++++++ src/generic/misc.h | 16 ++++++++++++++++ src/simulator/Makefile | 1 + src/simulator/misc.h | 21 --------------------- 11 files changed, 92 insertions(+), 91 deletions(-) delete mode 100644 src/avr/alloc.c create mode 100644 src/avr/misc.c delete mode 100644 src/avr/misc.h create mode 100644 src/generic/alloc.c create mode 100644 src/generic/crc16_ccitt.c create mode 100644 src/generic/misc.h delete mode 100644 src/simulator/misc.h (limited to 'src') diff --git a/src/avr/Makefile b/src/avr/Makefile index c5e5dba1..0e51ed7f 100644 --- a/src/avr/Makefile +++ b/src/avr/Makefile @@ -7,7 +7,7 @@ CFLAGS-y += -mmcu=$(CONFIG_MCU) -DF_CPU=$(CONFIG_CLOCK_FREQ) LDFLAGS-y += -Wl,--relax # Add avr source files -src-y += avr/main.c avr/timer.c avr/gpio.c avr/alloc.c +src-y += avr/main.c avr/timer.c avr/gpio.c avr/misc.c src-$(CONFIG_AVR_WATCHDOG) += avr/watchdog.c src-$(CONFIG_AVR_USBSERIAL) += avr/usbserial.c ../lib/pjrc_usb_serial/usb_serial.c src-$(CONFIG_AVR_SERIAL) += avr/serial.c diff --git a/src/avr/alloc.c b/src/avr/alloc.c deleted file mode 100644 index aaa671bc..00000000 --- a/src/avr/alloc.c +++ /dev/null @@ -1,25 +0,0 @@ -// AVR allocation checking code. -// -// Copyright (C) 2016 Kevin O'Connor -// -// This file may be distributed under the terms of the GNU GPLv3 license. - -#include // AVR_STACK_POINTER_REG -#include // __malloc_heap_end -#include "autoconf.h" // CONFIG_AVR_STACK_SIZE -#include "compiler.h" // ALIGN -#include "misc.h" // alloc_maxsize - -size_t -alloc_maxsize(size_t reqsize) -{ - uint16_t memend = ALIGN(AVR_STACK_POINTER_REG, 256); - __malloc_heap_end = (void*)memend - CONFIG_AVR_STACK_SIZE; - extern char *__brkval; - int16_t maxsize = __malloc_heap_end - __brkval - 2; - if (maxsize < 0) - return 0; - if (reqsize < maxsize) - return reqsize; - return maxsize; -} diff --git a/src/avr/misc.c b/src/avr/misc.c new file mode 100644 index 00000000..682ef29d --- /dev/null +++ b/src/avr/misc.c @@ -0,0 +1,37 @@ +// AVR miscellaneous platform code +// +// Copyright (C) 2016 Kevin O'Connor +// +// This file may be distributed under the terms of the GNU GPLv3 license. + +#include // AVR_STACK_POINTER_REG +#include // __malloc_heap_end +#include // _crc_ccitt_update +#include "autoconf.h" // CONFIG_AVR_STACK_SIZE +#include "board/misc.h" // alloc_maxsize +#include "compiler.h" // ALIGN + +// Optimized crc16_ccitt for the avr processor +uint16_t +crc16_ccitt(char *buf, uint8_t len) +{ + uint16_t crc = 0xFFFF; + while (len--) + crc = _crc_ccitt_update(crc, *buf++); + return crc; +} + +// Return the maximum allocation size that can succeed up to 'reqsize' +size_t +alloc_maxsize(size_t reqsize) +{ + uint16_t memend = ALIGN(AVR_STACK_POINTER_REG, 256); + __malloc_heap_end = (void*)memend - CONFIG_AVR_STACK_SIZE; + extern char *__brkval; + int16_t maxsize = __malloc_heap_end - __brkval - 2; + if (maxsize < 0) + return 0; + if (reqsize < maxsize) + return reqsize; + return maxsize; +} diff --git a/src/avr/misc.h b/src/avr/misc.h deleted file mode 100644 index 244cd5bc..00000000 --- a/src/avr/misc.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __AVR_MISC_H -#define __AVR_MISC_H - -#include -#include - -// alloc.c -size_t alloc_maxsize(size_t reqsize); - -// console.c -char *console_get_input(uint8_t *plen); -void console_pop_input(uint8_t len); -char *console_get_output(uint8_t len); -void console_push_output(uint8_t len); - -// Optimized crc16_ccitt for the avr processor -#define HAVE_OPTIMIZED_CRC 1 -static inline uint16_t _crc16_ccitt(char *buf, uint8_t len) { - uint16_t crc = 0xFFFF; - while (len--) - crc = _crc_ccitt_update(crc, *buf++); - return crc; -} - -#endif // misc.h diff --git a/src/avr/serial.c b/src/avr/serial.c index c73890dd..fc71cf0e 100644 --- a/src/avr/serial.c +++ b/src/avr/serial.c @@ -7,9 +7,9 @@ #include // USART0_RX_vect #include // memmove #include "autoconf.h" // CONFIG_SERIAL_BAUD +#include "board/misc.h" // console_get_input #include "sched.h" // DECL_INIT #include "irq.h" // irq_save -#include "misc.h" // console_get_input #define SERIAL_BUFFER_SIZE 96 static char receive_buf[SERIAL_BUFFER_SIZE]; diff --git a/src/command.c b/src/command.c index 8608fbdf..f11bfcc8 100644 --- a/src/command.c +++ b/src/command.c @@ -10,7 +10,7 @@ #include // strtod #include // strcasecmp #include "board/irq.h" // irq_disable -#include "board/misc.h" // HAVE_OPTIMIZED_CRC +#include "board/misc.h" // crc16_ccitt #include "board/pgm.h" // READP #include "command.h" // output_P #include "sched.h" // DECL_TASK @@ -35,23 +35,6 @@ static uint8_t next_sequence = MESSAGE_DEST; * Binary message parsing ****************************************************************/ -// Implement the standard crc "ccitt" algorithm on the given buffer -static uint16_t -crc16_ccitt(char *buf, uint8_t len) -{ - if (HAVE_OPTIMIZED_CRC) - return _crc16_ccitt(buf, len); - uint16_t crc = 0xffff; - while (len--) { - uint8_t data = *buf++; - data ^= crc & 0xff; - data ^= data << 4; - crc = ((((uint16_t)data << 8) | (crc >> 8)) ^ (uint8_t)(data >> 4) - ^ ((uint16_t)data << 3)); - } - return crc; -} - // Encode an integer as a variable length quantity (vlq) static char * encode_int(char *p, uint32_t v) diff --git a/src/generic/alloc.c b/src/generic/alloc.c new file mode 100644 index 00000000..826e4f9e --- /dev/null +++ b/src/generic/alloc.c @@ -0,0 +1,13 @@ +// Dummy implementation for alloc commands +// +// Copyright (C) 2016 Kevin O'Connor +// +// This file may be distributed under the terms of the GNU GPLv3 license. + +#include "misc.h" + +// Return the maximum allocation size that can succeed up to 'reqsize' +size_t alloc_maxsize(size_t reqsize) +{ + return reqsize; +} diff --git a/src/generic/crc16_ccitt.c b/src/generic/crc16_ccitt.c new file mode 100644 index 00000000..8347bb83 --- /dev/null +++ b/src/generic/crc16_ccitt.c @@ -0,0 +1,22 @@ +// Code for crc16_ccitt +// +// Copyright (C) 2016 Kevin O'Connor +// +// This file may be distributed under the terms of the GNU GPLv3 license. + +#include "misc.h" // crc16_ccitt + +// Implement the standard crc "ccitt" algorithm on the given buffer +uint16_t +crc16_ccitt(char *buf, uint8_t len) +{ + uint16_t crc = 0xffff; + while (len--) { + uint8_t data = *buf++; + data ^= crc & 0xff; + data ^= data << 4; + crc = ((((uint16_t)data << 8) | (crc >> 8)) ^ (uint8_t)(data >> 4) + ^ ((uint16_t)data << 3)); + } + return crc; +} diff --git a/src/generic/misc.h b/src/generic/misc.h new file mode 100644 index 00000000..9b2986be --- /dev/null +++ b/src/generic/misc.h @@ -0,0 +1,16 @@ +#ifndef __GENERIC_MISC_H +#define __GENERIC_MISC_H + +#include // size_t +#include // uint8_t + +char *console_get_input(uint8_t *plen); +void console_pop_input(uint8_t len); +char *console_get_output(uint8_t len); +void console_push_output(uint8_t len); + +size_t alloc_maxsize(size_t reqsize); + +uint16_t crc16_ccitt(char *buf, uint8_t len); + +#endif // misc.h diff --git a/src/simulator/Makefile b/src/simulator/Makefile index 0dbcdab4..ed250768 100644 --- a/src/simulator/Makefile +++ b/src/simulator/Makefile @@ -1,3 +1,4 @@ # Additional simulator build rules src-y += simulator/main.c simulator/gpio.c +src-y += generic/crc16_ccitt.c generic/alloc.c diff --git a/src/simulator/misc.h b/src/simulator/misc.h deleted file mode 100644 index c279794e..00000000 --- a/src/simulator/misc.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __SIMU_MISC_H -#define __SIMU_MISC_H - -#include - -// main.c -char *console_get_input(uint8_t *plen); -void console_pop_input(uint8_t len); -char *console_get_output(uint8_t len); -void console_push_output(uint8_t len); - -static inline size_t alloc_maxsize(size_t reqsize) { - return reqsize; -} - -#define HAVE_OPTIMIZED_CRC 0 -static inline uint16_t _crc16_ccitt(char *buf, uint8_t len) { - return 0; -} - -#endif // misc.h -- cgit v1.2.3-70-g09d2