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

26 минут назад, Eddy_Em сказал:

нужно было в прерывании флажочки поменять, чтобы таймер следующий раз не сработал

Это можно сделать при помощи самого таймера, другого таймера (в режиме slave или master), DMA.

Я с таймерами STM32 очень плотно работаю, причем, во всяких экзотических применениях - если подробнее опишите задачу, могу попробовать предложить аппаратное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, Eddy_Em сказал:

А что до "хала", так если б я его использовал, то как раз непроизводительно время и тратил

Вы его не использовали, поэтому теоретизируете на пустом месте, основываясь на словах тех, кто использовал без понимания. Я использовал HAL, писал и в вашем любимом стиле без всяких прослоек, "на регистрах". Так что в данном случае мы с вами находимся на разных позициях с точки зрения опыта.

26 минут назад, Eddy_Em сказал:

а) мне пришлось бы больше документации читать

Вы не пробовали, но думаю что больше. Скорее пришлось бы читать другую документацию, если, конечно, вы в общем понимаете как работает периферия STM32Fxxx. За нюансами в любом случае придется лезть в DS и RM.

29 минут назад, Eddy_Em сказал:

б) пришлось бы тратить больше время на написание этих диких портянок кода,

Вот в этом вы не правы, т.к. HAL и ему подобные библиотеки как раз для того и созданы, чтобы концентрироваться на реализации бизнес-логики, а не на общении с железом (те самые пресловутые портянки). В среднем же эта бизнес-логика никуда не денется из ваших реализаций, только вместо HAL там будет EMAL (EddyEm Abstraction Layer), т.е. те же яйца, только в профиль. Разве не так?

32 минуты назад, Eddy_Em сказал:

в) если бы пришлось поднять старый проект 5-7-летней давности и что-то там поменять, то в случае "хала" было бы проще с нуля заново написать!..

Без комментариев. Но одно ясно точно, что если бы проект был написан на голом ассемблере без макросов, то вы бы разобрались в нем в 100500 раз проще и быстрее. Поэтому рекомендуется писать сразу в машкодах, что бы случайно не усложнить себе жизнь потом, лет через 5-10. ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, adnega said:

если подробнее опишите задачу, могу попробовать предложить аппаратное решение.

Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить, увеличивая размер буфера на 1 и записывая туда нуль (или 255 - в зависимости от полярности), либо еще больше велосипедить с быстрым выставлением OPM и сменой режима на лету.

10 minutes ago, makc said:

Разве не так?

Не так. У меня используются "родные" сниппеты от ST, их в подавляющем большинстве случаев хватает. И никаких абстракций нет, все в лоб, так что время попусту тратить не нужно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, Eddy_Em сказал:

Не так. У меня используются "родные" сниппеты от ST, их в подавляющем большинстве случаев хватает. И никаких абстракций нет, все в лоб, так что время попусту тратить не нужно.

Т.е. получается, что прикладная логика и работа с железом круто замешаны в общую кучу? В лучших традициях Ардуино и индусского кода? ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, makc said:

получается, что прикладная логика и работа с железом круто замешаны в общую кучу?

Естественно! Разве что аппаратнозависимые вещи иной раз выносятся в отдельный файл - чтобы проще было портировать на другие семейства STM32. Да и вообще, ссылка на гитхаб у меня в профиле есть. Кому хочется - можно мой говнокод посмотреть...

А что, у кого-то это делается не так? Хотелось бы пример увидеть.

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 минуты назад, Eddy_Em сказал:

Разве что аппаратнозависимые вещи иной раз выносятся в отдельный файл - чтобы проще было портировать на другие семейства STM32

Это и есть тот самый EMAL, который по своей сути (абстракция доступа к железу) является аналогом HAL, только в вашем исполнении. Но перед этим вы утверждали, что не используете абстракций, а значит вы сами себе противоречите и сами себя не читаете.

35 минут назад, Eddy_Em сказал:

А что, у кого-то это делается не так? Хотелось бы пример увидеть.

Я как раз говорил выше, что если есть какое-то подобие архитектуры в проекте, то +/- будет такое расслоение, но вы начали утверждать, что у вас не так. Хотя потом оказалось, что всё-таки так. Или нет? ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, makc said:

Или нет?

Не везде можно сделать четкое разделение, выделив функции работы с железом в отдельные файлы. Вот, например — при работе с CAN невозможно обойтись без контроля флагов. Можно, конечно, было бы отдельно в hardware.h засунуть кучу макросов, но смысл, если они только в одном файле используются и от при смене архитектуры придется иной раз сделать несколько больше, чем просто содержимое макросов поменять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Eddy_Em said:

