Как я могу разместить стек lua ​​на внешнем PSRAM - PullRequest
0 голосов
/ 08 октября 2019

Я хочу передать массив c запущенному скрипту lua. Массив c - это uin32_t с 16-битными значениями. Так старшее и младшее слово с 1024 значениями uint32_t. Итак, 2048 16-битных значений.

Когда я набираю значение 512 uint32_t, код lua выдает ошибку LUA_ERRMEM, потому что свободной памяти больше нет. Это абсолютно возможно, так как мое приложение работает на STM32F2XX µC.

Я вызываю lua_checkstack каждую итерацию с 20 дополнительными слотами стека для выделения. Так что в теории стек всегда должен быть достаточно большим. Но нет, если он не может перераспределить больше памяти.

Так что моя идея заключалась в том, чтобы поместить его во внешнюю память, но я не знаю как. У меня уже есть рабочая секция компоновщика для внешнего PSRAM, но я не могу просто где-нибудь сделать атрибут ((section (".psram"))), верно?

Так что мне нужнонаписать свою собственную функцию lua_newstate? Или есть другой способ разместить стек lua ​​там, где я хочу?

1 Ответ

1 голос
/ 09 октября 2019

Стек Lua - только один из объектов lua. Память для каждого объекта выделяется динамически распределителем. Обычно Lua использует функции realloc и free, посмотрите исходный код здесь

Вы можете написать свой собственный распределитель, вы можете изменить поведение realloc и free, чтобы использовать PSRAM,Как это сделать - еще один интересный вопрос.

PS Изучите исходный код Lua: он не такой большой и информативный.

...