Jag testade inte de andra fallen då fallet jag använder fungerar.

/* Fotnot */
Jag måste säga att jag hatar osymetrin i läsningarna av I2C hos SMT32F4an.
Det gör att state-machinen för läsningar blir väldigt komplex och svårläst.
Var inte fall 3 "volatile abc_t* abc;" - dvs. non-volatile pekare till volatile abc_t? Och fall 1 var att fälten i structen var volatile? Jag hade väntat mig att båda skulle fungera utan bortoptimering av läsningen, vilket om jag förstod ditt inlägg rätt det alltså gjorde i GCC men inte i Codewarrior?bearing skrev:Testade i avr-gcc, och där gav fall 3 (volatile pekare) samma resultat som fall 1. Övriga fall gav samma resultat. Så enligt avr-gcc hade jag alltså inte fel. Första testet gjorde jag med Freescale Codewarrior för HCS08.
Ja, Codewarrior optimerade bort fall 3 (EDIT: även dubbelkollat idag). Optimeringsgraden är -Os för båda kompilatorerna.Jag hade väntat mig att båda skulle fungera utan bortoptimering av läsningen, vilket om jag förstod ditt inlägg rätt det alltså gjorde i GCC men inte i Codewarrior?
Och jag använder I2C_ITConfig().6. Enable the NVIC and the corresponding interrupt using the function I2C_ITConfig() if you need to use interrupt mode.
Kod: Markera allt
USART_Init( MIDI_UART, &UART_InitStructure );
/* Enable MIDI UART Interrupt */
USART_ITConfig(MIDI_UART, USART_IT_RXNE, ENABLE);
NVIC_EnableIRQ(MIDI_IRQn);
// Turn on MIDI UART
USART_Cmd( MIDI_UART, ENABLE );