adnega 11 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 26 минут назад, Eddy_Em сказал: нужно было в прерывании флажочки поменять, чтобы таймер следующий раз не сработал Это можно сделать при помощи самого таймера, другого таймера (в режиме slave или master), DMA. Я с таймерами STM32 очень плотно работаю, причем, во всяких экзотических применениях - если подробнее опишите задачу, могу попробовать предложить аппаратное решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 217 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 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. ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 9 minutes ago, adnega said: если подробнее опишите задачу, могу попробовать предложить аппаратное решение. Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить, увеличивая размер буфера на 1 и записывая туда нуль (или 255 - в зависимости от полярности), либо еще больше велосипедить с быстрым выставлением OPM и сменой режима на лету. 10 minutes ago, makc said: Разве не так? Не так. У меня используются "родные" сниппеты от ST, их в подавляющем большинстве случаев хватает. И никаких абстракций нет, все в лоб, так что время попусту тратить не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 217 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 5 минут назад, Eddy_Em сказал: Не так. У меня используются "родные" сниппеты от ST, их в подавляющем большинстве случаев хватает. И никаких абстракций нет, все в лоб, так что время попусту тратить не нужно. Т.е. получается, что прикладная логика и работа с железом круто замешаны в общую кучу? В лучших традициях Ардуино и индусского кода? ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 октября, 2021 Опубликовано 12 октября, 2021 (изменено) · Жалоба 2 minutes ago, makc said: получается, что прикладная логика и работа с железом круто замешаны в общую кучу? Естественно! Разве что аппаратнозависимые вещи иной раз выносятся в отдельный файл - чтобы проще было портировать на другие семейства STM32. Да и вообще, ссылка на гитхаб у меня в профиле есть. Кому хочется - можно мой говнокод посмотреть... А что, у кого-то это делается не так? Хотелось бы пример увидеть. Изменено 12 октября, 2021 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 217 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 32 минуты назад, Eddy_Em сказал: Разве что аппаратнозависимые вещи иной раз выносятся в отдельный файл - чтобы проще было портировать на другие семейства STM32 Это и есть тот самый EMAL, который по своей сути (абстракция доступа к железу) является аналогом HAL, только в вашем исполнении. Но перед этим вы утверждали, что не используете абстракций, а значит вы сами себе противоречите и сами себя не читаете. 35 минут назад, Eddy_Em сказал: А что, у кого-то это делается не так? Хотелось бы пример увидеть. Я как раз говорил выше, что если есть какое-то подобие архитектуры в проекте, то +/- будет такое расслоение, но вы начали утверждать, что у вас не так. Хотя потом оказалось, что всё-таки так. Или нет? ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 2 minutes ago, makc said: Или нет? Не везде можно сделать четкое разделение, выделив функции работы с железом в отдельные файлы. Вот, например — при работе с CAN невозможно обойтись без контроля флагов. Можно, конечно, было бы отдельно в hardware.h засунуть кучу макросов, но смысл, если они только в одном файле используются и от при смене архитектуры придется иной раз сделать несколько больше, чем просто содержимое макросов поменять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 21 minutes ago, Eddy_Em said: при работе с CAN невозможно обойтись без контроля флагов. Еще как возможно, но придется отказать от желания смешать мух с котлетами (разбор данных и работу с железом) в одном месте, как в вашем примере. По мне - это лютый кошмар, за такое безобразию выгоню, если это не будет переписано. Вот пример, как я делаю. Конечно, не утверждаю, что это лучшее решение, потому что пока его тут выкладывал, уже появилась пара идей как это улучить ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 2 часа назад, Eddy_Em сказал: Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить, увеличивая размер буфера на 1 и записывая туда нуль (или 255 - в зависимости от полярности), либо еще больше велосипедить с быстрым выставлением OPM и сменой режима на лету. Я тоже из этой предметной области. Тогда предложу два варианта: - таймер может сам себе делать запрос DMA-транзакции и одной пачкой менять несколько регистров; - можно несколько таймеров объединить в режиме master-slave и один из таймеров может быть счетчиком импульсов для второго. Ну, и ваш вариант с добавлением фиктивного элемента в буфер, по-моему, весьма годен - сам так делаю. Кста, для светодиодных панелей TIM+GPIO не самый хороший вариант. Я использую FSMC, SPI и немного внешней дискретной логики. Для каждой шины 1-wire использую один таймер с двумя каналами (TX и RX). Для типа WS2812 использую один канал TIM+DMA+фиктивный элемент в буфере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 12 октября, 2021 Опубликовано 12 октября, 2021 (изменено) · Жалоба 2 часа назад, Eddy_Em сказал: Основная проблема - генерировать ШИМом N импульсов с разным заполнением (это и 1-wire протокол, и работа со светодиодными панелями, и многое другое подобное). Там либо приходится велосипедить Ооо, е-мое. Это ж как нужно извратиться, чтобы 1-wire на ШИМе залупасить))) Тут вообще не понятно, какую либу даже использовать, при том, что этот 1-wire без проблем работает на простом гпио+таймер))) Хотя ардуинщики как-то уарт к этому делу приляпывают, но у меня уартов не 10 штук, мне их жалко для этого... Изменено 12 октября, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 октября, 2021 Опубликовано 12 октября, 2021 (изменено) · Жалоба 7 minutes ago, mantech said: Это ж как нужно извратиться, чтобы 1-wire на ШИМе залупасить Это - наиболее вменяемый способ, если что. Второй способ - USART + DMA. Но он не такой удобный. Больше вариантов нет, потому что дурацкий 1-wire аппаратно не поддерживается никакими МК! 7 minutes ago, mantech said: без проблем работает на простом гпио+таймер Абдуринский путь же! И жутко жрет ресурсы МК... Изменено 12 октября, 2021 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 6 minutes ago, mantech said: этот 1-wire без проблем работает на простом гпио+таймер))) 1 wire неплохо работает на базе usart )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба 5 часов назад, Eddy_Em сказал: Абдуринский путь же! И жутко жрет ресурсы МК... 0.1% от одного ядра 800МГц АРМа - это жутко жрет??? 5 часов назад, Forger сказал: 1 wire неплохо работает на базе usart )) Возможно, но было 4 уарта (1-модбас 2-модем 3-Платежка MDB, 4-онлайн касса) на подобные синхронные интерфейсы уарты тратить жалко... 5 часов назад, Eddy_Em сказал: Второй способ - USART + DMA. Еще и ДМА))) по этому интерфейсу мегабайты что-ли гоняете?)))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 12 октября, 2021 Опубликовано 12 октября, 2021 · Жалоба Помнится, C8051 процессоры от SiLabs имели даже JTAG (у меня был проект с таким процессором и FPGA в связке по JTAG Chain), и там SiLabs делал (маркетинговый) акцент на "non intrusive", и это работало. И JTAG-овые ("жирные"), и с C2 ("малышки") ничем они ни от MSP430, ни от AVR-ов с JTAG-ом, ни от ARM-ов не отличаются, всё то же самое: требуемый флажок проверяй в программе, а не в окошке отладчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться