- Пост на хабре "Фантомный double в прошивках для ядер Cortex-M*".
Про сингл и дабл плавучку. Нашим пограммистам помогло. max(1 знак., 12.05.2023 17:10, ARM, ссылка, полностью)
- Наткнулся на косяк STM32F303. Eddy_Em(2797 знак., 11.05.2023 12:05, ARM, ссылка, ссылка, полностью)
- Вах-вах, протестил сегодня АЦП 100-ногого F302 (тот же F303, я
вообще не понимаю, какого хрена ST выделили отдельную линейку!). Eddy_Em(555 знак., 14.05.2023 23:02)
- О, пока тут в своем ЖЖ ковырялся в поисках ссылки на нужную
публикацию, вспомнил еще один баг STM32F303: если сразу же после
включения тактирования GPIO попытаться изменить содержимое MODER,
ничего не происходит! Вот, скажем, здесь: Eddy_Em(396 знак., 12.05.2023 14:10, ссылка)
- Втыкайте __DSB() вместо NOP, оно гораздо осмысленнее. - LightElf(12.05.2023 16:19)
- Я бы не назвал это багом. Скорее, недостаточно точным описанием в
документации. И у Микрочипа тоже, если включаешь модуль периферии,
лучше тактик-другой пропустить, чтобы обращение к периферии (к
контроллеру энергосбережения шины) было завершено и выполнено до
конца, а нужный модуль успел включиться и запуститься от тактовой
частоты. - Nikolay_Po(12.05.2023 16:01)
- в HAL вместо барьеров просто проверяют, что нужный бит в регистрах управления APB
записался. - Vit(12.05.2023 14:35)
- В SPL есть сетбит, а есть вритебит. Обращаются к разным регистрам.
К одному можно до включения тактирования, кто второму только после. - POV(12.05.2023 14:13)
- Это же не про регистры, а про GPIO - либо GPIOx->ODR записать,
либо GPIOx->BSRR (или GPIOx->BRR). Вот с MODER реально
черт-те что. Eddy_Em(736 знак., 12.05.2023 14:27, ссылка)
- А исключающее или для инверсии бита не подходит? Берёшь маску, все
нули, кроме бита (или нескольких), который(е) инвертируется. И
ксоришь с регистром. Вроде команда атомарная получается. - Nikolay_Po(12.05.2023 16:06)
- Не подходит, конечно. Нельзя инвертировать биты записью в ODR, т.к.
это может повлиять на другие пины (которые, скажем, в это время
менялись при помощи DMA или в прерываниях). Eddy_Em(253 знак., 12.05.2023 16:56)
- Нет, не атомарная. - SciFi(12.05.2023 16:27)
- У кортекса нет команды XOR? Будет ли обращение с исключающем или
атомарным хотя бы по последовательности выполнения инструкций, без
учёта возможного аппаратного изменения бита? Можете пояснить
детали? Пожалуйста. - Nikolay_Po(12.05.2023 16:29)
- XOR - да, выполняется за один такт (вроде как). Но ведь если
работать с ODR, то нужно: 1) считать из ODR данные, 2) применить
маску, 3) записать обратно (пусть даже это будет выглядеть как
GPIOx->ODR |= mask, все равно это - три операции). И, как я
уже говорил, это совершенно не гарантирует, что не будут повреждены
другие биты порта. - Eddy_Em(12.05.2023 16:58)
- У некоторых кортексов есть BITBAND для такого. - LightElf(12.05.2023 16:37)
- У кортекса вся арифметика делается с регистрами проца.
Соответственно, загрузить значение из периферии в регистр проца,
модифицировать его, выгрузить обратно. Минимум 3 инструкции. - SciFi(12.05.2023 16:31)
- Бля... - Nikolay_Po(12.05.2023 16:33)
- Кстати, к вопросу baremetal программирования. Eddy_Em(602 знак., 11.05.2023 23:59)
- У нас ощущается давление - не хотим использовать сторонние
библиотеки, так как могут запретить, отключить, отлучить. Лучше -
когда своё, под своим контролем, а не под контролем
недружественного (если не сказать большего) "дяди". Отсюда и тяга к
bare metal и отвержение чужих облачных услуг. Это первое. Nikolay_Po(694 знак., 12.05.2023 00:13)
- ЕМНИП в США чуть ли не преступлением считается "лишать другого
работы". Я сам дома ремонт делаю, сам полипропилен паяю, кафель
кладу, сварка и т.д., и т.п. А у них бы сказали: низязя! Ты же -
научный сотрудник, а не
программист/электронщик/сантехник/кафельщик/сварщик/слесарь и т.д.,
и т.п. Eddy_Em(89 знак., 12.05.2023 00:39)
- Все имеет свои причины и последствия. Например: для оценщика и
страховщика очень не все равно, как выполнена электропроводка или
уложена плитка в типичном американском домике из говна и палок.
Соответственно деятельность электрика, плиточника или сантехника -
лицензируется, а его ответственность - страхуется. LightElf(248 знак., 12.05.2023 01:30)
- В Европе была история с нашим местным, новороссийским водителем - в
России работал на грузовиках MAN. Переехал в Германию, тоже
работать на MAN. Имел он неосторожность, выполняя местный рейс,
самостоятельно устранить поломку (за два часа). Его спросили,
почему задержался. Объяснил. Итог - грузовик сняли с гарантии -
неавторизованный ремонт. И на эвакуаторе увезли в авторизованный
сервис. А водитель вернулся в Россию и продолжает работать там же,
откуда уезжал. - Nikolay_Po(12.05.2023 00:46)
- На пикабу иногда истории уехавших бывают с обсуждениями
интересными. Механик рассказывал, что джамшут-сервисов там хватает,
только поляки хозяева, а работают из Украины и России. Хватает и
перевозчиков прибалтийских, где условия не сильно от российских
отличаются(включая ремонт кувалдой), кроме зарплаты. И водила из
России скорее в такую лавочку попадет, где и по русски говорят, и
все процессы заточены на адаптацию приехавших. И только потом,
освоившись хорошо, есть шанс на Andreas(26 знак., 12.05.2023 09:46)
- Логично. Завтра грузовик попадёт в аварию из-за неавторизованного
ремонта или какие-нибудь экологические нормы нарушит. Кто будет
расплачиваться? - LightElf(12.05.2023 01:32)
- Факт! - Nikolay_Po(12.05.2023 09:28)
- Регистры, конечно, для крутых программистов, но ими надо уметь
пользоваться. Costic(681 знак., 11.05.2023 15:05)
- К чему это? Я именно так и считываю 1 байт данных. Другое дело - я
не могу очистить FIFO от мусора перед тем, как считать нужные
данные. Даже если сделать 100 раз вызов (void)SPI2->DR,
получим 0 в RXNE, но лишние нули в FIFO! - Eddy_Em(11.05.2023 16:59)
- Насчет volatile ты прав, спасибо. Я у себя подправлю. Всегда так -
как только начинаешь преобразовывать тип указателя, обязательно
что-то не так сделаешь :-) - il-2(11.05.2023 15:26)
- Этот SPL наркоманы кодили штоле? Нафиг эту фигню в качестве примера
приводить? - SciFi(11.05.2023 15:08)
- Ну, оно работает )) Несколько проектов на ф103 - ни одного косяка.
В паре мест лишь к регистрам обращался когда такты жалко было... POV(93 знак., 11.05.2023 15:35, картинка)
- Во-первых, этот фрагмент кода работает. Во-вторых, лично мне
нравится SPL, а вы можете приводить другие примеры, если у вас
есть. - Costic(11.05.2023 15:31)
- SPL - оно ж deprecated! Зачем им пользоваться? Eddy_Em(1369 знак., 11.05.2023 17:06)
- deprecated - потому как нет поддержки последних камней. и
только-то. - POV(11.05.2023 17:06)
- Оно все равно написано из разряда вон плохо! Eddy_Em(418 знак., 11.05.2023 17:08)
- SPL - лучшая библиотека от ST (imho). А метапрограммирование на
шаблонах тут Владислав_С проповедует/просвещает. Но дубы крепки.
:-) - Costic(11.05.2023 19:30)
- Нет там оберток. при flto инлайнит gcc нещадно. Внутри обертки
обращение к одному регистру - значит только это обращение в код и
будет помещено. - POV(11.05.2023 17:10)
- Не стоит забывать еще и об отсутствии культуры написания кода: я
неоднократно встречал записи вида Eddy_Em(1115 знак., 11.05.2023 17:18)
- Оно иногда бывает важно, чтобы именно так. Сначала один бит
взводим, потом второй сбрасываем и только потом - взводим третий
бит. Конкретно у STM такое не припоминаю, но вообще в
однокристаллках - запросто встречается, типо первый бит включает
периферийный модуль, второй - сбрасывает установленный флаг
прерывания, третий - разрешает прерывания. При попытке сделать
одной командой - можно неожиданно улететь в обработчик прерывания с
неправильным контекстом. - LightElf(11.05.2023 20:10)
- Насчёт траты лишних тактов: а как ты сделаешь модификацию избранных
бит регистра, не меняя неизвестные остальные биты? Такое часто
встречается. Я оптимизирую так там, где можно записать регистр
целиком за раз, когда нет неизвестных бит, которые надо сохранить -
пишу сразу. Но в универсальном коде, каким является сабж, ты не
имеешь права менять других бит, так как не ты их устанавливал и
предысторией не владеешь. Поэтому и сброс/установка через
маскирование. - Nikolay_Po(11.05.2023 18:38)
- Могу сказать, что SPI у серии F3 при работе в 8-битном
мастер-режиме отличается от серий F1,F2,F4. Отличия такие: il-2(354 знак., 11.05.2023 13:53)
- Насчёт SPI вангую сам накосячил. Можно подсмотреть, как там у
красноглазиков, может быть, что-нибудь интересное есть
>>> SciFi(2 знак., 11.05.2023 12:55, ссылка, ссылка)
- У экранов, бывает, в шлейфе вообще не подключают линию MISO. Может,
у вас данные идут вообще только с чипа тачскрина, а не с дисплея? Nikolay_Po(281 знак., 11.05.2023 12:43)
- Цука... CH32V00x с WCHlink нихт арбайтен. Требуют WCHlinkE. "Вот
нахуя так делать? И, главное, зачем?"(С)... Да знаю, знаю зачем... - mse homjak(12.05.2023 17:20, ARM, полностью)
- Иии? - Kpoк(12.05.2023 17:28)
- Словил странный эффект: CH32F207 не может получить данные по
Ethernet от LPC1788 при соединении железок напрямую, а через свитч
пакеты приходят нормально. Линк при этом есть. С ноутбуком тоже обе
железки работают. Известные настройки PHY с обоих сторон
поперебирал - получалось только сделать хуже. - AlexG(12.05.2023 09:00, ARM, полностью)
- Столкнулся со странным... Делаю проект на AT32F421 (Cortex M4). В
проекте есть обмен по UART с идентичным другому серийному
устройству (с таким же МК) протоколом. Обмен ведется пакетами по 64
байта. В пакете от ПО к МК имеется CRC8 в 59-м байте, который
считается по таблице. В серийном изделии все работает превосходно.
В текущем проекте просто скопировал весь обмен из серийного. Обмен
идет отлично - пакет в отладчике я вижу идентичный посланному из
ПО. Но CRC при my504(2114 знак., 12.05.2023 11:22 - 12:57, ARM, полностью)
- Не приводится ли каким-то чудом индекс массива Samx(115 знак., 12.05.2023 18:28)
- Для художественного оформления темы - сабж. Вертикальный шилд -
блютуз мост на USB в компе.>>> my504(1 знак., 12.05.2023 18:01, картинка)
- Слона лучше есть кусочками. Если условия позволяют я бы занулил все
64 байта с заведомо известной и легко считаемой crc. Если не
совпадёт при сравнении на приемном конце, начал бы ручками
подбирать величину crc при которой сравнение сработает. То же самое
проделать для 1 байта из 60 меняяя его значение от 0 до FF ну и
далее по всему списку step-by-step по принципу 1 из 60. Так будет
проще найти где и на чем ломается алгоритм. - akz(12.05.2023 17:05)
- Ваша таблица констант может оказаться где-то на разделе между
разными областями памяти, требующими разных команд. Попробуйте
перемещать таблицу в ПЗУ. Ещё, объявите массив констант crc8Table
как volatile. Так компилятор будет вынужден вычитывать значение из
флеш принудительно и не сможет оптимизировать. Я так делаю, когда
нужно иметь возможность менять константы прямо в прошивке. Иначе
компилятор слишком умный - может не читать флешь, заранее зная
результат. - Nikolay_Po(12.05.2023 16:24)
- подключиться к физической линии еще одним rx какого нить уарта с
анализатором протокола и посмотреть, все ли правильно передается - 0men(12.05.2023 14:38)
- Дурацкий вопрос, а не может быть проблема в последнем if-е? Ведь
обычно возвращается 0, когда все нормально и код ошибки,
отличающийся от нуля. А тут наоборот: когда CRC - OK, то
возвращается 1, а когда не ОК, то возвращается 0. - reZident(12.05.2023 13:50)
- Может отладчик виноват? Например открыто окно с регистрами UART? - LightElf(12.05.2023 13:43)
- Проверить арифметику. Вручную. - Cкpипaч(12.05.2023 13:36)
- проверить корректность расчета CRC в онлайн калькуляторе. будет
понятно - неправильно считается при отправке, или на приемной
стороне Andrey190(1 знак., 12.05.2023 13:27, ссылка)
- Кто-то/что-то подсирает в твой буфер и портит правильные данные. il-2(479 знак., 12.05.2023 12:18)
- Это такой метод црц - помимо ксора ещё и мотаться беспорядочно по
псевдослучайному массиву? - Ralex(12.05.2023 12:07)
- А "на том конце" crc=0xFF при инициализации? - Гyдвин(12.05.2023 12:06)
- В arrayUARTin пишешь из прерывания? На всякий случай объяви его
volatile. Компилятор не менял? Свежие - умнее. - Nikolay_Po(12.05.2023 11:57)
- Скобки от for? Или у вас осознанно crc считается по всему блоку, за
исключением одного байта в середине? Cкpипaч(153 знак., 12.05.2023 11:30)
- А на какой функционал МК надо смотреть - чтобы я к нему мог USB
флешку подключить? - POV(12.05.2023 13:28, ARM, полностью)
- Делаю первые шаги с ST32F407. Первый шаг - меандр на выводе.
Делается все в кубе, HAL, и все такое. Вроде бы ни чего сложного,
но меандр выводится 1мс, а дальше процессор куда-то улетает. Если
его принудительно остановить, окажется что он на адресах 0x1fff....
например 0x1fff3744. Как туда попадает не понятно. Если перед
циклом запретить прерывания через __disable_irq(); то меандр
генерится бесконечно. Вроде бы для всех возможных прерываний кубом
генерятся заглушки с AlexBi(62 знак., 10.05.2023 19:07, ARM, полностью)
- IAR можно подружить с китайским СТ-линком? , я как только не
пытался включить софтварный ресет, ничего не получается. В итоге
прошил через СТлинк утилиту и танцы бубном. IBAH(1 знак., 10.05.2023 21:30, ARM, картинка, полностью)
- Столкнулся с проблемой на МК ARM ядре: один и тот же исходный код в
среде Keil работает, а в IAR - нет (по коду микроконтроллер входит
в режим пониженного потребления и в Keil он просыпается, а в IAR
вызывается исключение HardFault по причине BFAR - т.е. каким-то
образом портится адрес по которому идет обращение). Peter_M(330 знак., 07.05.2023 10:29, ARM, полностью)
- Продолжая изучать тему подключения м\к к Ethernet обнаружил, что у
обычных м/с физ.уровня есть возможность задать произвольный адрес
из диапазона 0-3. Это получается что я могут на одном м\к с МАС,
подключив 4хPHY параллельно, получить 4 порта Ethernet, пусть и
работающих не одновременно, но между которыми можно переключаться?
Или одновременно?? Или зачем придуман адрес у PHY? - AlexBi(03.05.2023 21:25, ARM, полностью)
- я чего-то пропустил? Народ тут мечется в поисках замены STM32. А
вот Промэлек отдать почти даром сотни штук. Или проблема у тех кто
хочет тысячи в месяц? Лaгyнoв(1 знак., 15.04.2023 11:52, ARM, ссылка, полностью)
- Да вроде никто уже никуда не мечется. Когда пропали - перелез на
китайцев и ST уже побоку. Ложка дорога к обеду. Баклан, прилетевший
поздно - пролетает мимо. И много прочей народной мудрости. - LightElf(02.05.2023 23:20)
- Видимо, мечутся те, кому нужны очень большие партии и "в продакшн".
Я на работе всякое железо разрабатываю, комплектуха почти на 99% -
с алиэкспресса! И те же STM32. Да, 100-ногие STM32F303 дороговаты
(почти 1000р за штучку китайцы просят), зато нашел по 50р
STM32F103C6T6, взял себе три десятка на будущее (все надеюсь, что
дойдут-таки руки и до разработки для себя любимого: наделать в
машину CAN-модулей управления стеклоподъемниками, фарами и т.п.
некритичными системами; Eddy_Em(146 знак., 02.05.2023 23:08)
- Нам 207, 407 нужны с эзернетом, с ними сложнее, но до конца года
уже закупили и с GD32F207 чел разобрался. Не мечемся:-) - Visitor(15.04.2023 12:30)
- СТМ и прочие решили рынком порулить, дефицит искусственно создали.
Щас расхлебывают это.. в виде засилья повылезавших китайцев. - POV(15.04.2023 11:58)
- Пытаюсь придумать, как лучше организовать тактирование для
AT32F407, что бы и USB работало, и Ethernet, и что бы деталей
поменьше? У этого м\к есть внутри встроенный генератор 24МГц, что
вроде как хорошо подходит для УСБ, но ни как не годится для
тактирования физ.уровня Ethernet. Можно к процессору подключить
кварц 25МГц, будет чем тактировать Ethernet, но что при этом будет
с USB не понятно. Или надо кварц 25МГц подключать к м\с физ.уровня
(вроде бы они готовы к такому), а AlexBi(60 знак., 02.05.2023 19:16, ARM, полностью)
- Откройте диаграмму клоков из описание там вроде все понятно, я 407А
крутил проблем особых не увидел. - PeterD(02.05.2023 20:44)
- На СТМ делали просто: противофазные выходы ШИМ на драйвер идут и
через транс TTB0505-1T с мостом, силовыми ключами на 48 В рулят. А
для запуска модно линейный с отключением поставить. Частота ШИМ
чуть выше 100 кГц. - Visitor(02.05.2023 20:20)
- а что там, плл нет как в стмах? из 25МГц кварца можно все сделать в
стм и гд - 0men(02.05.2023 19:27)
- ПЛЛ есть, при использовании встроенного генератора умножаться будет
4МГц, коэффициент до 60, макс.частота 240МГц. Поделить до 25МГц не
представляю как, и не знаю какая точность у 25МГц требуется. При
использовании внешнего 25МГц можно оставить тактирование USB от
встроенных 48МГц, но тут мне не понятно нужны ли процессору внутри
эти 25МГц для работы Ethernet, или он может работать на любой
частоте, а кварц подключать к м\с физ.уровня? AlexBi(195 знак., 02.05.2023 19:45)
- У стм есть 2 плл. Но 25 и 48 не очень соразмерны, не факт, что есть
вариант. - SciFi(02.05.2023 19:29)
- Коллеги, просьба к оVPNенным. Качните, пожалуйста свежие доки на
iMX7 Dual Core. ДаташЫт, errata, manual, обзорные документы.
Заранее спасибо! Они вроде стали появлявляться в продаже, пусть и
по странным ценам типа $35, и вроде как там есть 2D ускоритель для
графики. Хотелось бы поизучать тему внимательнее. - Evgeny_CD(02.05.2023 18:51, ARM)
- [Microchip SAMA7G5]. Пока есть только SAMA7G54. Наш будущий любимец. 1 ГГц Cortex-A7.
<$10 1к+ опт. [Серия - Июль 2023]. Eval борда $330 Evgeny_CD(1 знак., 01.06.2022 01:35, ARM, ссылка, полностью)
- !!! Директ уже торгует SiP, хотя он официально не объявлен.
SAMA7G54D1G-I/4UB. Гигабит памяти внутри. -40C to +85C. Поставка
ноябрь 2023. Evgeny_CD(743 знак., 02.05.2023 17:02, ссылка)
- На директе уже есть цены, поставка ноябрь 2023 Evgeny_CD(34 знак., 02.05.2023 16:57)
- Вышла вторая версия errata, и там говнеца, конечно, добавили.
Заодно вторая ревизия чипа вышла. + свежие документы по чипу Evgeny_CD(132 знак., 02.05.2023 16:56, ссылка, ссылка)
- Бесполезняк. Кусок кремния. - Samum421(02.06.2022 22:39)
- Санкции. И его даже Маузер еще не предлагает. А уж что он в России
окажется, не верю 33 раза. - Samum421(02.06.2022 23:46)
- Важно не допускать перемножения вероятностей неуспеха. Этот чип
скорее всего будет работать хорошо, полная открытая дока, фирменный
линух и все такое. Я уже высказал наблюдение, что эта серия
аппликешн процессоров у Атмела, и Микрочип, похоже, успешно
продолжает традиции, широко применяется и весьма медленно снимается
с производства. По сути остается только вероятность неуспеха
телепортации. Если не нужно 100к в мес, то это оборимо. - Evgeny_CD(03.06.2022 00:50)
- На сайте Микрочипа четко написано, что скоро будет партия 1к и
далее следующая партия июль 2023. Логично, что Mouser не стал пока
париться. - Evgeny_CD(03.06.2022 00:47)
- ? - Evgeny_CD(02.06.2022 22:45)
- Фирменный Linux 5.15.32 имеется Evgeny_CD(43 знак., 02.06.2022 22:36, ссылка, ссылка)
- 1G Ethernet есть. Отладка, быстрый интерфейс к FPGA. - Evgeny_CD(01.06.2022 01:46)
- И вроде как даже UART с I2C без багов. Там 12 универсальных
интерфейсов :) Evgeny_CD(51 знак., 01.06.2022 01:42, ссылка)
- DC-DC к нему. MCP16502. Лежит на складах - Octopart показывает. Evgeny_CD(1 знак., 01.06.2022 01:40, ссылка)
- Графики там нет никакой. Чип полностью документирован. Секурность
есть, это плохо, но ее можно не активировать. - Evgeny_CD(01.06.2022 01:37)
- CH32F207. Отлаживаю передачу по I2C в режиме Master с
использованием DMA. Код из STшной AN2824, почищенный от не-DMA
способов передачи. Первый пакет уходит нормально, а при попытке
передать второй такой-же DMA срабатывает раньше времени, сразу при
разрешении канала. Напоминает эффект от оставленного несброшенным
флага прерывания при использовании прерываний. В Reference Manual'е
сказано, что DMA чрабатывает по событию TxE, но перед ложным
срабатыванием DMA бит TxE в регистре AlexG(927 знак., 29.04.2023 18:51, ARM, полностью)