Перейти к содержанию
    

Keil, ARM, CMSIS. Настроить HEAP на этапе выполнения.

Проблема в том, что на этапе компиляции я еще не знаю какие именно микросхемы SRAM будут распаяны на плате.

Достаточно ли для этого по новому адресу прописать пустую HEAP-структуру, и подменить указатель на heap по адресу __user_libspace()+8 ?

Или ссылки на heap еще где-то присутствуют?

Изменено пользователем Intel4004

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как вы собираетесь из кода выяснять какого объема ОЗУ стоит снаружи?

Кстати, какой компилятор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хоть убей, не понимаю проблему. Если прошивка помещается и работает на каком-то минимальном объёме памяти, то установка большего количества памяти ничего не изменит. Ну не будет она использоваться на всю, да и хрен с ней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поясняю: на плате могут распаять SRAM разного размера, могут вообще не распаивать. Конфигурация платы будет прошита в EEPROMке. В зависимости от конфигурации настраиваю heap (адрес/размер), и в зависимости от размера блокирую некоторые функции программы, чтобы не выжрать весь heap.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Intel4004 said:

Keil. ARM. 5 или 6.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0349a/CJAGAAHA.html

 

Нужно переопределить библиотечную функцию __user_setup_stackheap() или __user_initial_stackheap() и учесть, что они вызывается автоматом ДО вызова main().

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Intel4004 сказал:

Достаточно ли для этого по новому адресу прописать пустую HEAP-структуру, и подменить указатель на heap по адресу __user_libspace()+8 ?

Думаете менеджер кучи при старте детектирует какие вы микросхемы памяти впаяли и сколько?  :biggrin:

Ищите в настройках компилятора где задаётся размер кучи. В IAR-е подсказать могу, но в Кейле не силён, увы.  :cray:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Forger said:

Нужно переопределить библиотечную функцию __user_setup_stackheap() или __user_initial_stackheap() и учесть, что они вызывается автоматом ДО вызова main().

Этот вариант я знаю. Проблема в том, что конфигурацию платы я могу прочитать только после запуска RTOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Intel4004 said:

Этот вариант я знаю. Проблема в том, что конфигурацию платы я могу прочитать только после запуска RTOS.

Есть простое решение - отказаться от использования штатной кучи. Вообще.

Во всех своих проектах именно так и сделал - одной головной болью меньше ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, Intel4004 сказал:

Конфигурация платы будет прошита в EEPROMке.

Вместо этого зашить прошивку с урезанным/расширенным функционалом и не сношать мозги.

7 минут назад, Intel4004 сказал:

Проблема в том, что конфигурацию платы я могу прочитать только после запуска RTOS.

Заратустра не позволяет что-ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, jcxz сказал:

Ищите в настройках компилятора где задаётся размер кучи. В IAR-е подсказать могу, но в Кейле не силён, увы.  :cray:

В Кейле задается в startup_... .s

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Forger said:

Есть простое решение - отказаться от использования штатной кучи. Вообще. 

Во всех своих проектах именно так и сделал - одной головной болью меньше ;)

Я бы с удовольствием. Но сторонние библиотеки (JSON например) эту кучу пользуют со страшной силой.

 

4 minutes ago, VladislavS said:

Вместо этого зашить прошивку с урезанным/расширенным функционалом и не сношать мозги.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Intel4004 said:

Я бы с удовольствием. Но сторонние библиотеки (JSON например) эту кучу пользуют со страшной силой.

Я же говорю - отказаться от использования штатной кучи , используйте стороннюю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Forger said:

Я же говорю - отказаться от использования штатной кучи , используйте стороннюю. 

Тогда второй вопрос: а как к этому отнесется Keil RTX ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...