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

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

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

Дано: 

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

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

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

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

1.sct 1.map

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


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

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

Я пытаюсь сделать так, что бы: в начале памяти был bss, за ним куча, а вверху был стек.

Зачем?

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


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

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

Зачем?

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

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


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

14 минут назад, Rivas сказал:

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

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

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


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

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

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

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

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


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

5 минут назад, Obam сказал:


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

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

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


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

6 минут назад, Rivas сказал:

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

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

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

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


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

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

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

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

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


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

6 hours ago, Rivas said:

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

 

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

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

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


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

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

    .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)

 

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


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

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

Цитата

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

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

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


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

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

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

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

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

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

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

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

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

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