Jump to content

    
Sign in to follow this  
Rivas

Указатель стека и scatter file

Recommended Posts

Здравствуйте. Обзавелся Stm32H743IITx. Это мой первый МК. В программировании я не ас(школьный уровень), всех терминов не знаю. Пытаюсь программировать в Keil. У Keil, есть особенность(по крайней мере, у меня она есть), он ставит: bss, кучу и стек, друг за другом(в том порядке в котором я написал). Я пытаюсь сделать так, что бы: в начале памяти был bss, за ним куча, а вверху был стек. Так как линкер скрипт, у Keil, не доступен для редактирования и к нему можно подобраться через scatter file, я отредактировал scatter file. Заглянул в map файл и вроде как все получилось, но с моими знаниями по данному вопросу, меня терзают смутные сомнения. И если я сейчас ошибусь в дальнейшем могут быть проблемы и их причину сложно будет отыскать, поэтому прошу взглянуть на все, что я написал и подвергнуть конструктивной критики, что-то посоветовать? Прилагаю scatter и map файлы. 

Дано: 

Начало оперативной памяти: 0x24000000 

Конец оперативной памяти:  0x24080000

Размер стека:                       0x00000400

Размер кучи:                        0x00000200

1.sct 1.map

Share this post


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

Зачем?

bss и так в низу, куча и так после bss, а вот стек... я как понял лучше что бы он был вверху и рос вниз. С помощью MPU, можно установить зону в низу стека и тогда будет проще ловить ошибки переполнения стека. Я делаю для себя удобный шаблон, который будет мне понятен, что бы от него уже двигаться дальше, я не использую библиотеки типа HAL, LL и затактировать МК хочу сам, что бы во всем разобраться.(может это глупо, но другого выхода научиться я не вижу).

Share this post


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

С помощью MPU, можно установить зону в низу стека и тогда будет проще ловить ошибки переполнения стека.

Тогда потеряете часть ОЗУ впустую. Если уж что-то ловить через MPU, то тогда стек нужно в самом низу ОЗУ располагать.

Share this post


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

Тогда потеряете часть ОЗУ впустую. Если уж что-то ловить через MPU, то тогда стек нужно в самом низу ОЗУ располагать.

Может и так. Только для того, что бы куда-то ставить стек, нужно уметь править scatter fail, вот я попробовал поправить его и теперь интересуюсь у знающих людей, правильно ли я все сделал?

Share this post


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


Править сбой\отказ scatter-файла (scatter file) никто не умеет ;-)

Я, ни строчки не понял, из того что Вы написали. Мой вопрос был в самом начале темы, жду человека который может ответить на него или подсказать.... Ответы в стиле: " Я очень крутой специалист, и сейчас я расскажу много терминов и вообще,  такими мелочами я не занимаюсь, а занимаюсь я серьезными вещами и появляюсь когда всему пи...ец, и тут же все налаживаю", вот такие ответы, как китайский язык. Про  сбой\отказ, я вообще нечего не писал.

Share this post


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

 как китайский язык. Про  сбой\отказ, я вообще нечего не писал.

Или не выёживайтесь и пишите по-русски раз английского не знаете или воспользуйтесь гугл-переводчиком хотя-бы. Чтоб вздор всякий не писать. Тогда может вас поймут...

А про сбой это не вы, а ваша рука видимо сама упорно пишет. По Фрейду просто....   :russian_ru:

Share this post


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

Или не выёживайтесь и пишите по-русски раз английского не знаете или воспользуйтесь гугл-переводчиком хотя-бы. Чтоб вздор всякий не писать. Тогда может вас поймут...

Пишу на русскому: "Если Вы, прочитали мой вопрос и не поняли, что там написано, не пишите ответ, не надо отвечать."

Share this post


Link to post
Share on other sites
6 hours ago, Rivas said:

проще ловить ошибки переполнения стека

Сделайте стек первым (от 20000000) и при переполнении получите HardFault.

Я ничего не понял по scatter fail. Похоже русский второй язык.

Share this post


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

Вот тут https://m.habr.com/ru/post/425071/ описано то что вам нужно.

У меня по этой инструкции все получилось.

Да, я уже создавал тему, с вопросом: - "как поместить указатель стека, в другое место?" И Вы, мне скидывали эту ссылку(спасибо Вам за это). Как раз, прочитав эту статью, я дописывал в scatter file дополнительные регионы. И теперь хочу узнать, достиг я чего хотел или нет? Там к вопросу прилагается  scatter file и map, может кто из знающих взглянет и ответит. Пока что, появляются специалисты по грамматике...)))

2 часа назад, SII сказал:

scatter fail -- отказ scatter. А файл scatter -- это scatter file.

 

Я понял, у меня в вопросе есть грамматическая ошибка, сейчас исправлю. Спасибо.

Edited by Rivas

Share this post


Link to post
Share on other sites

Вот из вашего мап файла

    .bss                                     0x24000000   Section       96  libspace.o(.bss)
    HEAP                                     0x24000060   Section      512  startup_stm32h743xx.o(HEAP)
    Heap_Mem                                 0x24000060   Data         512  startup_stm32h743xx.o(HEAP)
    STACK                                    0x2407fc00   Section     1024  startup_stm32h743xx.o(STACK)
    __initial_sp                             0x24080000   Data           0  startup_stm32h743xx.o(STACK)

 

Share this post


Link to post
Share on other sites

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

Цитата

Up to 1 Mbyte of RAM: 192 Kbytes of TCM RAM (inc. 64 Kbytes of ITCM RAM + 128 Kbytes of DTCM RAM for time critical routines), Up to 864 Kbytes of user SRAM, and 4 Kbytes of SRAM in Backup domain

По хорошему, все эти типы памяти надо описать и использовать по назначению.

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