a9d 0 February 7, 2024 Posted February 7, 2024 (edited) · Report post Здравствуйте. Заметил, что pvPortMalloc стал работать по другому. Некоторые сегменты стали занимать больше памяти чем раньше. Стал копаться и обнаружил изменения в коде, смысл которых мне не совсем понятен. Раньше было xWantedSize += xHeapStructSize; /* Ensure that blocks are always aligned to the required number * of bytes. */ if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 ) { /* Byte alignment required. */ xAdditionalRequiredSize = portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ); Добавляем размер заголовка, проверяем выравнивание, выравниваем память. К пример хотим выделить 20 байт, выравнивание 4, размер заголовка 8 . Будет выделено 28 байт. Теперь стало if( xWantedSize > 0 ) { /* The wanted size must be increased so it can contain a BlockLink_t * structure in addition to the requested amount of bytes. Some * additional increment may also be needed for alignment. */ xAdditionalRequiredSize = xHeapStructSize + portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ); if( heapADD_WILL_OVERFLOW( xWantedSize, xAdditionalRequiredSize ) == 0 ) { xWantedSize += xAdditionalRequiredSize; } Теперь просто добавляется выравнивание. Причем всегда. К пример хотим выделить 20 байт, выравнивание 4, размер заголовка 8 . Будет выделено 32 байт! В чем смысл? Edited February 7, 2024 by a9d Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 281 February 7, 2024 Posted February 7, 2024 · Report post Может, для выравнивания начальной позиции стека к 8 байтам, согласно ARM AAPCS (если речь об ARM). Это правильнее. Quote Share this post Link to post Share on other sites More sharing options...
a9d 0 February 7, 2024 Posted February 7, 2024 · Report post Так файлы heap_*.c для всех микроконтроллеров одинаковые. Да и если хотим выделить 24 байта, то будет выделено 36 байт. Мне кажется это баг, который добавили на ровном месте. Quote Share this post Link to post Share on other sites More sharing options...
amaora 29 February 7, 2024 Posted February 7, 2024 · Report post Обратите внимание на то, где объявлена portBYTE_ALIGNMENT. Quote Share this post Link to post Share on other sites More sharing options...
a9d 0 February 7, 2024 Posted February 7, 2024 · Report post Да это баг. Нашел источник проблемы. Проверил репозиторий FreeRTOS, в репозитории все правильно. Начал проверять откуда эти странный файлы взялись. С оф. сайта можно скачать архив FreeRTOSv202212.01.zip и в нем уже есть этот баг! Архив и репозиторий не идентичны Quote Share this post Link to post Share on other sites More sharing options...