Jump to content

    
nanorobot

А может быть Holtek?

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites
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. ;-)

Share this post


Link to post
Share on other sites
9 minutes ago, adnega said:

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

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

10 minutes ago, makc said:

Разве не так?

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

 

Share this post


Link to post
Share on other sites
5 минут назад, Eddy_Em сказал:

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

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

Share this post


Link to post
Share on other sites
2 minutes ago, makc said:

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

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

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

Edited by Eddy_Em

Share this post


Link to post
Share on other sites
32 минуты назад, Eddy_Em сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
2 minutes ago, makc said:

Или нет?

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
21 minutes ago, Eddy_Em said:

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

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Eddy_Em сказал:

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Eddy_Em сказал:

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

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

Edited by mantech

Share this post


Link to post
Share on other sites
7 minutes ago, mantech said:

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

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

7 minutes ago, mantech said:

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

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

 

Edited by Eddy_Em

Share this post


Link to post
Share on other sites
5 часов назад, Eddy_Em сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.