<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">I see. Could it be that the initialisation code changes are just moving things about in memory rather than root cause? Why is it important that the control struct is volatile or is it really just the contents of DataBuffer that’s being changed?  <div><div><br><div><br><div><br><div dir="ltr">Sent from my iPhone</div><div dir="ltr"><br><blockquote type="cite">On 5/02/2022, at 7:17 PM, Robin Gilks <gb7ipd@gmail.com> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr">It is outside .data and explicitly NOT initialised.<div>Excerpts from the linker file...<br><div><br></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(106,153,85)">/* Specify the memory areas */</span></div><div><span style="color:rgb(220,220,170)">MEMORY</span></div><div>{</div><div><span style="color:rgb(156,220,254)">DTCM</span> (<span style="color:rgb(197,134,192)">xrw</span>)     <span style="color:rgb(86,156,214)">:</span> <span style="color:rgb(156,220,254)">ORIGIN</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">0x20000000</span>, <span style="color:rgb(156,220,254)">LENGTH</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">128k</span></div><div><span style="color:rgb(156,220,254)">RAM</span> (<span style="color:rgb(197,134,192)">xrw</span>)      <span style="color:rgb(86,156,214)">:</span> <span style="color:rgb(156,220,254)">ORIGIN</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">0x20020000</span>, <span style="color:rgb(156,220,254)">LENGTH</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">368K</span></div><div><span style="color:rgb(156,220,254)">BOOTRAM</span> (<span style="color:rgb(197,134,192)">xrw</span>)  <span style="color:rgb(86,156,214)">:</span> <span style="color:rgb(156,220,254)">ORIGIN</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">0x2007C000</span>, <span style="color:rgb(156,220,254)">LENGTH</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">16K</span></div><div><span style="color:rgb(156,220,254)">FLASH</span> (<span style="color:rgb(197,134,192)">rx</span>)     <span style="color:rgb(86,156,214)">:</span> <span style="color:rgb(156,220,254)">ORIGIN</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">0x8000000</span>,  <span style="color:rgb(156,220,254)">LENGTH</span> <span style="color:rgb(86,156,214)">=</span> <span style="color:rgb(181,206,168)">2048K</span></div><div>}</div></div><div><br></div><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(106,153,85)">/* used by audio buffers and JPEG h/w */</span> </div><div>  <span style="color:rgb(156,220,254)">.MCU_Data_section</span>     <span style="color:rgb(181,206,168)">0x20000000</span> <span style="color:rgb(197,134,192)">(NOLOAD)</span> <span style="color:rgb(86,156,214)">:</span> { <span style="color:rgb(220,220,170)">*</span>(<span style="color:rgb(156,220,254)">.MCU_Data_section</span>)     } <span style="color:rgb(86,156,214)">></span><span style="color:rgb(156,220,254)">DTCM</span></div></div></div><div><br></div><div>The DTCM memory is by default available to all internal DMA buses (so saves playing with the cache setup using '<span style="color:rgb(220,220,170);background-color:rgb(30,30,30);font-family:"Droid Sans Mono","monospace",monospace;font-size:14px;white-space:pre">HAL_MPU_ConfigRegion()'.</span></div><div><br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Feb 5, 2022 at 6:47 PM Andrew Dachs <<a href="mailto:dachsa492@gmail.com">dachsa492@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Hi Robin,<div>Is your special area of memory inside .data and part of the initialisation on startup?</div><div>Andy</div><div><br></div><div><br><br><div dir="ltr">Sent from my iPhone</div><div dir="ltr"><br><blockquote type="cite">On 5/02/2022, at 5:42 PM, Robin Gilks <<a href="mailto:gb7ipd@gmail.com" target="_blank">gb7ipd@gmail.com</a>> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr">Hmmm - thanks Mark, I  hadn't thought of packing issues. <div>It's not like I'm trying a union to another struct so positioning would be critical. That being the case I think I'll keep that thought on the back burner for now..</div><div><br></div><div>Cheers</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Feb 5, 2022 at 4:10 PM Mark Atherton <<a href="mailto:markaren1@xtra.co.nz" target="_blank">markaren1@xtra.co.nz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I have seen issues with data segments, where large chunks (u32, u8*) <br>
follow small chunks (u8).<br>
<br>
Try changing<br>
<br>
 > uint8_t State;<br>
 > uint8_t *DataBuffer;<br>
 > uint32_t DataBufferSize;<br>
