Jump to content

    
Sign in to follow this  
Intel4004

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

Recommended Posts

Проблема в том, что на этапе компиляции я еще не знаю какие именно микросхемы 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

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

 

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this