Jump to content

    

AVI-crak

Участник
  • Content Count

    239
  • Joined

  • Last visited

Everything posted by AVI-crak


  1. DMA и FreeRTOS

    Тут важнее второй раз его не пнуть на передачу, пока он нормально работает (а это вполне возможно). Для этого нужно сначала выиграть арбитраж на конкретную линию дма, то-есть добиться монопольной работы с дма из одной задачи. А дальше можно использовать эту линию как хочется, и освободить когда будет не нужна.
  2. lwIp tcp клиент для STM32

    Ну значит вырезано. Подсчитывать байты в пользовательской функции - это как землю руками вращать.
  3. lwIp tcp клиент для STM32

    Вроде-бы lwIp работает точно так-же как терминал - учитывает управляющий символ строки. Если конечно это не вырезано с корнем.
  4. Библиотеки

    Ви таки не поверите, почти все собранные библиотеки имеют политику частичного объявления. Это связанно с тем что они имеют внутренние, не публичные функции, предназначенные для собственной корректной работы.
  5. Библиотеки

    Это имеет смысл когда к библиотеке есть документация, полный набор файлов для быстрого поиска функций, или когда библиотека твоя личная. Но вот использовать жирную чужую библиотеку без возможности заглянуть в её содержимое - уже явный перебор. Кстати насчёт пересборки проекта - gcc следит за изменениями в файлах, если кеш *.a разрешен - то он его не собирает каждый раз, а использует уже имеющиеся. Это работает даже при переключении проектов. Файлы *.a остаются в папке сборки, и используются по мере надобности. Устаревшая версия уничтожается автоматически. Так-что насчёт жирных проектов - не всё столь однозначно.
  6. Библиотеки

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

    Кхм... хотел скорости, а получил звон на линии... GPIO_Speed_100MHz - это скорость нарастания напряжения на ноге, показатель того - какой ток чип вдувает во внешнюю линию.
  8. stm32 SPI

    Цитата(k155la3 @ Apr 27 2018, 14:20) Если процитирован, то замечания по сути. Всё очень просто. Использование предсказания поведения внешней системы с использованием таймера - намного уменьшает гибкость общего алгоритма. То-есть если-бы внешней системой было железо, механика или нечто подобное - то реализация предсказаний оправдывается. Но в связке двух процессоров - это наличие недостатка в алгоритме.
  9. stm32 SPI

    Цитата(k155la3 @ Apr 26 2018, 20:40) Если сделаете аппаратную синхронизацию по времени цикла 1с по всей системе (например от мастера), то проблемы с таймаутами и готовностью-неготовностью можете "разрулить" с использованием таймеров. Плавали, знаем... Всё это будет работать до очередной хотелки клиента. После чего придётся переписывать почти весь проект, причём на оба чипа, и почти с нуля. Мне лень убеждать, но посмотреть со стороны всегда приятно. И всё-же: разделяйте уровень железа и программной части, уровень интерфейса и протокола пакетной связи, а также разумно используйте абстракции данных на уровне приложения (алгоритма). При использовании подобного разделения - ваш проект можно масштабировать практически бесконечно (в разумных пределах), а так-же использовать части и даже целые куски в новых проектах - без подгонки напильником. Реальный пример существующего проекта. На ПП несколько чипов, в том числе и слабенький st для работы с сенсорным экраном (не я придумывал). Изначально алгоритм этого чипа был очень простым: получить координаты нажатия экрана, и в режиме слейва отдать главному чипу. Потом ему добавили работы в определении нажатия иконок - протокол связи стал намного сложнее и обрёл множество садового инструментария. Количество изменений в проекте между этими двумя точками - просто безумное. Переписывалось даже то, что имеет лишь косвенное влияние. А потом хозяин проекта узнал что существуют готовые железные контролёры сенсорных экранов, в которых эти функции реализованы изначально. Такого количества подстановок я не встречал даже у индусов. Количество изменений равнялось общему объёму проекта. Поле чего автор проекта решил пристрелить больное бешенством животное, и начать с нового листа. И с первых строчек прострелил себе ногу в трёх местах. Я к тому что уровень адруино не лечится, если уже заразились - то постарайтесь не распространять заразу.
  10. Цитата(AlexandrY @ Apr 25 2018, 16:48) Так это контроль истории, а не версий. Контроль истории есть во всех продвинутых редакторах. Назовите такой продвинутый редактор, в котором можно посмотреть состояние проекта неделю назад?
  11. Цитата(manul78 @ Apr 25 2018, 02:41) Так как "мастеров" несколько, я также думаю что проблема в одновременном получении пакетов от нескольких "мастеров" сразу. Это как???? Один драйвер - много физики, одна физика с миксом на внешние каналы, или фулл эмуляция на железе не предназначенном для этих целей?
  12. Скорми проект бешеной лошади. Уверен что она найдёт огромное количество ошибок. Потому как проектов без ошибок не существует. (Если проект не содержит ошибок - значит сам проект ошибка.)
  13. Цитата(AlanDrakes @ Apr 23 2018, 20:36) Наверное, у меня странный вариант решения вопроса, но.... Если сделать свой буфер записи в BackUP домене? Размер BKRAM 4к. Размер сектора флеша может быть 32к-128к-256к-512к-1м - зависит от жирности и параллельности архитектуры чипа. Оно туда не влезет. Хотя для внешней памяти 25-той серии - весь сектор стирать не обязательно, и такой вариант защиты вполне приемлем.
  14. stm32 SPI

    Неужели так важна нулевая задержка между сообщениями? По сути, если не гоняться за минимальной задержкой - она сама по себе уменьшится, как-бы глупо это не звучало. Просто не нужно вот так кровь из носу отдавать или принимать сообщения, всё гораздо проще. Два кольцевых буфера на каждой стороне. И по два указателя голова/хвост. На стороне мастера: буфер на передачу с разрешением записи в него, указатель головы для него с разрешением записи, указатель хвоста для буфера приёма - с разрешением записи, сам буфер приёма - только чтение, хвост буфера передачи - только чтение, голова буфера приёма - только чтение. На стороне слейва такая-же структура, с небольшими изменениями. А теперь запускаем мастер через таймер, с выхлопом на ногу ce, на максимально допустимой скорости, и просто пользуемся кольцевыми буферами - что может быть проще? Ну да, кольцевые буферы будут постоянно перезаписываться и обновляться. Но при сохранении целостности алгоритма - изменения будут только в свободной области. То-есть сначала проверка возможности записи, потом обновление инфы (которая возможно улетит в неполном варианте), потом обновление указателя. Пока приёмная сторона не обновит указатель хвоста - вся эта область считается занятой. Размеры кольцевых буферов нет смысла делать больше 512 байт, будет только медленнее. При таких условиях задержка получается меньше 1мс. Ошибки могут возникнуть по вине дма на очень высокой скорости и общем напряге системы. Но такое ещё нужно додуматься нагородить - не каждому под силу.
  15. Цитата(aaarrr @ Apr 22 2018, 04:56) Нет, не перемещаемый. Для arm можно собирать независимый от адреса код, но для одного проекта это будет две независимых настройки компиляции - и целый океан боли. Сначала собирается статический код - максимально возможно без ошибок, даже самых незначительных. И уже поверх статики - компилируется перемещаемый код. Бользаключаетсявследующем, когда вам нужно чуть-чуть изменить уровень железа - придётся откатываться почти на самое начало, и проходить весь путь заново. В этом процессе появляются новые ошибки, в самых непредсказуемых местах. Есть хорошие ошибки - которые видит сам компилятор, и есть скрытые, которые имеют зависимость от интерфейса пользователя или от внешнего воздействия. Вот тут начинается самое весёлое. Отладка в реальном времени с использованием логов - очень сильно отличается по оперативности от внутрисистемного отладчика. Для перемещаемого кода есть один большой бонус - этого кода может быть безумно много. Почти весь он связан с графикой, звуком и пост_обработкой данных. Процессы связанные с реальным временем запускать таким способом глупо, они будут гораздо медленнее исполняться из-за двойного преобразования адресов статики. То-есть в статике те-же функции реального времени будут почти в два раза меньше весить и работать в два и более раз быстрее.
  16. Ещё можно купить MT48LC32M16A2P-75, всё остальное кануло в лету.
  17. STM32СubeMX и подобные

    Цитата(serglg @ Mar 7 2018, 13:16) Максимум - не выключится топливный насос и водителя на АЗС обольет. :-) Бензином?
  18. STM32F4 Discovery + SD micro

    На STM32F4-Discovery стоит немощный стаб 3,3в, и отвратительная разводка силовых цепей. Эта плата годится для мигания светодиодом, и не более. Хотите получить нечто работающее -делайте собственную плату, со всеми плюшками. Помехи в цифровых системах почти всегда проходят по линии земли, вам просто необходимо выбрать точку подключения земли - чтобы не возникало токовой петли. Проще всего это выглядит на бумаге: одна точка для всех, линия с поочерёдным подключением нагрузки, изолированная земля. Как рисуется - так и должно проектироваться, в этом нет ничего сложного. Главное вовремя вспомнить товарища Кирхгофа.
  19. проблемы с SDHC

    Это так, но при длительной записи - встроенный в карту микропроцессор оптимизирует запись, проще говоря - не снимает режим записи. Это часть оптимизации на скорость. Когда чтение чередуется с записью - команды выполняются безусловно. Этот эффект можно увидеть на графиках скорости записи разных карт одного класса, всегда есть такие что чуть-чуть вырываются в перёд.
  20. проблемы с SDHC

    Цитата(alexey123_45 @ Feb 20 2018, 12:36) При этом возвращается статус о корректном завершении операции записи.В чем может быть проблема? https://www.lijingquan.net/wp-content/uploa...icationV6.0.pdf Страница 35. Переходы межу операциями чтения и записи - должны подтверждаться сменой статуса режима карты. Через определённое время бездействия (зависит от карты) - алгоритм сам переходит в состояние Stand-by State, даже без проверки статуса. Но это время не нормированное, почти лотерея. И да, писать драйвер для SD - это наверное второе по увлекательности занятие.
  21. JTAG + STM32

    Я тоже так думал, пока не открыл доки на используемые чипы в программаторе. Подозрения подтвердились, когда захотелось полной скорости usb на собственной отладочной плате. Без внешнего трансивера - исключительно программная поддержка usb2. Вроде бы как подключение usb2 - а скорости нет... Интерфейс JTAG (на качественном программаторе) способен работать на частотах внешнего клока в 60 МГц, что в сочетании с шестнадцатью линиями трассы - даёт скорость опроса чипа в 80 мбайт/сек. Такой поток не имеет смысла гнать напрямую, по этой причине в программаторе есть собственная память для триггеров - в комп сливаются данные которые успели измениться. Хочу сделать акцент - JTAG предназначен для очень быстрого опроса чипа в режиме отладки, скорости программирования не являются приоритетом. Нормальный JTAG - подключается почти ко всему что шевелится, он достаточно простой по протоколу, фактически стандарт. Чего нельзя сказать о программаторе на единственном чипе st - там буквально всё программное. На всех чипах st выше 100 ног - JTAG включен по умолчанию, и он таки работает. Но только не с китайскими программаторами.
  22. JTAG + STM32

    Насчёт JTAG. Если чип посредник в программаторе не имеет полноценной аппаратной поддержки usb2 - то у вас программный эмулятор JTAG, с чем вас и поздравляю.
  23. Вариант практического использования для регистров часов и даты stm32f4-7. Устанавливает дату и время на момент сборки прошивки, макрос сокращается до одиночной записи в регистр. Код    RTC->TR =   ((__TIME__[0]-'0') << 20)                           // hour 10                | ((__TIME__[1]-'0') << 16)                         // hour 1                | ((__TIME__[3]-'0') << 12)                         // minutes 10                | ((__TIME__[4]-'0') << 8)                          // minutes 1                | ((__TIME__[6]-'0') << 4)                          // seconds 10                | (__TIME__[7]-'0');                                // seconds 1    RTC->DR = ((__DATE__[9]-'0') << 20)                             // year 10            | ((__DATE__[10]-'0') << 16)                            // year 1            | ((__TIMESTAMP__[2]=='e'?2:__TIMESTAMP__[2]=='d'?3 \            :__TIMESTAMP__[2]=='u'?4:__TIMESTAMP__[2]=='i'?5 \            :__TIMESTAMP__[2]=='t'?6:__TIMESTAMP__[0]=='M'?1:7) << 13)      // Week day            | ((((__DATE__[2]=='n'?(__DATE__[1]=='a'?0:5):__DATE__[2]=='b'?1 \            :__DATE__[2]=='r'?(__DATE__[0]=='M'?2:3):__DATE__[2]=='y'?4 \            :__DATE__[2]=='l'?6:__DATE__[2]=='g'?7:__DATE__[2]=='p'?8 \            :__DATE__[2] =='t'?9:__DATE__[2]=='v'?10:11)+1)/10) << 12)      // Month 10            | ((((__DATE__[2]=='n'?(__DATE__[1]=='a'?0:5):__DATE__[2]=='b'?1 \            :__DATE__[2]=='r'?(__DATE__[0]=='M'?2:3):__DATE__[2]=='y'?4 \            :__DATE__[2]=='l'?6:__DATE__[2]=='g'?7:__DATE__[2]=='p'?8 \            :__DATE__[2] =='t'?9:__DATE__[2]=='v'?10:11)+1)%10) << 8)       // Month 1            | ((__DATE__[4]==' ' ? 0 : __DATE__[4]-'0') << 4)               // day 10            | (__DATE__[5]-'0');                                            // day  1
  24. Цитата(k000858 @ Jul 16 2013, 17:19) стоп. вот что вычитал [code]По сути, мне нужен девайс, в который можно воткнуть ethernet, а из второго порта девайса этот же ethenret прокинуть дальше. Девайс должен посредством стм32 контроллера разребать пакеты, предназначенные для его мака и ip, а физика помимо приема/отправки пакетов должна ретранслировать ethernet во второй порт. Какое решение мне больше подойдет? Использовать современный коммутатор домашнего уровня - они буквально все сейчас имеют управление, и возможность загрузки скриптов.
  25. Система на модуле

    Цитата(AlexandrY @ Dec 4 2017, 00:58) Так и тянете в несогласованном шлейфе Ethernet, SDIO, USB? Вам старшие товарищи не говорили, что так делать вредно? У меня всё согласованно, даже бумаги с гербовой печатью есть, от этих самых старших товарищей. Но смысл того что я написал выше - намного проще. Не нужно вдаваться в мелкие детали - основное лежит на поверхности. Те модули что продаются от больших компаний - не пригодны для практического применения. Ни со стороны экономии, ни со стороны надёжности (свой колхоз всё убьёт), ни со стороны наличия требуемых интерфейсов. Идеальный модуль создать просто невозможно, найдётся задача в которой он будет не оптимален. Однако если самому делать такой модуль - то выгода есть. И кстати - получается даже дешевле чем покупной.