HAL

Претензии к HAL на ST процессоры имеют место быть: хотя процессоры из одной кузни, спецификация периферии изменялась со временем. Например, тот же ужасный I2C на F1xx/F3xx линейках заменен на более автономный и понятный на F0xx (но самый крутой - это TWI на ATMEL/Microchip). Чтобы поддержать все вариации периферии, нужно постараться, и тут без overhead не обойдешься.

Мне довелось работать с EnergyMicro (куплена потом SiLabs-ом) с самого начала их появления. Надо сказать, что скандинавы хороши в таких вещах (тот же Nordic или создатель LwIP и Contiki Адам Дункельс). Периферия EFM32 была продумана до мелочей с самого начала и остается такой и ныне. Меня также приятно поразил стиль и эффективность их HAL, которая транслировалась действительно в минимальный код register = value. Вот если бы они засовывали побольше таймеров в свои процессоры, как это делает ST, я бы остался верен EFM32. Поэтому гнать на HAL как таковую не стОит лишь на опыте с ST.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, Eddy_Em said:

при работе с CAN невозможно обойтись без контроля флагов.

Еще как возможно, но придется отказать от желания смешать мух с котлетами (разбор данных и работу с железом) в одном месте, как в вашем примере. По мне - это лютый кошмар, за такое безобразию выгоню, если это не будет переписано.

Вот пример, как я делаю. Конечно, не утверждаю, что это лучшее решение, потому что пока его тут выкладывал, уже появилась пара идей как это улучить )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Eddy_Em сказал:

Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить, увеличивая размер буфера на 1 и записывая туда нуль (или 255 - в зависимости от полярности), либо еще больше велосипедить с быстрым выставлением OPM и сменой режима на лету.

Я тоже из этой предметной области.

Тогда предложу два варианта:

- таймер может сам себе делать запрос DMA-транзакции и одной пачкой менять несколько регистров;

- можно несколько таймеров объединить в режиме master-slave и один из таймеров может быть счетчиком импульсов для второго.

Ну, и ваш вариант с добавлением фиктивного элемента в буфер, по-моему, весьма годен - сам так делаю.

Кста, для светодиодных панелей TIM+GPIO не самый хороший вариант. Я использую FSMC, SPI и немного внешней дискретной логики.

Для каждой шины 1-wire использую один таймер с двумя каналами (TX и RX).

Для типа WS2812 использую один канал TIM+DMA+фиктивный элемент в буфере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Eddy_Em сказал:

Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить

Ооо, е-мое. Это ж как нужно извратиться, чтобы 1-wire на ШИМе залупасить)))  Тут вообще не понятно, какую либу даже использовать, при том, что этот 1-wire без проблем работает на простом гпио+таймер))) Хотя ардуинщики как-то уарт к этому делу приляпывают, но у меня уартов не 10 штук, мне их жалко для этого...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, mantech said:

Это ж как нужно извратиться, чтобы 1-wire на ШИМе залупасить

Это - наиболее вменяемый способ, если что. Второй способ - USART + DMA. Но он не такой удобный. Больше вариантов нет, потому что дурацкий 1-wire аппаратно не поддерживается никакими МК!

7 minutes ago, mantech said:

без проблем работает на простом гпио+таймер

Абдуринский путь же! И жутко жрет ресурсы МК...

 

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, mantech said:

 этот 1-wire без проблем работает на простом гпио+таймер))) 

1 wire неплохо работает на базе usart )) 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, Eddy_Em сказал:

Абдуринский путь же! И жутко жрет ресурсы МК...

0.1% от одного ядра 800МГц АРМа - это жутко жрет???

5 часов назад, Forger сказал:

1 wire неплохо работает на базе usart )) 

Возможно, но было 4 уарта (1-модбас 2-модем 3-Платежка MDB, 4-онлайн касса) на подобные синхронные интерфейсы уарты тратить жалко...

5 часов назад, Eddy_Em сказал:

Второй способ - USART + DMA.

Еще и ДМА))) по этому интерфейсу мегабайты что-ли гоняете?))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помнится, C8051 процессоры от SiLabs имели даже JTAG (у меня был проект с таким процессором и FPGA в связке по JTAG Chain), и там SiLabs делал (маркетинговый) акцент на "non intrusive", и это работало.


И JTAG-овые ("жирные"), и с C2 ("малышки") ничем они ни от MSP430, ни от AVR-ов с JTAG-ом, ни от ARM-ов не отличаются, всё то же самое: требуемый флажок проверяй в программе, а не в окошке отладчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...