Procházet zdrojové kódy

ringbuf: Fix ordering of StaticRingbuffer_t

When building on linux/host compilers (e.g., GCC), the compiler may add padding
depending on the size and order of the member types.

This commit fixes the ordering or the StaticRingbuffer_t such that it matches
the internal Ringbuffer_t. The "_Static_assert" is always enabled for all
compilers.

Closes https://github.com/espressif/esp-idf/issues/11726
Darian Leung před 2 roky
rodič
revize
b104b52b0e

+ 2 - 2
components/esp_ringbuf/include/freertos/ringbuf.h

@@ -57,8 +57,8 @@ typedef struct xSTATIC_RINGBUFFER {
     /** @cond */    //Doxygen command to hide this structure from API Reference
     size_t xDummy1[2];
     UBaseType_t uxDummy2;
-    BaseType_t xDummy3;
-    void *pvDummy4[11];
+    void *pvDummy3[11];
+    BaseType_t xDummy4;
     StaticList_t xDummy5[2];
     void * pvDummy6;
     portMUX_TYPE muxDummy;

+ 0 - 2
components/esp_ringbuf/ringbuf.c

@@ -73,9 +73,7 @@ typedef struct RingbufferDefinition {
     portMUX_TYPE mux;                           //Spinlock required for SMP
 } Ringbuffer_t;
 
-#if __GNUC_PREREQ(4, 6)
 _Static_assert(sizeof(StaticRingbuffer_t) == sizeof(Ringbuffer_t), "StaticRingbuffer_t != Ringbuffer_t");
-#endif
 
 // ------------------------------------------------ Forward Declares ---------------------------------------------------