Tôi đang sử dụng FreeRTOS V6.1.1 trên STM32F107VC và gặp lỗi malloc thường xuyên. Diện tích đống được định nghĩa trong kịch bản mối liên kết nhưng nó vẫn tiếp tục bị mắc kẹt trong vòng lặp này pvPortMalloc() sau một vài phân bổ:Lỗi phân bổ FreeRTOS
while((pxBlock->xBlockSize < xWantedSize) && (pxBlock->pxNextFreeBlock != NULL))
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}
pxBlock: 0x20002300
pxPreviousBlock: 0x20002300
pxNewBlockLink: 0x00
xHeapHasBeenInitialised: 0x01
linker script:
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = 0x20010000; /* end of 64K RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x200; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}
...
Làm thế nào điều này có thể?
Trông giống như sự cố tràn ngăn xếp, bạn đã thử tăng ngăn xếp chưa !? – Ishmeet
Bạn có nghĩa là _Min_Stack_Size? Tôi đã thử nó ngay bây giờ mà không thành công. Tệp liên kết này cũng được sử dụng trong các dự án lớn hơn và hoạt động tốt. – RootRaven
Bạn đang sử dụng phiên bản nào của heap? Heap_1.c, heap_2.c hoặc heap_3.c? Một số phiên bản phân mảnh và sẽ không hoạt động nếu bạn phân bổ và giải phóng khối bộ nhớ với các kích thước khác nhau. –