Jump to content

    

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

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

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

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

Edited by Intel4004

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
13 minutes ago, Forger said:

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

Keil. ARM. 5 или 6.

 

Share this post


Link to post
Share on other sites
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().

Share this post


Link to post
Share on other sites
1 час назад, Intel4004 сказал:

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

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, Forger said:

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, Intel4004 said:

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

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

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

Share this post


Link to post
Share on other sites
46 минут назад, Intel4004 сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
18 минут назад, jcxz сказал:

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

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

Share this post


Link to post
Share on other sites
2 minutes ago, Forger said:

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

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

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

 

4 minutes ago, VladislavS said:

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

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

Share this post


Link to post
Share on other sites
Just now, Intel4004 said:

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

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

 

Share this post


Link to post
Share on other sites
Just now, Forger said:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now