a9d 0 7 февраля Опубликовано 7 февраля (изменено) · Жалоба Здравствуйте. Заметил, что 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 байт! В чем смысл? Изменено 7 февраля пользователем a9d Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 7 февраля Опубликовано 7 февраля · Жалоба Может, для выравнивания начальной позиции стека к 8 байтам, согласно ARM AAPCS (если речь об ARM). Это правильнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a9d 0 7 февраля Опубликовано 7 февраля · Жалоба Так файлы heap_*.c для всех микроконтроллеров одинаковые. Да и если хотим выделить 24 байта, то будет выделено 36 байт. Мне кажется это баг, который добавили на ровном месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 20 7 февраля Опубликовано 7 февраля · Жалоба Обратите внимание на то, где объявлена portBYTE_ALIGNMENT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a9d 0 7 февраля Опубликовано 7 февраля · Жалоба Да это баг. Нашел источник проблемы. Проверил репозиторий FreeRTOS, в репозитории все правильно. Начал проверять откуда эти странный файлы взялись. С оф. сайта можно скачать архив FreeRTOSv202212.01.zip и в нем уже есть этот баг! Архив и репозиторий не идентичны Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться