Jump to content

    

Aaron

Свой
  • Content Count

    271
  • Joined

  • Last visited

Everything posted by Aaron


  1. Что-то значит вы делаете не так. Директива KEEP явно обязывает компилятор резервировать секцию в памяти, даже если в проекте ни один объект не ссылается на элементы из этой секции. Именно таким образом выделяются области памяти, которые могут потом хитрым образом использоваться в прошивке. 1) вы уверены, что линкер использует именно тот файл .ld, который вы правите? Проверьте, мб он тянет дефолтный ld из тулчейна. 2) может быть такое, что адрес начала секции .vram явно привязан к ссылке __bss_end__ ? в этом случае также будет наложение. 3) если п.1, п.2 в порядке, имеет смысл выложить сюда ваш ld файл.
  2. в линкер файле секцию (без полезных) данных выделить ключевым словом KEEP(*(.noinit*)), иначе при оптимизации все "пустые" секции вырезаются.
  3. Да, интересный подход, с этой точки зрения я никогда не думал. Позвольте вопрос задать с практической точки зрения. Я всегда рассматривал подобные конденсаторы во-первых как ВЧ-фильтры от стандартных пульсаций питания из-за потребления мк/сх, во-вторых как бочки с запасом энергии для нивелирования больших бросков тока. Условно, 0,01мкф..0,1 мкФ в качестве фильтров, 1..4 мкФ в качестве запаса энергии. И пока что такой подход везде работает. Вы же предлагаете рассматривать полный импеданс - то есть, допустим цифровая мк/сх работает на 400МГц и потребляет 1А @ 3V3 (то есть имеет условно сопротивление 3,3 Ом) - и вы рассчитываете полный импеданс на частоте 400МГц? Подбираете конденсаторы необходимого номинала и с правильными ТТХ на указанной частоте? Или всё же работает принцип "ставим 0,1 мкФ 0603 - это покрывает все требования с головой"?
  4. Голословное и неверное утверждение. Фильтрация сделана вполне правильно. Макароны - это подводы цепей питания. Кондеры и стоят в тч чтобы шумы от этих макарон фильтровать. Еще добавлю, что в вашем случае судя по всему можно будет односторонним монтажом обойтись. Не забывайте, что это также улучшает технологичность. Автоматический монтаж облегчается, регулировка. Меньше сверловки, меньше вероятность брака.
  5. Почему зря? Вы получите очень хороший опыт по согласованию методик тестирования. Вам надо отстаивать свою позицию - если испытания в составе холодильного оборудования, то: 1) там есть ножки, демпферы. Нагрузка, которая будет передаваться на плату конкретно, существенно будет отличаться от заявленных вами 0,35мм @ 50Гц. 2) вы должны разработать и согласовать методики испытаний на основе ТЗ. В методиках надо учитывать модель (математическую, физическую и т.п.) холодильного оборудования, и для вас должны предъявляться требования уже сниженные. Либо в методиках испытаний должно быть прописано что-то такое: испытаниям подвергаются платы установочной серии (или каждые Х плат из партии) в составе холодильного оборудования. 3) если платы проверять отдельно, то как минимум их надо проверять в оснастке, которая будет имитировать нахождение в составе холодильного оборудования. Корпус устройства - обязательно! Прямая аналогия для наглядности - ракеты должны выдерживать условную температуру 600С. Электроника внутри ракет тем не менее на эту температуру отдельно от ракеты не проверяется ;)
  6. Mplata абсолютно прав. С другой стороны, если ТЗ на плату и вы под этим подписались и исправить никак, то придется выполнять. Проблема 100% в изгибе платы, с одной точкой крепления конечно на вибрациях всё ходуном ходит. Увеличивайте жесткость платы в первую очередь. Если есть возможность, наращивайте толщину. Металлизация тут не поможет, мягкая медь никакой жесткости не даст имхо. Крупные эри поменять на более мелкие, придвинуть ближе к крепежу, приклеивать перед установаой. Комплекс мер должен помочь. По поводу саботажа - не ищите сложностей там где их нет. Механические повреждения от вибраций, а пайка - на стороне делалась? Профиль пайки неверный подобрать - эри не пропаяются, особенно крупные. Их после печи могли вручную допаивать.
  7. Коллега, и всё же предлагаю отмести железобетонно аппаратные проблемы. Я вижу, что на приведённой картинке линии имеют разный цвет ;) Как предположение (надо смотреть код touchGFX) - у вас обмен с SDRAM проводится в виде транзакций. Одна строчка изображения - одна транзакция. В промежутках между транзакциями шина может не использоваться. При проблемах в топологии из-за нарушения целостности сигналов могут быть всякие чудеса. Например, при появлении данных на линии первые биты могут портиться, и потом при окончании транзакции последние биты портиться. Может, у вас на линии идёт какая-то наводка извне? При этом, если данные передавать непрерывно, то проблема может не проявляться визуально.
  8. если на аппаратные проблемы думать, то тогда напишите, какая длина трасс? какой разброс длин? пробовали паттерны какие-то выводить - может у вас проблема по конкретным линиям данных?
  9. век живи - век учись! Так и параноиком стать можно...
  10. А переезд в РФ так и не рассматривается?
  11. Можно ликбез провести по поводу srec_cat? bin файлы же не обладают встроенной информацией о секциях адресов. Проводится подготовка промежуточных файлов .srec и из них далее из одного файла могут генерироваться несколько bin?
  12. По поводу KEEP ещё раз: вы создаёте ld-файл с секцией BANK2. Далее в цели сборки перечисляете только те зависимости, которые должны попасть в BANK2. Типа такого: bank2.bin: graphics.o constans.o bank2_script.ld $(LD) graphics.o constans.o $(LDFLAGS) -Tbank2_script.ld -o "bank2.bin" Поскольку переменные/константы в привязываемых объектниках из этих же файлов не вызываются никак, то для них в ld-файле должно быть слово KEEP. SECTIONS { .bank2_data : { KEEP(*(.bank2)) KEEP(*(.bank2.*)) } >BANK2
  13. Может создать отдельную цель сборки в makefile, и для этой цели сборки подсунуть отдельный ld-файл, где будет только секция BANK2 прописана? В этом ld-файле указать KEEP для всех данных из объектников, т.к. формально к ним обращений не будет, и оптимизатор может их выпилить при сборке. Ну и тогда объявление самих объектов надо вынести в отдельные файлы, не связанные с файлами для первой цели сборки.
  14. Написал вам в личку. Можете поискать мои темы в разделе "предлагаю работу".
  15. Есть еще приборы лабораторные типа toneohm 950 - цепляешь электроды в разных местах, а потом щупом/пробником ищешь и локализуешь место, в котором обрыв/кз. Можно во всякие метрологические лаборатории позвонить, может кто имеет нечто подобное.
  16. По идее, можно в начало готового бинарника подставить переадресацию на начало вашего загрузчика (&sp и &Reset_Handler), чтобы он стартовал. Далее, в коде загрузчика явным образом должны храниться адреса &sp и &Reset_Handler, взятые из оригинального бинарника. В конце работы загрузчика эти сохранённые адреса используете, чтобы задать __set_MSP() и прыгнуть в Reset_Handler оригинального бинарника. Принципиальных проблем не вижу, но сам не пробовал. Напишите, если на практике всё получится. Тема интересная. А ещё прошивки иногда создают в свободном пространстве флеша структуры с данными. И загрузчик соответственно может тупо затереться.
  17. По теме - если возврат в resethandler (или куда там еще у кого) не предполагается - то у сишных функций аттрибут noreturn надо ставить - и стек не будет использоваться.
  18. Интересный вы человек. У вас устройство не работает, и вы не понимаете почему, но при этом не хотите проверять те советы, которые вам дают. Инфа о VID/PID даст однозначный ответ - есть у вас физически обмен по USB, или его нет. Следующие вопросы важны, т.к. чтобы устройство могло проинициализироваться, ему нужен хороший USB тракт. У вас инициализации даже нет (если VID/PID = 0000/0000), а вы про обмен данными думаете... Тем более некорректно сравнивать мосты USB2.0 FullSpeed (12Мбит/с) и USB2.0 HighSpeed (480Мбит/с) - к ним требования по качеству трассы абсолютно разные. Ещё вариант - контакт №59 PWRSAV# подтянут к питанию? на схеме 4.1 он не используется - болтается в воздухе. Попробуйте подтянуть.
  19. И всё же, пока драйвера не установлен, будет неизвестное устройство, в свойствах которого можно посмотреть VID/PID. Дайте точный ответ - у вас там 0х0000/0х0000? Тип корпуса QFN или TQFP? В качестве пайки полностью уверены? Если где-то ложная пайка, попробуйте пальцем надавить на микруху и включить. Далее: по питанию у вас всё нормально? ёмкости достаточные стоят - прямо как по схеме рисунка 4.1, других потребителей без ёмкости нет? в качестве разводки платы уверены? длина дифф. линий, волновые сопротивления, опорные слои? подключение земли и корпуса со стороны USB-разъёма тоже через 0 Ом резистор осуществляется, как и в схеме рисунка 4.1? Попробуйте поменять перемычку 0 Ом на параллельные 1 МОм и 1000 пФ. кабель USB стандартный используете, с ним проблем не может быть? Просто если у вас одинаковое поведение на всех платах, то проблема скорее всего в качестве схемотехники/топологии. Надо в ту сторону копать.
  20. в диспетчере устройств usb vid/pid определяет или нули одни? Если нули, то это просто передергивание линии. Почему pwren# в 1? У него активный ноль. То есть не может стартануть? По документации на вход можно сигнал с генератора подавать?
  21. Хочу заметить, что USB очень капризный интерейс. Вы зря объединили gnd и shield на разъеме. Развяжите их - между ними поставьте в параллель резистор 1МОм 250В и кондер 1000пФ 250В. Еще можно ферритовое колечко на usb кабель надеть. Вторая мысль - может у вас кварц хреново работает на входе в ft2232? емкости к кварцу правильно подобраны? Usb не терпит шалостей с тактовой.
  22. > полностью перестает работать ... Можно уточнить, перестаёт работать только на время флуда, и потом самовосстанавливается? Или всё же подразумевается, что после прекращения флуда уже не восстанавливается работоспособность стека?
  23. > 1) как это можно сделать в Си, учитывая, что код формируется до вызова main() Вам надо написать функцию reset handler (точное имя определено в crt..s). Вы её можете написать на Си. Или возьмите исходник crt ассемблерный и под себя его перепишите. > 2) как указать в линкере, чтобы стек был в нужном месте, нужного размера. Вы же уже ответили сами строчкой выше: .section my_stack, stack, address(0x1800) .space 0x100 Определите глобальные константы исходя из этой секции, аналогичные __SP_init и __SPLIM_init - и используйте свои константы в своём файле инициализации. в gcc это всё можно задать .ld файлом, в keil - scatter. Для pic надо мануалы курить, наверняка тоже есть нечто аналогичное.
  24. В стандартах кодирования обычно разжёвывается каждое правило - в первую очередь их смотрите. Все они в чём-то похожи, в чём-то отличаются. MISRA C JPL Coding Standard for C SEI CERT C Coding Standard http://google.github.io/styleguide/cppguide
  25. #ifndef Config_H_ ........................ TstackLow Test; <<<<<!!!!!Ошибка!!!!!!!! #endif *рукалицо* К сожалению, таких горе-программистов сейчас полно. Когда так делают, рассуждают типа "этот файл всё равно локальный и будет добавлен только в одно конкретное место в одном сишном файле. препроцессор их объединяет перед компиляцией, а мне удобнее прямо здесь и сейчас объект объявить". А потом внезапно: @pokk, по вашему вопросу: почитайте литературу на тему высокой связности кода и больше никогда так не делайте.