Pull to refresh
0
0
Николай @Nick_Shl

Пользователь

Send message
Мда… Full-Speed это 12 мб/c! А Hi-Speed это 480 мб/c. В серии ST32F1 нет Hi-Speed. Есть в ST32F4, но что бы его получить нужна еще одна микросхема.
Ну и напоследок просто приведу цитату из википедии:
При инициализации устройство сообщает хосту о режиме, поддерживаемом устройством (англ. Full-Speed или англ. Low-Speed), подтягиванием одной из линий данных к V_BUS через резистор 1,5 кОм (D− для режима Low-Speed и D+ для режимов Full-Speed и High-Speed).
А теперь смотрим схему платки: резистор R10 подтягивает D+ к питанию и он 10 кОм. В результате USB не работает вообще. А что бы заработало, его нужно поменять на 1,5 кОм и получим Full-Speed 12 мб/c.
Для меня «мамка»(она же материнская плата) — та плата, на которую устанавливается вычислительный модуль(CPU, MCU) и которая обеспечивает его запуск. Будь то материнская плата настольного компьютера с сокетом, плата ноутбука с запаянным процессором или "синяя платка" которая может запустится и поморгать светодиодом. В общем какой вопрос — такой ответ.

Кстати, открою еще один секрет: в C8T6 на самом деле 128 кБ ПЗУ. Все программируется и все работает(на видео выше как раз так запущено — не влазила программа после добавления всех картинок в 64 кБ). Да, ST не гарантирует их работоспособность и наверное не тестирует на производстве, но… но китайцы выпкускают пачками ST-Link'и на STM32F101 в котором по документации нет USB. А они работают. И даже прошивка утилитой от ST у меня обновилась и он не умер.
Можно! Поскольку использовалась китайская плата по началу, то и распиновка с ней совпадает. И вряд ли изменения по схеме большие(разве что в номналах). На mbed все очень хорошо расписано. И распиновка удобная имеется, и схема. Смотрите, изучайте.

Вообще не понимаю, зачем было изобретать велосипед если заменой пары конденсаторов(и возможно кварца) можно было решить проблему. Другое дело когда выводов в 48-мипиновом корпусе оказывается мало. Тут без "велосипеда" не обойтись. Вот мой недавно получаенный:
image
Плата длинная, но, как видно по фотке, на 5 мм можно укоротить просто отпилив кусок и используя порт для программирования в торце.
Я вообще-то описал протокол, для которого применяется такой подход.А вы мне за уши притянули загрузчик, который не обсуждается тут вообще.
Перед загрузчиком был вопрос. Где ответ???

Я вообще-то так тестирую свои разработки. И всем советую — чем больше тестов проведёте, тем меньше будет проблем. Чужие мне тестировать и не надо. Я же не занимаюсь сертификацией)))
Если человек не может реализовать два таска(коммуникация и опрос датчика) без RTOS…

Вот ссылка — там и почитайте https://geektimes.ru/post/285570/
Делать ускоритель на STM32 для Arduino??? Хочешь быть программистом — от Arduino надо держаться подальше. В крайнем случае использовать только железо, а для программирования использовать Atmel Studio.
И прозрачности в том проекте нет, и тайлы фиксированные, и вывести строчку нет возможности… в общем все криво и сыро.

А когда мне потребовалась доп. память для STM32, я просто на SPI2 прикрутил микруху 23K256 — и всё. Летает как самолёт.
В данном случае не взлетит. Что бы положить фреймбуфер во внешнюю SPI ОЗУ надо вначале туда картинку загнать(1), потом её оттуда считать(2), потом её загнать в экран(3). И даже если экран с ОЗУ разнести на разные SPI и использовать DMA в лучшем случае(2 и 3 делать параллельно) получится падение пропускной способности в два раза от максимума. А если еще делать с прозрачностью…

В общем удачи вам в начинаниях. Хоть криво-косо, но работает же. Ведь это главное, так же?
Вопрос риторический, ответа не жду.
У меня, как у «программиста», возник вопрос — то есть вы только что предложили каждый раз по прилёту символа дёргать стек протокола в прерывании с высоким приоритетом?
Я понятия не имею, что там у вас за "cтек modbus" и что это за протокол. И уж тем более не понимаю, зачем "дергать стек". Но еще большее понятия я не имею, почему вы мне все это приписали.

Правильно будет проверить буфер на переполнение, потом в него запихать принятый символ, перезапустить аппаратный или виртуальный таймер тайм — аута, очистить флаги и быстренько свалить. А стек звать по тайм- ауту. Мы говорим кстати о modbus RTU, и если будете писать его реализацию в будущем — вспомните строки выше.
Ну так и в чем проблема? Приняли байт в прерывании, сунули в буфер, увеличили счетчик приема, запустили(рестартовали) таймер — по прерыванию таймера выгребли пакет, проверили CRC(не сойдется если байт придет во время таймаута), если сходится — сделали что просят и выслали ответку. И зачем тут RTOS?
Именно так реализовал загрузчик на TI TMS320, только чуть проще: начало пакета и конец всегда заранее известны по framing bytes, поэтому таймер и прерывание лишнее.

А если серьёзно — ОСРВ была выбрана не просто так. Провели тестирование — взяли 4 модуля, вместо датчиков подсунули константы, и запустили тест опроса мастером с примерно 500 000 транзакций. Мастер работал с минимальными тайм-аутами.
Провели тестирование модулей конкурентов написанных неизвестно где и не известно как?
В одном случае криворукие программисты не могут без RTOS обойтись, в другом еще более криворукие — ни про RTOS не знают, ни писать хорошо не умеют.

Я смотрю вы загадки любите. Вот вам одна:

Полосы — это муар, на самом деле фон синий.
Использован STM32F103C8T6. Вывод графики на qVGA(320x240) ILI9341 экран. Рендерится все на 14 FPS, что очень близко(поток графических данных 2.05 MB/s) к теоретическому максимальному пределу пропускной способности SPI(ST гарантирует работу на 18 МГц, что дает пропускную способность 2.16 MB/s). Про такие мелочи как проигрывание музыки в фоне и реагирование на касание объектов на экране даже не говорю.
А теперь самое интересное: картинки динамичные, с персонажами и прозрачностью. ОЗУ в чипе — 20 Кб, а для одного экрана надо 150 Кб. Как это сделано?
И да, тут использована RTOS — вот это тот пример, где она уместна.
Причем тут «война»??? Неспособность обойтись без RTOS и представление, что "если нет RTOS то все делается в одном цикле внутри main()" просто многое о вас говорит. Впрочем, это беда всех современных "программистов", которые понятия не имеют, что делается внутри.
Для простого проекта типа датчика достаточно псевдо-многозадачности. Передача данных и протокол реализуется внутри прерывания от порта. Опрос самого датчика и вычисления реализуются или в main(), или по прерыванию таймера с заданной периодичностью. Но тогда у прерывания таймера приоритет должен быть ниже прерывания от порта(что бы всегда принимать и отвечать), благо STM32 это позволяет.
В сложных проектах проще взять готовую RTOS, иначе в лучшем случае получится изобретение велосипеда.

В общем суть: каждое архитектурное решение хорошо под свою задачу. Можно гвозди в дерево пороховым пистолетом забивать, можно в бетон молотком. И если последнее тяжело, и никто не спорит, что это плохо, то первое худо-бедно работает. Вот только это не делает его хорошим решением.
Следующее действующее лицо — это датчик освещённости. Он построен на основе микроконтроллера STM32F030 с использованием операционной системы реального времени.
Для простого датчика RTOS??? Это как из пушки по воробьям стрелять.
Ну если не проходят только часы… у меня две таких платки запустились и работали на 128 МГц вместо штатных 72. Кстати, там еще с USB проблема — один из резисторов запаян неправильного номинала. Должен быть кажись 1.5к, а стоит 10к.

