LINUX.ORG.RU

Как определить объём занятой оперативной памяти в микроконтроллере?

 , ,


0

5

И так, объёмы растут, и железо до них не всегда успевают обновлять, по этому сейчас я осознаю необходимость в среднего размера проекте мониторить состояние оперативы.

В целом интересуют сразу 3 случая:

  1. Нет RTOS.

  2. Самопсиный планировщик.

  3. FreeRTOS.

И если со 2 и 3 случаем всё +- ясно, то как быть с 1?

если у вас нет ртос, то весь код свой. как берется память и зачем - это расписано в ld-скрипте.

прога сама ничто брать не будет, кроме использования стека, размер которого вы сами и установили. если вы себе приделали кучу, то будет код какого-то менеджера памяти и ему дан массив памяти под кучу, откуда будут браться куски памяти.

вы размер чего занятого хотите смотреть? размер занятого стека, кучи…а больше там и мониторить нечего.

в таких проектах, поскольку задача монопольно занимает процессор, вся память отдается ей ld скриптом, и в рамках всей отданной памяти определяется область для стека и кучи. кучу можно мониторить менеджером памяти, стек - проверкой текущего указателя стека.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от nikitalol

посмотрите примеры ld-скриптов для выбранного вами контроллера и работы без ртос, и модифицируйте его под свои задачи. самому писать с нуля смысла нет.

alysnix ★★★
()

Если нет alloc/free, то нужно следить только за стеком. Есть несколько способов, например заполнение конца стековой области паттерном и периодическая проверка его целостности. Проверку можно делать автоматически или вручную при выходе из функции (https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html)

Puzan ★★★★★
()