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

Keil 5.38 Разместить константу по заданному адресу во Flash

5 hours ago, Zuse said:

почему использованная запись это "самое плохое, что можно придумать"  ?

Потому, что линковщик лучше вас вычислит где разместить переменные. Нет, если у вас куча времени, тот можете сами указывать адреса, что особенно "удобно", когда через год откроете исходники для внесения изменений. Ну и тратить время на ручное вычисление адресов тоже очень эффективный способ сжечь кучу времени. Я уже даже не говорю про вероятные ошибки.

5 hours ago, Zuse said:

Пока знатоки не подтянулись

...можно почитать Руководство на используемые вами компилятор и линковщик. Зачем ждать?

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


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

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

Потому, что линковщик лучше вас вычислит где разместить переменные.

Да вроде тут речь не о переменных, а о константе. Которая, к примеру, появится в прошивке в процессе записи программы в МК. Таким способом прописываются сериальники и калибровки. Не думаю, что линковщику лучше вычислит как изменится прошивка в процессе ее записи в МК или в процессе ее работы внутри МК.

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


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

32 minutes ago, artemkad said:

Не думаю, что линковщику лучше вычислит

Я тоже не думаю, а просто знаю и пользуюсь.

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


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

Бывают случаи, когда надо точно разместить константу точно по заданному адресу. Например, при "подделке" CRC прошивки.

Но такие случаи единичные.

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


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

35 минут назад, tonyk_av сказал:

Я тоже не думаю, а просто знаю и пользуюсь.

Пока что, судя по предыдущим заявлениям, все ваше знание и пользование заключается в том, что "я не делаю ничего - как линковщик сделает так и лучше".

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


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

46 minutes ago, artemkad said:

все ваше знание и пользование заключается в том, что "я не делаю ничего - как линковщик сделает так и лучше".

Тут на форуме я уже несколько раз выкладывал примеры скриптов линковщика ld и примеры программ для gcc/g++, показывающие использование автоматического размещения и инициализации переменных во флэш STM32. ТС использует Кейл, а не gcc как я, поэтому пример не привёл, но сказал, что ему искать. Линковщик размещает переменные так, как мне нужно, а я ему всего лишь описываю порядок действий. Если найдёте примеры, то увидите, что в них на примере ПЛК показано размещение во флэш параметров ПЛК, программы пользователя  и сохраняемых во флэш регистров. И всё это находится там, где должно быть, потому что ко всему этому идут обращения из среды программирования и среды исполнения в МК, посему не надо ля-ля типа "как линковщик сделает так и лучше".

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


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

3 часа назад, artemkad сказал:

Не думаю, что линковщику лучше вычислит как изменится прошивка в процессе ее записи в МК или в процессе ее работы внутри МК.

А что - прошивка может измениться "в процессе её записи в МК или в процессе работы внутри МК"??? Что это за прошивка такая, самоизменяющаяся?

Думаете - в процессе работы в прошивку могут внедриться вирусы? Прямо во флешь???  :shok:

Обычно под "прошивкой" понимают код (и readonly-данные) программы, создаваемые компилятором+компоновщиком. Соответственно им (точнее компоновщику) лучше всего известно - какие адреса занимает прошивка. Не только во флешь, но и в ОЗУ. Распределением этих адресов управляет компоновщик. И раз он уже этим управляет, то логично ему же поручить и распределение места для настроек. Чтобы не было конфликтов с прибитым гвоздями абсолютным адресом и остальными секциями программы.

11 часов назад, Zuse сказал:

Пока знатоки не подтянулись, поясните, пожалуйста, почему использованная запись это "самое плохое, что можно придумать"  ?

Пока они не подтянулись, вам бы лучше открыть мануал на свой компилятор/компоновщик и почитать: как в вашем компоновщике задаются регионы памяти для секций вашей программы. И в текущем вопросе лучше разберётесь, да и на будущее не будуете плавать в элементарных базовых вещах.

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


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

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

Тут на форуме я уже несколько раз выкладывал примеры скриптов линковщика ld и примеры программ для gcc/g++, показывающие использование автоматического размещения и инициализации переменных во флэш STM32.

Несколько это пара. Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается, а программе возвращались лишь данные по ее размещению.  Ну а когда понадобилось разместить данные в конкретном месте из-за архитектуры памяти конкретного МК ты предложил ... поставить W25Q с FatFS

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


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

3 часа назад, MrYuran сказал:

Бывают случаи, когда надо точно разместить константу точно по заданному адресу. Например, при "подделке" CRC прошивки.

Очевидно, что здесь не такой случай. Здесь случай совершенно банальный.

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

Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается

Не бывает такого. Чушь несёте.

Любой компоновщик размещает данные туда, куда ему указано программистом (даже если сам программист в этом совсем не шарит). Если таковых указаний нет, то нормальный компоновщик должен завершиться с ошибкой.

PS: Речь про компоновщики общего назначения для микроконтроллеров. Возможно существуют специализированные компоновщики для конкретных систем, в которых вбиты константно регионы памяти и правила размещения для данной конкретной системы. Здесь не тот случай.

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


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

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

А что - прошивка может измениться "в процессе её записи в МК или в процессе работы внутри МК"??? Что это за прошивка такая, самоизменяющаяся?

Ну да, у многих программаторов есть команда прямой записи некоторых данных по конкретному адресу в записываемом МК. Т.е. он пишет прошивку из файла, но по указанному адресу меняет данные на требуемые. А требуемые данные могут формироваться в результате работы скрипта или программы.

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

Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается

Не бывает такого. Чушь несёте.

Согласен - не совсем куда вздумается. В место адрес которого определяется объемом предыдущих откомпилированных и размещенных  секций.

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


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

15 минут назад, artemkad сказал:

Ну да, у многих программаторов есть команда прямой записи некоторых данных по конкретному адресу в записываемом МК. Т.е. он пишет прошивку из файла, но по указанному адресу меняет данные на требуемые. А требуемые данные могут формироваться в результате работы скрипта или программы.

Это никак не мешает тому, чтобы задать регион памяти для настроек не в исходном коде программы, а в командном файле компоновщика. Там где все остальные регионы памяти определяются. В одном месте.

А задание размещения абсолютным адресом - потенциальные грабли на будущее. Может компоновщик и увидит это и разрулит конфликты с регионами памяти заданными в командном файле, но не факт.

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


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

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

Думаете - в процессе работы в прошивку могут внедриться вирусы? Прямо во флешь???  :shok:

Зачем-же сразу вирусы... Прошивка может меняться, к примеру в процессе компиляции кода Forth-машины.😜

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


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

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

А задание размещения абсолютным адресом - потенциальные грабли на будущее.

Само собой - потенциально это грабли. Вот только альтернатива - изучать ради одного момента по-иди отски описанную доку на компоновщик без возможности найти адекватные примеры и с перспективой наделать еще и кучу маловразумительных ошибок и там. Потому многие и упрощают себе жизнь прямой адресацией из основного кода. Опять-же, Keil почему-то не считает файл компоновщика файлами проекта  и при поиске их игнорирует.

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


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

On 7/17/2024 at 9:01 PM, artemkad said:

Вот только альтернатива - изучать ради одного момента

Почему ради одного. Пускай редко, но и потом понадобится.
Я Keil краем глаза только видел. Но там кажется эти секции прямо в GUI можно создать.

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


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

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

Почему ради одного. Пускай редко, но и потом понадобится.

Как показывает практика следующий раз придется изучать заново.

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

Но там кажется эти секции прямо в GUI можно создать.

Только в самом простейшем случае. Все что сложнее надо править руками.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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