tonyk_av 40 17 июля Опубликовано 17 июля · Жалоба 5 hours ago, Zuse said: почему использованная запись это "самое плохое, что можно придумать" ? Потому, что линковщик лучше вас вычислит где разместить переменные. Нет, если у вас куча времени, тот можете сами указывать адреса, что особенно "удобно", когда через год откроете исходники для внесения изменений. Ну и тратить время на ручное вычисление адресов тоже очень эффективный способ сжечь кучу времени. Я уже даже не говорю про вероятные ошибки. 5 hours ago, Zuse said: Пока знатоки не подтянулись ...можно почитать Руководство на используемые вами компилятор и линковщик. Зачем ждать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 2 часа назад, tonyk_av сказал: Потому, что линковщик лучше вас вычислит где разместить переменные. Да вроде тут речь не о переменных, а о константе. Которая, к примеру, появится в прошивке в процессе записи программы в МК. Таким способом прописываются сериальники и калибровки. Не думаю, что линковщику лучше вычислит как изменится прошивка в процессе ее записи в МК или в процессе ее работы внутри МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 17 июля Опубликовано 17 июля · Жалоба 32 minutes ago, artemkad said: Не думаю, что линковщику лучше вычислит Я тоже не думаю, а просто знаю и пользуюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 21 17 июля Опубликовано 17 июля · Жалоба Бывают случаи, когда надо точно разместить константу точно по заданному адресу. Например, при "подделке" CRC прошивки. Но такие случаи единичные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 35 минут назад, tonyk_av сказал: Я тоже не думаю, а просто знаю и пользуюсь. Пока что, судя по предыдущим заявлениям, все ваше знание и пользование заключается в том, что "я не делаю ничего - как линковщик сделает так и лучше". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 17 июля Опубликовано 17 июля · Жалоба 46 minutes ago, artemkad said: все ваше знание и пользование заключается в том, что "я не делаю ничего - как линковщик сделает так и лучше". Тут на форуме я уже несколько раз выкладывал примеры скриптов линковщика ld и примеры программ для gcc/g++, показывающие использование автоматического размещения и инициализации переменных во флэш STM32. ТС использует Кейл, а не gcc как я, поэтому пример не привёл, но сказал, что ему искать. Линковщик размещает переменные так, как мне нужно, а я ему всего лишь описываю порядок действий. Если найдёте примеры, то увидите, что в них на примере ПЛК показано размещение во флэш параметров ПЛК, программы пользователя и сохраняемых во флэш регистров. И всё это находится там, где должно быть, потому что ко всему этому идут обращения из среды программирования и среды исполнения в МК, посему не надо ля-ля типа "как линковщик сделает так и лучше". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 227 17 июля Опубликовано 17 июля · Жалоба 3 часа назад, artemkad сказал: Не думаю, что линковщику лучше вычислит как изменится прошивка в процессе ее записи в МК или в процессе ее работы внутри МК. А что - прошивка может измениться "в процессе её записи в МК или в процессе работы внутри МК"??? Что это за прошивка такая, самоизменяющаяся? Думаете - в процессе работы в прошивку могут внедриться вирусы? Прямо во флешь??? Обычно под "прошивкой" понимают код (и readonly-данные) программы, создаваемые компилятором+компоновщиком. Соответственно им (точнее компоновщику) лучше всего известно - какие адреса занимает прошивка. Не только во флешь, но и в ОЗУ. Распределением этих адресов управляет компоновщик. И раз он уже этим управляет, то логично ему же поручить и распределение места для настроек. Чтобы не было конфликтов с прибитым гвоздями абсолютным адресом и остальными секциями программы. 11 часов назад, Zuse сказал: Пока знатоки не подтянулись, поясните, пожалуйста, почему использованная запись это "самое плохое, что можно придумать" ? Пока они не подтянулись, вам бы лучше открыть мануал на свой компилятор/компоновщик и почитать: как в вашем компоновщике задаются регионы памяти для секций вашей программы. И в текущем вопросе лучше разберётесь, да и на будущее не будуете плавать в элементарных базовых вещах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 1 час назад, tonyk_av сказал: Тут на форуме я уже несколько раз выкладывал примеры скриптов линковщика ld и примеры программ для gcc/g++, показывающие использование автоматического размещения и инициализации переменных во флэш STM32. Несколько это пара. Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается, а программе возвращались лишь данные по ее размещению. Ну а когда понадобилось разместить данные в конкретном месте из-за архитектуры памяти конкретного МК ты предложил ... поставить W25Q с FatFS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 227 17 июля Опубликовано 17 июля · Жалоба 3 часа назад, MrYuran сказал: Бывают случаи, когда надо точно разместить константу точно по заданному адресу. Например, при "подделке" CRC прошивки. Очевидно, что здесь не такой случай. Здесь случай совершенно банальный. 6 минут назад, artemkad сказал: Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается Не бывает такого. Чушь несёте. Любой компоновщик размещает данные туда, куда ему указано программистом (даже если сам программист в этом совсем не шарит). Если таковых указаний нет, то нормальный компоновщик должен завершиться с ошибкой. PS: Речь про компоновщики общего назначения для микроконтроллеров. Возможно существуют специализированные компоновщики для конкретных систем, в которых вбиты константно регионы памяти и правила размещения для данной конкретной системы. Здесь не тот случай. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 13 минут назад, jcxz сказал: А что - прошивка может измениться "в процессе её записи в МК или в процессе работы внутри МК"??? Что это за прошивка такая, самоизменяющаяся? Ну да, у многих программаторов есть команда прямой записи некоторых данных по конкретному адресу в записываемом МК. Т.е. он пишет прошивку из файла, но по указанному адресу меняет данные на требуемые. А требуемые данные могут формироваться в результате работы скрипта или программы. 12 минут назад, jcxz сказал: 12 минут назад, artemkad сказал: Причем в обеих случаях линковщик сам размещал секцию куда ему вздумается Не бывает такого. Чушь несёте. Согласен - не совсем куда вздумается. В место адрес которого определяется объемом предыдущих откомпилированных и размещенных секций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 227 17 июля Опубликовано 17 июля · Жалоба 15 минут назад, artemkad сказал: Ну да, у многих программаторов есть команда прямой записи некоторых данных по конкретному адресу в записываемом МК. Т.е. он пишет прошивку из файла, но по указанному адресу меняет данные на требуемые. А требуемые данные могут формироваться в результате работы скрипта или программы. Это никак не мешает тому, чтобы задать регион памяти для настроек не в исходном коде программы, а в командном файле компоновщика. Там где все остальные регионы памяти определяются. В одном месте. А задание размещения абсолютным адресом - потенциальные грабли на будущее. Может компоновщик и увидит это и разрулит конфликты с регионами памяти заданными в командном файле, но не факт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 18 минут назад, jcxz сказал: Думаете - в процессе работы в прошивку могут внедриться вирусы? Прямо во флешь??? Зачем-же сразу вирусы... Прошивка может меняться, к примеру в процессе компиляции кода Forth-машины.😜 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 10 минут назад, jcxz сказал: А задание размещения абсолютным адресом - потенциальные грабли на будущее. Само собой - потенциально это грабли. Вот только альтернатива - изучать ради одного момента по-иди отски описанную доку на компоновщик без возможности найти адекватные примеры и с перспективой наделать еще и кучу маловразумительных ошибок и там. Потому многие и упрощают себе жизнь прямой адресацией из основного кода. Опять-же, Keil почему-то не считает файл компоновщика файлами проекта и при поиске их игнорирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 17 июля Опубликовано 17 июля · Жалоба On 7/17/2024 at 9:01 PM, artemkad said: Вот только альтернатива - изучать ради одного момента Почему ради одного. Пускай редко, но и потом понадобится. Я Keil краем глаза только видел. Но там кажется эти секции прямо в GUI можно создать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 68 17 июля Опубликовано 17 июля · Жалоба 5 минут назад, dimka76 сказал: Почему ради одного. Пускай редко, но и потом понадобится. Как показывает практика следующий раз придется изучать заново. 6 минут назад, dimka76 сказал: Но там кажется эти секции прямо в GUI можно создать. Только в самом простейшем случае. Все что сложнее надо править руками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться