Arraydefinition funktioniert nicht
-
Hallo zusammen
Ich frage mich gerade warum der ewig lange Code funktioniert der optimierte aber nicht
Könnte mich jemand mal aufklären?
Beim Mikrocontroller stm32l431rci6 sehe ich mit dem langen Code die generierten Pulse, mit dem gekürzten Code aber nicht.
langer Code:// TypeDef TIMER typedef struct TIMxPIN{ GPIO_TypeDef* port; uint16_t pin; } TIMxPIN_t; // ADC definitions #define ADC1_PIN_IN1 (TIMxPIN_t){GPIOC, GPIO_PIN_0} #define ADC1_PIN_IN2 (TIMxPIN_t){GPIOC, GPIO_PIN_1} #define ADC1_PIN_IN3 (TIMxPIN_t){GPIOC, GPIO_PIN_2} #define ADC1_PIN_IN4 (TIMxPIN_t){GPIOC, GPIO_PIN_3} #define ADC1_PIN_IN7 (TIMxPIN_t){GPIOA, GPIO_PIN_2} #define ADC1_PIN_IN8 (TIMxPIN_t){GPIOA, GPIO_PIN_3} #define ADC1_PIN_IN9 (TIMxPIN_t){GPIOA, GPIO_PIN_4} #define ADC1_PIN_IN10 (TIMxPIN_t){GPIOA, GPIO_PIN_5} #define ADC1_PIN_IN11 (TIMxPIN_t){GPIOA, GPIO_PIN_6} #define ADC1_PIN_IN12 (TIMxPIN_t){GPIOA, GPIO_PIN_7} #define ADC1_PIN_IN16 (TIMxPIN_t){GPIOB, GPIO_PIN_1} /**ADC1 GPIO Configuration */ GPIO_InitStruct.Pin = ADC1_PIN_IN1.pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(ADC1_PIN_IN1.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN2.pin; HAL_GPIO_Init(ADC1_PIN_IN2.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN3.pin; HAL_GPIO_Init(ADC1_PIN_IN3.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN4.pin; HAL_GPIO_Init(ADC1_PIN_IN4.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN7.pin; HAL_GPIO_Init(ADC1_PIN_IN7.port, &GPIO_InitStruct); // Read out of the dma_buffer via button won't work if this is active GPIO_InitStruct.Pin = ADC1_PIN_IN8.pin; HAL_GPIO_Init(ADC1_PIN_IN8.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN9.pin; HAL_GPIO_Init(ADC1_PIN_IN9.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN10.pin; HAL_GPIO_Init(ADC1_PIN_IN10.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN11.pin; HAL_GPIO_Init(ADC1_PIN_IN11.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN12.pin; HAL_GPIO_Init(ADC1_PIN_IN12.port, &GPIO_InitStruct); GPIO_InitStruct.Pin = ADC1_PIN_IN16.pin; HAL_GPIO_Init(ADC1_PIN_IN16.port, &GPIO_InitStruct);
kurzer Code (funktioniert nicht)
TIMxPIN_t ADC_PINx[]= {ADC1_PIN_IN1, ADC1_PIN_IN2, ADC1_PIN_IN3, ADC1_PIN_IN4, ADC1_PIN_IN7, ADC1_PIN_IN8, ADC1_PIN_IN9, ADC1_PIN_IN10, ADC1_PIN_IN11, ADC1_PIN_IN12, ADC1_PIN_IN16}; uint8_t size2 = sizeof( ADC_PINx ); for(uint8_t currentChannel = 0; currentChannel < size2; currentChannel++) { /**ADC1 GPIO Configuration */ GPIO_InitStruct.Pin = ADC_PINx[currentChannel].pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(ADC_PINx[currentChannel].port, &GPIO_InitStruct); }
-
Deine Größe (size2) paßt nicht:
[code"c"]
uint8_t size2 = sizeof( ADC_PINx ) / sizeof(ADC_PINx[0]);
[/code]
Du möchtest ja die Anzahl der Elemente, nicht die Größe in Bytes.
-
Achso, ich bekomme also nicht die Länge, sondern die Grösse in Bytes!
Danke, jetzt funktionierts auch.Den Quatsch hab ich von hier
:
https://www.c-plusplus.net/forum/132379-full
-
In der 2. Antwort steht doch auch diese Lösung (nicht immer gleich die erste Antwort bei einem Beitrag nehmen - erst mal ein wenig weiterlesen).
-
Th69 schrieb:
In der 2. Antwort steht doch auch diese Lösung (nicht immer gleich die erste Antwort bei einem Beitrag nehmen - erst mal ein wenig weiterlesen).
Au Mann, hast Recht. :p
Ich war leider etwas in Eile.
Aber vielen Dank für den Hinweis.