Crash on vPortFree

Hi all, I’m facing a crash (HardFault) into my project within pvPortMalloc/vPortFree functions. heap_4 management, queues 16 in length, latest stable FreeRTOS Release. Task#1 (Priority 2): – addr = pvPortMalloc() – q1_xQueueSend(addr) – Force ISR#1 – … – addr2 = pvPortMalloc() – … – vPortFree(addr2) ISR#1: – q1_xQueueReceiveFromISR(addr) – Force ISR#2 ISR#2: – q2_xQueueSendFromISR(addr) Task#2 (Priority 4): – top: – q2_xQueueReceive(addr) – vPortFree(addr) – goto top Some debug infos: – No crash if code runs @ lower MCU speed (64MHz vs 180MHz, STM32F1 vs STM32F4) – No crash removing vPortFree from Task#2 – No crash if vPortFree inside Task#2 is delayed after xQueueReceive (by printf, or by vTaskDelay, or other) – configASSERT inside pvPortMalloc tells me that “blocks are NOT aligned to the required number of bytes” – configASSERT inside vPortFree tells me that “block is NOT actually allocated” I tried: – different priorities – different ISR preemption priorities What can I do? Any idea? Thanks j

Crash on vPortFree

It is difficult to say what could be wrong without seeing how the queue is created and how the addr is passed into the queue. Is the queue created to hold pointers? Are you reading the value out of the queue into a pointer?

Crash on vPortFree

Both queues are used to send/receive addresses of dynamically allocated objects (structures): xQueueCreate(16, sizeof(struct object *)) T1 struct object *o = pvPortMalloc(sizeof(struct object)) xQueueSend(q1, &o, portMAXDELAY) struct object *i (global var) ISR1 xQueueReceiveFromISR(q1, &i, &higherWoken) ISR2 xQueueSendFromISR(q2, &i, &higherWoken) T2 struct object *f xQueueReceive(q2, &f, portMAXDELAY) vPortFree(f)

Crash on vPortFree

Maybe just a typing error in your post or sourceforge formatting, but shouldnt that be ~~~~ xQueueCreate(16, sizeof(struct object*)) // with * ~~~~ if sending and receiving addresses?

Crash on vPortFree

Our posts overlapped, looks like you just edited that.