Jump to content
    

All Activity

This stream auto-updates     

  1. Past hour
  2. Позволю себе процитировать одну известную и давнюю книгу от мэтров программирования Автор. Название. Издательство. Год издания.
  3. Тут пример был про PLL. PLL инициализируется до всех прерываний.
  4. Там пишут немного другое, скорее даже совсем другое ...
  5. скорее всего вы вообще не проверяете все это(это для цифровой логики в основном). отключите проверку и забудьте про эти варнинги
  6. Today
  7. А зачем? К тому же иногда один и тот же код "вдруг" становится разделяемым с другим потоком или прерыванием. И все - операции RMW становятся не атомарными. Ловить такие грабли очень не приятно, а лечится лишь приучением делать именно одиночную запись там, где это можно сделать именно обычной записью.
  8. Такое я стараюсь избегать, по возможности. А возможность - это когда статически (т.е. не в рантайме) можно знать содержимое регистров управления. Поэтому делаю набор "базовых" значений и при необходимости добавляю к ним флаги namespace SPI { enum { SPI_CR1 = 0x2 << SPI_CR1_BR_Pos | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR }; inline void init() { CPU::CriticalSection(); SPI3->CR1 = SPI_CR1; SPI3->CR2 = SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN; SPI3->SR = 0x0; SPI3->CRCPR = 0x0; SPI3->I2SCFGR = 0x0; SPI3->I2SPR = 0x0; __DSB(); } inline void enable() { SPI3->CR1 = SPI_CR1 | SPI_CR1_SPE; } ... }
  9. Спасибо за ответ! Unspecified правда все равно выдает ошибку, [Warning] ... contains Input Pin and Unspecified Port objects А с отключением проверки хорошая идея. Подскажите - а в этом случае тоже только глобальное отключение проверки поможет, или можно как то индивидуально пометить цепь, что с ней все OK? [Warning] ... Net NetC45_2 has no driving source Вы рекомендуете забивать на такие warnings или как то метить их или отключать?
  10. Можно еще сократить до snd. И даже еще больше - до tx. Вы уж извините. Но что-то не сходится. То вы строительством занимаетесь, то у вас одинаковый стаж программирования с человеком, который всю жизнь программированием МК занимался. А я просто чтение-модификация-запись использую // switch system clock to HSI RCC->CFGR &= ~(0x03UL << RCC_CFGR_SW_Pos);
  11. Hello , I have two DC inputs, how do I calculate common voltage and differential voltage from these inputs? Thanks.
  12. а если вместо "распределённого", каскадировать с совсем небольшим усилением для получения большой полосы, есть же с fT под 50ГГц копеечные вч транзисторы ? тем более что коэффициент усиления не особо большой нужен.
  13. Позволю себе процитировать одну известную и давнюю книгу от мэтров программирования: (извиняюсь, пдф-ка без распознавания текста, только в виде картинок)
  14. Понятно. Вы конечно мега-монстр программирования, но корона вам не жмет? 🙂 Считаете себя умнее основоположников программирования и авторов языков программиования 🙂 А всё потому, что вы мало читаете и слишком много о себе мните. Хотя мы с вами - ровня. Я пишу такой же говнокод, как и вы, точь-в-точь 🙂 У нас одинаковый опыт, одинаковый возраст и стаж. Просто я, в отличие от вас, не считаю себя умнее всех и не изобретаю велосипедов на треугольных колесах, а еще умею слышать оппонентов. Вы - ничего кроме себя не слышите. В этом и ваша слабость 🙂 В чем вы в совершенстве преуспели - так это в искусстве СПОРА. В полемике. Это у вас не отнять, вы мега-мастер споров. А в остальном - точно такой же как и я, не лучше, не хуже. Просто я читаю гораздо больше вас, а вы, кроме своих мух, ничего не знаете. Точка. Дальше я в этих спорах участвовать не собираюсь. Я не мастер полемики, мне это просто скучно. Это как с голубем в шахматы играть - он раскидает все фигуры и полетит хвастаться 🙂
  15. Ну да: "Миллион мух не могут заблуждаться. Если они туда летят, значит там действительно что-то вкусное." Подумал Вася, направляясь к объекту "М/Ж". Все калы и кубы пишутся для начинающих. А значит - пишутся так, чтобы быть доступными для понимания даже ребёнком. Точно так же, как детские игрушки делаются из безопасных материалов, которые можно хоть жевать без вреда, и без острых углов. Но это ведь не повод, чтобы вообще запретить всякие острые и тяжёлые инструменты. Взрослый сам может решить - какой инструмент ему лучше. На то он и взрослый. Так и эти ваши правила, которым вы слепо поклоняетесь, как религиозный фанатик, не вникая - они придуманы для начинающих. Чтобы помочь им сделать первые шаги. Когда ещё ноги не уверенно стоят на земле и голова не соображает куда идти. Чтобы не пропал этот карапуз, не заблудился, не попал в беду. А профессионал - он уже как взрослый - он сам волен решать - как ему действовать. Так как набрался жизненного опыта, он знает что и с чем едят. Он дееспособен. Он сам волен принимать решения и отвечать за свои поступки. И как для дела удобнее - так и следует оформлять исходники. А не как "гуру" из инетика посоветовал. Если своя голова на плечах есть, то никакие указания всяческих "гуру" не нужны. Тем более смешно слышать аргументы типа: "Все же так делают, значит это правильно". Подавляющее большинство этих всех - это чайники. И правила ваши пишутся - для этого большинства. А знающий человек - сам знает как ему поступать. Без советов сопливых... Я выше приводил конкретный пример. Который как раз иллюстрирует преимущество использования числовых констант. С вопросом: "Как то же самое написать без привязки к конкретным номерам битов?" Вы что-то сказали по нему (по делу)? Показали как это можно реализовать в соответствии с вашими проповедями? Нет, ничего не предложили. А треплетесь бесцельно уже сколько времени.... Скорее всего - типичный копи-паст fail. Но не факт конечно.
  16. Покажите настройки BTR CAN и какова битовая скорость?
  17. Благодарю всех за толковые советы. На плате плате установил мигающий светодиод, который управляется из основного программного цикла. Увидел, что МК работает на -50, а вот связь по CAN обрывается, МК - ведомый. Вот поэтому я ошибочно считал и всех вас переполошил, будто МК зависает. А перед тем, как связь терялась шли пакеты с ошибками, потому я считал, что данные портятся в ОЗУ. Кварц 16 МГц для задающего генератора уже менял, может он "плывет"?! Буду разбираться с системой тактирования CAN, чтобы понять почему набегает рассинхронизация приема.
  18. Но в этом имени есть главное его свойство - send и этого уже достаточно. Эти и подобные ему постулаты изложены в книгах по программированию. Надо их просто читать, а не изобретать собсвтенный велосипед на треугольных колесах.
  19. Осмысленность имен не имеет особого значения вне определенного контекста. Поэтому о лаконичности обычного send() в драйверах UART-а или send_uart1_slip_protocol() можно спорить до бесконечности.
  20. Раскопал у себя в архивах вышеназванную книгу. И приведу выдержку из нее:
  21. Опять же - пример из референса на STM32F4 Шо за зверь такой этот 29 бит? Разумеется, в готовых хидерах его нет. Ну раз надо его кепт, то я его кепт, просто этим самым макросом RCC->PLLCFGR = BIT_FLD(RCC_PLLCFGR_PLLM, 8) | BIT_FLD(RCC_PLLCFGR_PLLN, 160) | BIT_FLD(RCC_PLLCFGR_PLLP, 0x0) | BIT_FLD(RCC_PLLCFGR_PLLQ, 10) | RCC_PLLCFGR_PLLSRC_HSE | B29;
  22. Ну дак никто против этого ж и не стоит. Однако, если лампочки - то биты вполне можно назвать L0, L1... В общем, все-таки почитайте вышеприведенную книгу 🙂 Там конечно не обязательно со всем прям стопудово соглашаться, но базовые направления, основы, концепция - она таки да.
  23. Ну, иногда всякие B0, B10 использовать действительно удобно. Например, когда биты никакой смысловой нагрузки не несут - несет лишь числовая составляющая позиции. Например, в неком протоколе передается регистр. В описании 16-битного регистра написано - у тебя 16 лампочек с 0 по 15. Т.е. нет какой-то смысловой нагрузки в самих битах, у них нет как такового названия. Важно лишь, что каждому биту N соответствует лампочка N. Вот там уместно пользоваться всеми этими B0...
  24. Ладно, черт с ним. Тут дело не в частностях реализации, дело в общей концепции построения. Вот и пакет CubeHAL от ST придерживается такой же концепции. Эти HAL и BSP не с потолка ж были взяты. Да и поставляемые пакеты CMSIS тоже не просто так поставляются. Там много людей над этими пакетами работали, и не один год используются. Значит, это направление ВЕРНОЕ. Множество людей не могут заблуждаться же. Тем более, основоположники современного программирования такую концепцию и разрабатывали. Я читал довольно много книг от авторов, стоявших у истоков современного программирования. И все они придерживались одного пути. В частности, применительно к теме здешнего разговора последних страниц, они утверждали, что текст программы должен содержать осмысленные имена, отражающие суть описываемых действий и инструментов. То есть, SPI_CR1_SPE является абсолютно корректным именем с этой точки зрения. А вот B0 - как раз не является хорошим тоном в программировании. Не важно, на чем эти имена построены, на #define или на struct, но имя должно отражать суть, а не быть набором бессвязных букв. Советую почитать хотябы книгу Эндрю Ханта "Программист-прагматик". В ней рассмотрены общие принципы построения, обсуждаются способы, как избежать "выстрела себе в ногу". Изложение конечно несколько отвлеченное, но программирование - это ведь в том числе и философское занятие.
  25. Если в том холодильнике он найдёт пивас, то может долго там её искать.
  1. Load more activity

  2. Mark site read
×
×
  • Create New...