Перейти к содержанию
    

juvf

Свой
  • Постов

    1 611
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент juvf


  1. Библиотеки для STM32

    есть вопрос - есть ответ. например передача параметра. параметр меняется от p0 - до p100, частота линейно должна меняться от f1 до f2. только не нужно спрашивать - "А это для чего"? или"А почему аппаратно не заюзать выход таймера?". Или выдаем байт последовательно, как уарт, только биты кодирутся не 0 и 1, а частотой f0 и f1.
  2. Библиотеки для STM32

    программный вывод миандра на порт. в прерывании по таймеру дёргать переключать пин.
  3. Библиотеки для STM32

    Ни кто не предлагает заменить BSRR на инверсию. Предлагают дополнить BSRR ещё и инверсией. не понятно - что теряем. Задача - перманентно выставлять РА1 и сбрасывать в одной задаче, и переключать РА5 в другой задаче. Если добавить регистр апаратного тогл, какую полезность теряем?
  4. Библиотеки для STM32

    а это разве не проверка? 1)читаем GPIOx->IDR (только правильнее будет ODR) 2)инвертируем ~GPIOx->IDR 3)& 0x81 4)| 0x00810000 5)записываем BSRR хотя согласен, для более одного пина, ваш вариант лучше, чем явные ? и if с аппаратным тогл, как в XMC4700/4800 1)GPIOx->BSRR = 0x0081'0081;//одна операция!!!
  5. Библиотеки для STM32

    Если у бабки были бы яйца... Только я в своем примере указал GPIO_ToggleBits() от стм, а они пользуют ODR, а не BSRR. а так согласен, запись в BSRR не создаст колизии, и тем не мение, осутствие аппаратного тогла требует лишней проверки выхода. я не имел в виду одним пином.
  6. Библиотеки для STM32

    на вскидку один я уже писал в этой теме. на РА0 у вас CS, на РА5 у вас светодиод внешний вачдог. каждый пин дергается в отдельном потоке. Если использовать неатомарный тогл (GPIO_ToggleBits() ) для вачдога из SPL от STM, без критСекций/запрета прерываний/мьютексов на порта РА, то будет косяк. Да даже без ОС: в главном while вы работаете с РB1, в прерывании PB2 - вот ещё случай.
  7. Библиотеки для STM32

    я понял... просмотрел, уже отписал. тут я согласен а вот тут не понятно.... вы говорите, что если вам надо переключить бит, вы - установлю или сброшу его в состояние, противоположное предыдущему. Что в библиотеке и сделано. т.е. программно его инвертируете. Но аппаратное атомарное инвертирование - это для вас глупое свойство, не дающее никакой пользы. По мойму сами себе противоречите. Польза в том, что инвертирование вывода будет за 1 машинный такт, атомарное, вот и всё!
  8. Библиотеки для STM32

    Это глупое свойство, не дающее никакой пользы. где тут пара? jcxz говорит, что в Infineon XMC4700/4800 для инверсии вывода, одного вывода, нужно в BSRR регистр записать одновременно SetBit и ResetBit. При этом, вне зависимости от состояния вывода, он инвертируется. Эта операция атомарная и можно из разных потоков, даже из прерываний безопасно это делать. например для вывода РА0 это выглядит так GPIOA->BSRR = GPIO_BSRR_BS0 | GPIO_BSRR_BR 2ViKo а про Комплементарные сигналы - тут я соглашусь, можно без тогла 2 вывода одновременно дёрнуть.
  9. Библиотеки для STM32

    Вы заблуждаетесь, они с вами не согласны. ))) Иногда требуется не просто установить в 1 или в 0, а переключить. Для чего - это отдельная тема. В некоторых процессорах, если не ошибаюсь, есть отдельный регистр для toggle. В стм32 его нет. Плохо. Но st такой функционал добавили в SPL. /** * @brief Toggles the specified GPIO pins.. * @param GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F405xx/407xx and STM32F415xx/417xx devices * x can be (A..I) to select the GPIO peripheral for STM32F42xxx/43xxx devices. * x can be (A, B, C, D and H) to select the GPIO peripheral for STM32F401xx devices. * @param GPIO_Pin: Specifies the pins to be toggled. * @retval None */ void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); похоже вы не понимаете о чем речь идет. при чем тут один вывод и другой одновременно? тут всего один вывод требуется инвертировать.
  10. Библиотеки для STM32

    Не ради спора... а чтоб расширить кругозор... искать ваши объяления/определения... классы/шаблоны..... поясните, если не сложно... или покажите сырцы GpioB<> пусть b = 0xff; GpioB<4>::write(b & 0x20); b & 0x20 даёт 0x20. что дальше? write() принимает bool. т.е. при передачи аргумента есть неявное преобразование uint8_t(0x20) в bool (0х01)? да и ещё и передача аргумента... т.е. копя data создается внутри write().
  11. Библиотеки для STM32

    такая же фигня. вообще не пользовать оператор ? до недавнего времени.... меня, когда "воспитывали", то по рукам били за несколько операторов в одной строке. И отучили. В принцепе согласен.... такие конструкции как if(isLow()) return; ухудшают читаемость кода. стал пользовать if (isLow()) setToHigh(); else setToLow(); после перешел на ?. нет портянок и нет в одной строке кучи операторов
  12. Библиотеки для STM32

    void toggle() { isLow() ? setToHigh() : setToLow(); }
  13. Библиотеки для STM32

    Я видел. Полистал код. На заметку взял. Спасибо!!! Всё? Расходимся! )))))))))))
  14. Библиотеки для STM32

    есть проект, где светодиод мигает, показывая живучесть системы. не было cpl, использовал с дополнительным флагом сет/ресет. А так бы было бы удобно cpl. ps ещё програмный меандр выдавать.... можно найти применение cpl-ю
  15. Библиотеки для STM32

    Навскидку... void toggle() { port->BSRR = (port->ODR & pinMask) == 0 ? pinMask : pinMask << 16; } !!! Извини.... но блин.... это всего лишь ногой дёрнуть!!! ))))))))))))
  16. Библиотеки для STM32

    Даже коментировать тут нечего.... Полемика. Ну я же говорю, бинарно мыслите... при чем тут уарт? я вам сказал что макросы ВЕЗДЕ лучше классов/шаблонов? я бы не так сделал. была подобная задача.
  17. Библиотеки для STM32

    просто ужос!!!! такие элементарные вещи... вроде разживал все... выделил жирным шрифтом, что при изменении РАЗНЫХ ПИНОВ РАЗНЫХ!!! ну не видите вы сами... я же вам привел пример... РА15 и РА5 пошагам.... пусть cs будет РА1, а led будет PA4. воспользуемся литералом b. для кратности пусть порт будет 8 бит. изночально в ODR 0b0000'0000 вы в одном поторке выитали ODR, он равен нулю. второй поток прервал первый. второй поток вычитал ODR и добавил туда cs, стало 0b0000'0010. теперь записал это в ODR. Сs стал "1". Вернулись в первый поток... 0b0000'0000 добавили бит светодиода, получили 0b0001'0000 - записали в ODR - всё!!! CS сбросился! Упс!!! раз вы пишете на RTOS, должны знать про неатомарные операции БИНГО!!!!
  18. Библиотеки для STM32

    бррррр... а при чем тут модер? )))) от куда вброс про многопоточность? вот от куда тогел потоко не защищённый. Осторожно, тут мины!! )) я вам про фому - вы мне про ерёму ))))
  19. Библиотеки для STM32

    я вам не говорю, что явно не надо задавать. я вам говорю, что int - всегда знаковый. и объяснил вам от куда у вас были грабли с чаром. и что компиляторы одинакого компилят.
  20. Библиотеки для STM32

    пишете мне Читайте внимательней, а сами невнимательны ;). Я писал давайте перефразирую вы в одном потоке дергаете cs? который есть PA13, а в другом потомке маргаете диодом который сидит на PA5.
  21. Библиотеки для STM32

    По стандарту char/int/long - без указания знаковости считаются знаковые. Во всех компиляторах. Нет других компиляторов. По крайней мере я не встерчал. если встретите - маякните, поизучаю. что касательно этих граблей.... можно дать ключ компилятору, считать char без явного указания unsigned/signed как беззнаковый. у int/short/long это не поменять, только у char. я char использую всегда как занковый, как стандартный дефолтный. ибо если собрать на другой платформе без ключа - то упс!!! Но, в идэ, например в IAR в гуях есть галочка "char как беззнаковый". При создании нового проекта, эта галочка установлена, т.е. иар в тихушку просовывает этот ключ компиялтору меняя у чара знак. Я тоже на это наступал.... решил проблему отказом от char взамен на uint8_t в качестве байтовой переменной. или же всегда указываю у чара явно знаковость. а если мне нужно хранить текст, например char *p = "hello world"; - тут без разницы - есть знак или нет, тут можно упустить знак. Для чара это тру!!! из-за таких тихих подстав от IDE у некоторых складывается впечатление, что char по дефолту беззнаковый. Спасибо большое!!!! А есть для f1 и вообще... огласите полный список? )))) может и для авр кто написал такие классы? ))
  22. Библиотеки для STM32

    ну вот у меня новая задача. stm32l052. от чего я эту тему и открыл. Нужно быстро код написать.... цепляю #include "stm32l052xx.h" написал макрос, т.е. написал определение #define csOn() (GPIOA->BSRR = (1<<4)) использую csOn(); если нет stm32l052xx.h - можно заглянуть в даташит (а в него всё равно глядеть) и написать #define csOn() (*(uint32_t*)0x1234'5678 = (1<<4)) не камельфо, но всёже... один раз определил и забыл. Но, есть замечательный тру с++ с ооп. чо как лох буду макросы. Нада же легкочитаемый код.... можно через Pin<>. Где его взять? вместе с stm32l052xx.h он не поставляется. писать свой? отлаживать? скаченный с гитхаба для Ф4 серии. а если вообще решили на msp430? Я говорю - это 100500 строк кода. Причем, в этом pin используется всё тотже stm32l052xx.h.
  23. Библиотеки для STM32

    где определение шаблона Pin<>? ещё 100500 строк!!! ну вы не видите, что ваш тогл, при "одновременном" переключении разных бит, в одном порте из разных потоков не будет работать? Т.е. вы не оспариваете что у вас мина в коде, вам предлагают её разминировать, на что ответ - это придирки. ))) Профессиональный подход, чистый код, легкочитаемый и переносимый .... ну ну .. ))) 225 постов.... не увидел где была ссылка или упоминание на стандарт, в котором int беззнаковый. Не могли бы вы меня ткнуть носом, плииз.... приходится унижаться, чтоб получить знания, ДОЖИЛИ!!! И о каком стандарте вы говорите, в котором всё иначе? может мы на разных языках пишем? Я думал мы тут делимся опытом, а не писками меримся. Просто отказ подкрепить свои слова пруфлинком выглядит как пустые слова... у меня длиньше, но я не покажу
  24. Библиотеки для STM32

    АНТОХА... не путайте мухи с котлетами.... вы сравниваете определение vs использование. Вот использование vs использование при использовании с дефайнами даже объявление не нужно, т.е. нет строки using CS = Pin<'A', 4>; давайте сравним опеределение vs определение 2Forger пруфлинк? Стандарт строго оговаривает, что int - знаковый. пруф? Стандарт оговаривает 4 байта в формате IEEE754 wtf? Это bool чтоли? я высказывался за свой вкус про всякие SIGNED32, U32.... тут даже не вкус. почему мне не нравиться: если скописастить кусок кода из другово проекта, то не соберётся, нужно тащить до кучи мои типы данных. Это напрегает. в коде могут быть заимствования из 3-х 4-х проектов. получается для каждого стиля до кучи нужно тащить типы данных. В одном проекте можно увидеть весь зоопарк определений. во вторых.... Forger я понял, что для вас литералы - это магические цыфры.... 0x10 или 0b1010110- это что-то плохое, что мешает чтению кода. есть стандартный uint32_t. А использование своих типов взамен стандартных - вы считаете это тру стиль? в третих.... ну даже если там глаз режет uint32_t. вам милее U32. Дело вкуса. Но, у вас в тайпдефе мина. например typedef signed int SIGNED32; вы пишете какойнибудь код.... допусим расчет CRC на ARM. Один раз написал и забыл. Но встала задача посчитать CRC на Atmega. там int не 32. Вы/коллега/ученик перенёс на АВР ваш код... и упс!!! почему бы не определить так? typedef int32_t SIGNED32; естественно.... так же как и в шаблонах/классах чего? я затронул только переключение бита. инит нужен. его можно и функцией, и макросом, можно классом...можно сразу хором весь порт GPIOA проинитить.... это как вам угодно. Я просто хочу сказать, что не нужно думать бинарно.... у вас либо 0, либо 1. Либо С++ с ООП в полный рост безоговорочно.... с оверинженерингом, либо если один макрос или литерал воткнут - то это непрофессионализм. Использование стандартного литерала х и b - это фу фу фу, магическая цифра.... зато SIGNED32 (при чем с миной) - это круть!!!!
  25. Библиотеки для STM32

    А я не против библиотек. я использую и спл, и хал, и калокуб и прямой доступ и классы/шаблоны. Там где удобно использовать 0x82 - я использую. Там где удобно использовать 0b0101010 - я использую. Просто я пояснил, что иногда использование прямого доступа, а также литералов x и b удобнее и даже эффективнее, чем самописные библиотеки/шаблоны. Просто есть религиозные люди, которые сало не едят 0b0101010 - не приемлют ... и начинают учить правильно жить по их вкусу. спасибо большое.... только там куски... какие то... был бы совсем респект, если бы свои pin.рhh в полный рост в студию... и с примером... тогда точно кому-то пригодится, и вы будете рады ;) наверно можно гипотетический пример придумать такой... но #define csOn() (GPIOA->BSRR = (1<<4)) написал за несколько секунд. отлаживать не надо, в использовании csOn(); Теперь какой можно написать класс... гораздо быстрее, который будет столь же эффективней и при этом будет ГОРАЗДО читаемый?
×
×
  • Создать...