<br>
to<br>
<br>
 > uint32_t DataBufferSize;<br>
 > uint8_t *DataBuffer;<br>
 > uint8_t State;<br>
<br>
-Mark<br>
<br>
<br>
<br>
<br>
On 5/02/2022 1:50 PM, Robin Gilks wrote:<br>
> Some may recall that a year or 2 ago I had great problems getting the <br>
> hardware JPEG encode to work on an STM32 processor. It turned out that <br>
> the memory cache attributes manifested as a race condition between DMA <br>
> and CPU access.<br>
> The problem has just reappeared as a result of updating <br>
> from arm-none-eabi-gcc-9.2.1-1.1 to arm-none-eabi-gcc-10.3.1-2.3.<br>
> <br>
> After a few pokes at the code I've narrowed the issue down to whether a <br>
> volatile struct element is initialized statically  or at run time. <br>
> Interestingly the issue is inverted between compiler versions<br>
> The buffer referenced by the structure element 'DataBuffer'  is defined <br>
> and instantiated in a reserved section of memory that has the correct <br>
> cache attributes<br>
> <br>
> typedef struct<br>
> {<br>
> uint8_t State;<br>
> uint8_t *DataBuffer;<br>
> uint32_t DataBufferSize;<br>
> }JPEG_Data_BufferTypeDef;<br>
> uint8_t <br>
> JPEG_Data_InBuffer[CHUNK_SIZE_IN]__attribute__((section(".MCU_Data_section")));<br>
> original code - works with gcc-9; fails with gcc-10:<br>
> volatile JPEG_Data_BufferTypeDef Jpeg_IN_BufferTab = {JPEG_BUFFER_EMPTY, <br>
> JPEG_Data_InBuffer, 0};<br>
> current code fails with gcc-9 works with gcc-10:<br>
> volatileJPEG_Data_BufferTypeDefJpeg_IN_BufferTab= {0, 0, 0};<br>
> ...<br>
> Jpeg_IN_BufferTab.DataBufferSize = 0;<br>
> Jpeg_IN_BufferTab.State = JPEG_BUFFER_EMPTY;<br>
> Jpeg_IN_BufferTab.DataBuffer = JPEG_Data_InBuffer;<br>
> <br>
> Note that NO other changes (apart from the compiler version) were made!! <br>
> I'm at a total loss as to what is going on, hopefully someone can shine <br>
> a light ;)<br>
> <br>
> -- <br>
> Robin Gilks<br>
> <br>
> <br>
> _______________________________________________<br>
> Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
> <a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
> Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
> Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a> for venue, directions and dates.<br>
> When replying, please edit your Subject line to reflect new subjects.<br>
> <br>
<br>
<br>
_______________________________________________<br>
Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
<a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a> for venue, directions and dates.<br>
When replying, please edit your Subject line to reflect new subjects.</blockquote></div>
<span>_______________________________________________</span><br><span>Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a></span><br><span><a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a></span><br><span>Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a></span><br><span>Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" target="_blank">http://kiwibots.org</a> for venue, directions and dates.</span><br><span>When replying, please edit your Subject line to reflect new subjects.</span></div></blockquote></div></div>_______________________________________________<br>
Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
<a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a> for venue, directions and dates.<br>
When replying, please edit your Subject line to reflect new subjects.</blockquote></div>
<span>_______________________________________________</span><br><span>Chchrobotics mailing list Chchrobotics@lists.ourshack.com</span><br><span>https://lists.ourshack.com/mailman/listinfo/chchrobotics</span><br><span>Mail Archives: http://lists.ourshack.com/pipermail/chchrobotics/</span><br><span>Meetings usually 3rd Monday each month. See http://kiwibots.org for venue, directions and dates.</span><br><span>When replying, please edit your Subject line to reflect new subjects.</span></div></blockquote></div></div></div></div></body></html>