[chbot] Volatile struct puzzle

Mark Atherton markaren1 at xtra.co.nz
Sat Feb 5 03:10:34 GMT 2022


I have seen issues with data segments, where large chunks (u32, u8*) 
follow small chunks (u8).

Try changing

 > uint8_t State;
 > uint8_t *DataBuffer;
 > uint32_t DataBufferSize;

to

 > uint32_t DataBufferSize;
 > uint8_t *DataBuffer;
 > uint8_t State;

-Mark




On 5/02/2022 1:50 PM, Robin Gilks wrote:
> Some may recall that a year or 2 ago I had great problems getting the 
> hardware JPEG encode to work on an STM32 processor. It turned out that 
> the memory cache attributes manifested as a race condition between DMA 
> and CPU access.
> The problem has just reappeared as a result of updating 
> from arm-none-eabi-gcc-9.2.1-1.1 to arm-none-eabi-gcc-10.3.1-2.3.
> 
> After a few pokes at the code I've narrowed the issue down to whether a 
> volatile struct element is initialized statically  or at run time. 
> Interestingly the issue is inverted between compiler versions
> The buffer referenced by the structure element 'DataBuffer'  is defined 
> and instantiated in a reserved section of memory that has the correct 
> cache attributes
> 
> typedef struct
> {
> uint8_t State;
> uint8_t *DataBuffer;
> uint32_t DataBufferSize;
> }JPEG_Data_BufferTypeDef;
> uint8_t 
> JPEG_Data_InBuffer[CHUNK_SIZE_IN]__attribute__((section(".MCU_Data_section")));
> original code - works with gcc-9; fails with gcc-10:
> volatile JPEG_Data_BufferTypeDef Jpeg_IN_BufferTab = {JPEG_BUFFER_EMPTY, 
> JPEG_Data_InBuffer, 0};
> current code fails with gcc-9 works with gcc-10:
> volatileJPEG_Data_BufferTypeDefJpeg_IN_BufferTab= {0, 0, 0};
> ...
> Jpeg_IN_BufferTab.DataBufferSize = 0;
> Jpeg_IN_BufferTab.State = JPEG_BUFFER_EMPTY;
> Jpeg_IN_BufferTab.DataBuffer = JPEG_Data_InBuffer;
> 
> Note that NO other changes (apart from the compiler version) were made!! 
> I'm at a total loss as to what is going on, hopefully someone can shine 
> a light ;)
> 
> -- 
> Robin Gilks
> 
> 
> _______________________________________________
> Chchrobotics mailing list Chchrobotics at lists.ourshack.com
> https://lists.ourshack.com/mailman/listinfo/chchrobotics
> Mail Archives: http://lists.ourshack.com/pipermail/chchrobotics/
> Meetings usually 3rd Monday each month. See http://kiwibots.org for venue, directions and dates.
> When replying, please edit your Subject line to reflect new subjects.
> 




More information about the Chchrobotics mailing list