From 154e2e756867f45e8fd3dba3a28c2780a8c06abb Mon Sep 17 00:00:00 2001 From: Rene Hopf Date: Mon, 12 Sep 2016 22:24:12 +0200 Subject: [PATCH] array size macro --- shared/defines.h | 8 ++++++++ stm32f103/src/main.c | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/shared/defines.h b/shared/defines.h index 46b2b7ca..515a35fd 100644 --- a/shared/defines.h +++ b/shared/defines.h @@ -39,6 +39,14 @@ extern "C" { #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) + +#define STATIC_ASSERT(x) _Static_assert(x, #x) + +#define STRINGIFY_(x) #x +#define STRINGIFY(x) STRINGIFY_(x) + //TODO: change type to typeof() #define RISING_EDGE(sig)\ ({static float __old_val__ = 0.0; uint8_t ret = (sig) > __old_val__; __old_val__ = (sig); ret;}) diff --git a/stm32f103/src/main.c b/stm32f103/src/main.c index 35a9a324..b5df559b 100644 --- a/stm32f103/src/main.c +++ b/stm32f103/src/main.c @@ -342,7 +342,7 @@ void setup_adc(){ DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADCConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; - DMA_InitStructure.DMA_BufferSize = sizeof(ADCConvertedValue)/sizeof(ADCConvertedValue[0]); + DMA_InitStructure.DMA_BufferSize = ARRAY_SIZE(ADCConvertedValue); DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; @@ -567,11 +567,11 @@ int main(void) int adcbufferpos; uint32_t cur_sum = 0; //next received packet will be written to bufferpos - adcbufferpos = sizeof(ADCConvertedValue)/sizeof(ADCConvertedValue[0]) - DMA_GetCurrDataCounter(DMA1_Channel1); + adcbufferpos = ARRAY_SIZE(ADCConvertedValue) - DMA_GetCurrDataCounter(DMA1_Channel1); //bufferpos-1 .. bufferpos-1-samples int samples = 30; for(int i = 0; i < samples; i++){ - if(adcbufferpos + i >= sizeof(ADCConvertedValue)/sizeof(ADCConvertedValue[0])){ + if(adcbufferpos + i >= ARRAY_SIZE(ADCConvertedValue)){ adcbufferpos = 0; } cur_sum += ADCConvertedValue[adcbufferpos+i];