Какая разница STM32 или нет? В данном случае это не имеет никакого значения — все "кишки" спрятаны и используется язык программирования промышленных контроллеров.


А "сердце"-то китайская платка стоимостью меньше 2$. Интересно, сколько же стоит контроллер в сборе...

Именно так! Кто в этой ситуации больше всего пострадает??? Производитель. Или идут на попятную, или тотальное забвение — то, чего они хотели.

Все что надо гуглу сделать это… выполнить решение суда!
Ну, а поскольку у гугла не будет ни желания, ни сотрудников, ни денег для разбора кто торгует "леваком", а кто нет, то удалить из выдачи ВСЕ результаты, на страницах которых содержится название фирмы. В том числе и их официальный сайт.

Кошелек отправителя не подходит? Как вариант сначала писать письмо, потом осуществлять транзакцию. Отправитель денег тот, кто написал раньше, чем транзакция была создана, ему и отправляем ключ.
Каждой «жертве» шифровальщика был предоставлен одинаковый Bitcoin-адрес. Такой подход очень редко используют те, кто действительно хочет что-то получить — современные «шифровальщики-вымогатели» генерируют новый адрес для каждой «жертвы».
В чем смысл разных адресов?
Даже зная один адрес на который был переведен выкуп можно легко отследить, куда транзакция пойдет дальше. Поэтому один адрес, на первый взгляд, не дает преимуществ перед многими.
Дошло. Сбило с толку это:
        if (!in)
        {
            throw std::runtime_error("open failed");
        }
Типичный код, использующий API в стиле C, ведёт себя хуже: он даже не даёт гарантии безопасности исключений. В примере ниже при выбросе исключения из вставки //… остальной код файл никогда не будет закрыт.
Я не понял: неужели автор думает, что если fopen() вернула ему NULL, он сможет по этому NULL закрыть файл??? В этом случае и закрывать нечего — файл никогда не был открыт.
Atmega… ребята, 21 век на дворе! Платка в Китае на STM32103C8T6(гуглить по маркировке) стоит меньше 2-х баксов! Гонится до 128Mhz(вместо штатных 72-х) легко! Прошиваются все 128Kb ROM(вместо гарантированных 64Kb), RAM 20Kb. Дисплей можно взять на ILI9341 и подключить по SPI. При желании можно взять с тачскрином и подключить все на один SPI. Всего их два, так что и на SD-шку хватит. А уж про DMA даже не говорю — запихал в буфер, скомандовал "Шли!" и сам делаешь что хочешь.
Ну а если без внешней памяти уж совсем никак — смотреть в сторону Nucleo с большими чипами с кучей выводов и Flexible Memory Controller.
Как же далек бизнес от развитых стран… напоминает зарю развитие магазинов — тогда тоже цены не писали, продавец оценивал покупателя «на глазок» и называл цену.

В чем смысл сокрытия цены на конкретный озвученный объем работ? В том, что не сможете следующему клиенту объяснить, почему его цена оказалась выше и какие доп. работы были проведены???
Два момента:
1) В циклах используется не инкремент, а декремент.
2) Ну им самое веселое:
Добавляем переменную e, по аналогии с R. Можно сразу объявить и переменную C того же типа, хотя это может быть и константа, или даже define.
Каким образом константу или дефайн декрементировать? Если еще к константой можно понять — не везде они константы на самом деле, можно взять указатель, сделать преобразование типов на не константный указатель и работать.
Но вот с дефайном такое не сработает.
Зачем? На Али платка с STM32F103C8T6 стоит меньше двух баксов — примерно как Arduino Mini!
Если, конечно, устройство будет выпускаться не миллионными тиражами, где есть смысл экономить каждый цент.

Сам занимался разработкой ПО для автоматов. Размер ставки зачастую меняется. Даже кнопки на автомате для ставки две делают: BET и MAX BET.

Information

Rating
4,653-rd
Location
Minneapolis, Minnesota, США
Registered
Activity