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

tonyk_av

Участник
  • Постов

    1 091
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Весь контент tonyk_av


  1. Значит, вы не поняли сути. Ага, только если ты не определил секцию, значит, это сделал кто-то другой и куда он её поместил- вопрос. Вероятно, это сделано как оверлей, чтобы можно было куда ни попадя и без контроля со стороны линковщика размещать данные в памяти. Если __PLC_params будет первой в списке переменных, размещаемой в секции, то она будет размещаться с самого начала. Остальные переменные будут размещаться за ней в порядке их появления в поле зрения линковщика. Это, повторю, плохая идея. Во-первых, порядок размещения устанавливает линковщик, а не среда программирования. И этот порядок описан в доках на линковщик. Во-вторых, для однозначного размещения существую сегменты, внутри которых помещаются секции, которые тоже можно позиционировать внутри сегмента (терминология ld). При размещении переменных во флэш важно знать, что они находятся в нужной странице, которую рано или поздно придётся стирать для перепрограммирования. Не забывайте, что кроме флэша может быть ещё и память с батарейной поддержкой, в которой тоже могут размещаться переменные, конкретные адреса которых никому не интересны, но всем важно, что они попали в нужный диапазон адресов.
  2. Во-от, что и требовалось понять. Только без скаттер-файла толку от этого нет. А теперь открываем доки о концепции размещения информации в памяти и синтаксисе скаттер-файла (нужен VPN). При беглом просмотре синтаксис в компиляторе похож на gcc, а скаттер имеет свой уникальный, хотя после синтаксиса ld всё выглядит довольно просто и понятно.
  3. Поэтому у меня в программе переменные для для каждого _сектора_ определяются в одном файле и по порядку, а там, где это не критично, то в секциях.
  4. Есть сайты с генераторами МАС-адресов. Легко находятся поиском. Но! Уже писал, что сталкивался тут на заводике с этой проблемой, когда кто-то зачем-то на маршрутизаторе запретил такие адреса. Оказалось достаточным сбросить два бита адресе, чтобы всё заработало. У меня МАС-адрес грузится из конфигурационного файла, поэтому меняется достаточно просто. Ну и микросхемы никуда не делись, вот, например.
  5. Конечно, есть. То, что размещается в этой секции, описывается по порядку появления переменных у компилятора. Что значит "как повезёт"? Линковщик-то физический адрес знает, поэтому все ссылки в программе на переменные в этой секции установит правильно. Адрес секции я указал, а сколько и где в ней будет размещено узнает линковщик на этапе линковки, заодно и проверит, что нет наложения секций. Если адреса размещения не критичны, то пусть линковщик сам раскидывает, а если нужен точный, то создаётся и позиционируется ещё одна секция или вообще сегмент.
  6. Приплыли. Смотри ещё раз, коли с первого раза не понял. Скрипт линковщика: Переменная в программе: const uint8 __PLC_params[ SIZE_BYTE_PARAMS ] \ __attribute__ ( (section( ".plc_params" ), used ) ) = { MAX_STEP / 1000, 0x00, // 00 0x0000 -- SIZE IN STEP 16000 0x00, 0x00, // 02 -- ..... Думаю, людям, читавшим мануал на ld, понятно, что массив __PLC_params будет начинаться с адреса 0x08004000. Так что не неси больше бред, artemkad, ладно?
  7. Как очень кривовато. Сомневаюсь, что Кейл не умеет делать это всё без вынесения в отдельный файл.
  8. Опять не точно. Линковщик размещает там, куда ему укажут. Даже внутри секции есть оговорённый порядок размещения переменных, поэтому, если этот порядок устраивает, то можно его не трогать. А так можно хоть для каждой переменной создать отдельную секцию по указанному адресу. Доки вполне нормальные, и примеры там же есть. Опять враньё: то линковщик размещает переменные по каким ему вздумается адресам, то я не умею размещать переменные по нужным адресам. Может, хватит глупости говорить? W25Q установлена из-за особенностей организации флэша в STM32F4 с его страницами большого размера и особенностями протокола обмена среды программирования с ПЛК. В оригинальных ПЛК вся память с конфигурацией ПЛК и программой пользователя представляет собой ОЗУ с батарейкой, поэтому IDE может сначала записать разом 32К, а потом по несколько байт дописывать. Плюс реализация FTP-сервера получается намного проще при наличии файловой системы, чем в памяти STM32F4. И это не считая на два порядка большего ресурса W25Q. Вот поэтому логичней оказалось применить W25Q, а не из-за моего неумения размещать переменные по нужным мне адресам. jcxz, благодарю, ты там всё грамотно человеку разъяснил про линковщик.
  9. Тут на форуме я уже несколько раз выкладывал примеры скриптов линковщика ld и примеры программ для gcc/g++, показывающие использование автоматического размещения и инициализации переменных во флэш STM32. ТС использует Кейл, а не gcc как я, поэтому пример не привёл, но сказал, что ему искать. Линковщик размещает переменные так, как мне нужно, а я ему всего лишь описываю порядок действий. Если найдёте примеры, то увидите, что в них на примере ПЛК показано размещение во флэш параметров ПЛК, программы пользователя и сохраняемых во флэш регистров. И всё это находится там, где должно быть, потому что ко всему этому идут обращения из среды программирования и среды исполнения в МК, посему не надо ля-ля типа "как линковщик сделает так и лучше".
  10. Я тоже не думаю, а просто знаю и пользуюсь.
  11. Потому, что линковщик лучше вас вычислит где разместить переменные. Нет, если у вас куча времени, тот можете сами указывать адреса, что особенно "удобно", когда через год откроете исходники для внесения изменений. Ну и тратить время на ручное вычисление адресов тоже очень эффективный способ сжечь кучу времени. Я уже даже не говорю про вероятные ошибки. ...можно почитать Руководство на используемые вами компилятор и линковщик. Зачем ждать?
  12. Самое плохое, что можно придумать. Читайте, как в используемом линковщике создавать сегменты, а в компиляторе размещать переменные в этом сегменте. Щас подтянутся знатоки Кайла и покажут сие в картинках.
  13. Сталкивался с тем, что изготовители плат хоть и говорят о возможности изготовления больших плат, но по факту для них это выливается в перенастройку оборудования и очень неприятный ценник для заказчика. Михась, отпишись о результатах заказа, пожалуйста. Вдруг мне опять понадобятся большие платы, хоть знать буду, куда обращаться.
  14. Разбей на две и тогда любой сможет. Зачем создавать себе проблемы, делая такие длинные платы?
  15. Делал такое с МК от AD. Судя по схеме тактирования на 1921ВК035, источник тактирования можно переключать налету. Ессно, PLL должен быть под парАми. У МК есть схема слежения за наличием тактовой частоты у источника, от которого вы хотите тактировать МК, похоже, что цикл ожидания нужен для проверки того, что частота у выбираемого источника тактов в норме. Время переключения можно определить, устанавливая-сбрасывая сигнал на ноге МК до и после входа в цикл ожидания переключения источника тактирования.
  16. У STM есть реализация CMSIS под её МК?
  17. Он очень адекватно и резко возжелал заняться автоматизацией Казахстана...
  18. Так, я пошёл за газировкой и попкорном. Щас вот этот будет рассказывать вот про это: P. S. Intel4004, будь умнее, не мечи бисер.
  19. А кто жлоб-то? По-моему, тот, кто нифига сам не хочет не читать, не разбираться, зато бомбит все форумы дебильными вопросами. Ладно бы вопросы были сложными, а то ведь всё жёвано-пережёвано, ссылки даны, осталось налить кофе, попить-почитать, чтобы разобраться.
  20. 12В - это пожарно-охранные сигнализации, посему не понятен их перевод в разряд извращений. Есть ГОСТ 20322, совпадающий с IEC 60038, в котором указаны возможные номиналы напряжений сетей, из которой видно, что только =5В требует обоснования применения.
  21. Зачем, например, мне тратить своё время на то, что пересказывать уже написанное грамотными люди? Если у кого-то после прочтения остались непонятки, то на форуме как раз и разъяснят что к чему. Или вы считаете себя настолько важной персоной, что все сейчас всё бросят и кинутся разжёвывать вам прописные истины?
  22. Зачем? Нужно просто читать методички производителей, разъясняющих что к чему. Простое и очевидное: ТС банально НЕ читает ни методички, ни учебники физики, посему тема будет стремительно вырождаться в место, куда будут заходить, чтобы поупражняться в PODъёбках над очередной сентенцией ТСа.
  23. Дело не просто в гашении дуги. Реле, коммутирующие индуктивные нагрузки на ~230В, живут дольше, чем коммутирующие даже слабоиндуктивные на =24В. И там, и там есть дуга, причём на ~230В она больше.
×
×
  • Создать...