реклама на сайте
подробности

 
 
> HAL, сколько можно фиксить ?
картошка
сообщение Apr 8 2016, 15:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-12-05
Из: Odessa
Пользователь №: 12 673



Очень важная тема думаю.

Давайте будем озвучивать подозрения на некорректную работу HAL, у кого были какие проблемы с периферией при использовании этого "индусского" кода ?
В основном интересует тесты на убой; в частности электро-помехи на UART линии выявили полную неработоспособность реализации HAL. Это не касается "ORE"!
Потому-что валовая мода на HAL, приведет к хаосу качества программного обеспечения. Кто-то останется без работы sad.gif.



- - - Проблемы с UART:
Некорректная обработка прерываний, приводящая к зависанию системы, конкретно: Low Noise и Frame Error . Анализ кода показал, что "писатели" не понимают принципов сброса большинства статусных состояний в регистре состояния SR (до десятка чтений регистра SR). Лишние действия по четности бит.


- - - Система прерываний, вернее вызов специфических обработчиков, затормозили опять до уровня архитектуры 7DTMI, все очень медленно.
Передача указателя и так в известный контекст выполнения. По видимому начало разработки HAL по времени взято с времен архитектуры 7TDMI, где подобные задержки можно было бы понять и простить.


Go to the top of the page
 
+Quote Post
8 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 99)
pitt
сообщение Apr 8 2016, 15:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*


А что вы хотите?


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 8 2016, 16:57
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



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


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
картошка
сообщение Apr 8 2016, 17:09
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-12-05
Из: Odessa
Пользователь №: 12 673



Цитата(pitt @ Apr 8 2016, 19:39) *
А что вы хотите?


"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем sm.gif. Завтра, на работу не устроишься. Будешь доказывать "желтым" лбам кто валенок, а кто нет. Причем тенденция набирает обороты.

Цитата(SSerge @ Apr 8 2016, 20:57) *
Да нечего там обсуждать, для реальных проектов этот HAL непригоден.
Настройку системы тактирования для стандартных случаев да настройку GPIO можно оставить, а остальное либо с ошибками (например, таймер), либо просто неправильно реализовано и поэтому использовать его невозможно (UART).


Вот ! Мало кто выкладывает полезную информацию. А что там по таймеру, что-то с прерываниями опять ?!
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 8 2016, 17:17
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(картошка @ Apr 9 2016, 00:09) *
"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем sm.gif. Завтра, на работу не устроишься. Будешь доказывать "желтым" лбам кто валенок, а кто нет. Причем тенденция набирает обороты.

Это их проблемы.
Цитата
Вот ! Мало кто выкладывает полезную информацию. А что там по таймеру, что-то с прерываниями опять ?!

Хуже, они не осилили тему из этого топика:
http://electronix.ru/forum/index.php?showt...p;#entry1326501


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Apr 8 2016, 17:57
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(картошка @ Apr 8 2016, 20:09) *
"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем sm.gif. Завтра, на работу не устроишься. Будешь доказывать "желтым" лбам кто валенок, а кто нет. Причем тенденция набирает обороты.

Но ведь это же замечательно!
Такие конторы нам нужны!
Благодаря их размножению (но, боюсь, Вы принимаете желаемое за действительное) жить станет лучше. Всем остальным разработчикам, могущим отличить где оно а где не оно.
Go to the top of the page
 
+Quote Post
twix
сообщение Apr 8 2016, 18:08
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 4-11-15
Пользователь №: 89 174



У меня вопрос к знатокам HAL. Он же для любой серии ARM разных производителей по идее разный должен быть.
Ну то есть STM32 один HAL, LPC другой, разные версии ARM там 7й, 9й, 11й, 15й, Cortex, M версия, A версия.
Вы тут о каком HAL ведете речь. Или я чего то не понимаю? Поясните...
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 8 2016, 18:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(twix @ Apr 8 2016, 21:08) *
У меня вопрос к знатокам HAL. Он же для любой серии ARM разных производителей по идее разный должен быть.
Ну то есть STM32 один HAL, LPC другой, разные версии ARM там 7й, 9й, 11й, 15й, Cortex, M версия, A версия.
Вы тут о каком HAL ведете речь. Или я чего то не понимаю? Поясните...

Да нет, не может такого быть. Это придумка для STM32. Совсем не понимаю, зачем, но тем не менее...
Вот посмотрел на документацию к этому халу. Там стыдливо ссылаются на основной мануал (прескалеры там всякие, время выборки и прочая, и прочая). И возникает вопрос: раз уж мануал - основной источник, зачем над ним нахлобучивать ещё что-то? Чтобы побольше почитать? Это противоречит заявленной цели "быстрее, дешевле, проще". Или расчёт на то, что мануал читать никто не будет, аки нерадивая школота, и сдерут какой-то пример с тырнетов? Но это подход в лучшем случае троечника, и ничего толковее дешёвой ёлочной гирлянды так не сделаешь, ИМХО. Вот я и недоумеваю...
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 8 2016, 20:06
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(scifi @ Apr 8 2016, 21:58) *
Да нет, не может такого быть. Это придумка для STM32.


Да у всех есть HAL, только называют его где-то по другому.
Keil например для LPC свой HAL сваял и назвал его RTE.

А у Freescale для Kinetis с HAL-ами конкретный беспредел.
Там идет один HAL с SDK и назван драйверами. Другой HAL генерится программой автоматического создания проектов ProcessorExpert и называется Logic Layer (LL)
И еще один HAL совершенно другой идет с RTOS MQX и называется IO. Плюс они по ходу переводят часть BSP касающегося USB с одного HAL-а на другой.
Наверно поэтому мало кто может осилить Kinetis. biggrin.gif

HAL-ы возникли когда производители начали поставлять BSP и PSP к своим чипам, а не отдельные мелкие демо-проектики.
И HAL-ы нужны в первую очередь самим писателям BSP и HAL-ов.

В добавок HAL-ы как абстракция абстрагируются от многих полезных фичей периферии, что тоже в минус.
HAL-ы также мешают портированию BSP на платформы собственной разработки, поскольку их цель скрыть работу с периферией.

Короче, применение разработчиками HAL-ов я бы назвал верхом мазохизма если эти HAL-ы не используются RTOS
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 8 2016, 20:24
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Использование HAL, в понимании многих - ускорение работы. Отчасти, это так и есть, но ничего задаром не бывает - за скорость приходиться расплачиваться надежностью. Есть опция использования Chibios - он идет со встроенным HAL. Там качество на несколько порядков выше, но, естественно, отстает по времени. Многие пишут свой HAL. Преимущество в том, что используешь чужой код как референс, а разбираешься сам и затачиваешь под себя и свои нужды. Т.е. за счет сокращения об'ема и функциональности нагоняешь по времени. К сожалению, при накоплении проектов приходиться и обновлять и перепроектировать, а железо убегает вперед...

Сообщение отредактировал pitt - Apr 8 2016, 20:26


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 9 2016, 08:22
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(AlexandrY @ Apr 9 2016, 01:06) *
HAL-ы возникли когда производители начали поставлять BSP и PSP к своим чипам, а не отдельные мелкие демо-проектики.
И HAL-ы нужны в первую очередь самим писателям BSP и HAL-ов.

Короче, применение разработчиками HAL-ов я бы назвал верхом мазохизма если эти HAL-ы не используются RTOS


Ноги растут из BSP для ОС (не обязательно Real-Time)
Кому нужны чипы, если с ними нельзя начать быстро сделать свое?
Всякие
*WinCE железки-навигаторы
*DVD-медиа-проигрыватели.
*сотовые телефоны
*и т.п.
никто не стал бы делать без поддержки производителя чипа РАБОЧИМ примером его использования.


--
ЗЫ
Для меня образец кода HAL WindowsCE (и прочих библиотек) является образцом лаконичности и понятности кода.
А вот самописные драйвера-заплатки для конкретных моделей навигаторов смотреть без слез невозможно.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 9 2016, 09:04
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AlexandrY @ Apr 8 2016, 23:06) *
Да у всех есть HAL, только называют его где-то по другому.

Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 9 2016, 11:27
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Спрятаться то оно может и для всех, только даже из названия (HAL), подразумевается, что это будет для какой-то конкретной программной оболочки.
Пока не будет этой самой оболочки, разговор об уровнях абстракции железа - ни о чем.
Go to the top of the page
 
+Quote Post
romas2010
сообщение Apr 9 2016, 13:45
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 25-11-11
Пользователь №: 68 515



Цитата(Alechek @ Apr 9 2016, 14:27) *
Спрятаться то оно может и для всех, только даже из названия (HAL), подразумевается, что это будет для какой-то конкретной программной оболочки.
Пока не будет этой самой оболочки, разговор об уровнях абстракции железа - ни о чем.


для каждого процессора все равно надо делать свой "типа HAL"..универсализировать очень тяжело..Более-менее понятно у ребятишек из chibios,они хотя бы сами и портируют
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 9 2016, 18:05
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ Apr 9 2016, 12:04) *
Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.


Вот если такое хотели сделать, то в первую очередь нужно стандартизировать API, например, как WIN32 в свое время, все системные вызовы прописать и документировать, например команды работы с портами, инициализация портов, параметры пинов, функции установки\сброса и т.п. Вот тогда это еще можно будет как-то использовать...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 9 2016, 18:49
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Дались вам эти порты. Есть куда более интересные периферийные устройства. Например, один таймер задает частоту дискретизации, аналоговый вотчдог срабатывает, как синхронизатор, другой таймер высчитывает количество выборок в послезапуске, третий таймер вычисляет время между синхронизацией и выборкой. Все это у меня сделано на STM32F3xx (пока чисто для развлечения), и никаким стандартным HAL-ом я этого не сделал бы, я так думаю.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 9 2016, 19:42
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Apr 9 2016, 21:49) *
Например, один таймер задает частоту дискретизации, аналоговый вотчдог срабатывает, как синхронизатор, другой таймер высчитывает количество выборок в послезапуске, третий таймер вычисляет время между синхронизацией и выборкой. Все это у меня сделано на STM32F3xx (пока чисто для развлечения), и никаким стандартным HAL-ом я этого не сделал бы, я так думаю.

Вот именно. Этот как бы хал убивает идею МК на корню (ну, кроме простейшей гирлянды). Как-то так.
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 9 2016, 23:04
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



HAL ничего не убивает. Это просто еще один инструмент. Убивает, как всегда, глупость, бездумное пользование инструментом. Любой проект состоит из алгоритма и кода, ответственного за периферию. Соответственно, HAL должен облечать применение алгоритма к этой самой перифирии. Очевидно, что те, кто не знает перифирии, наломает дров с любым HAL-ом, а разнообразие доступного железа и его отличия от одой модели к другой и, уж тем более, от одного производителя к другому, осложняют жизнь разработчика и, соответственно, затягивают время на выполнение проекта. Я полагаю, что со временем, периферия будет более и более стандартизоваться... Также очевидно для чего компании разрабатывают HAL-ы: чтобы поиметь и в прямом и переносном смысле пользователя. STM молодцы в этом смысле. HAL сделать проще(индусы дешевле чем technical writers) , чем написать достойный мануал/референс/документ. За десятки лет моей карьеры я не видел много документов хуже, чем STM, причем, английский для меня очень давно не проблема. NXP и Atmel намного лучше в этом смысле. Зато у SТМ есть HAL(очень xочется сказать, что от слова ХАЛтура) и это - все-таки, неплохой референс.
Так что, уважаемые коллеги:"думайте сами, решайте сами..."

Сообщение отредактировал pitt - Apr 9 2016, 23:09


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Apr 9 2016, 23:08
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



hal - это от слова ад, добро пожаловать
он имел бы право на жизнь, будь он надстройкой над spl
но почему-то st ударило переколбасить spl, перемешав кашу с винегретом - не переваришь
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 06:49
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



У микрочипа например - в 100 раз хуже его "HAL". Так что если что-то ругаете, то с ихнего ПО вообще в тихий ужас впадете. С ума сойдете от их ПО. Да. Нет такой продуманной софтовой организации. Ерунда какая-то там. Нет такого - что где-то свой код добавить (USER CODE) - нет! Да Вы не ослышались! Все заново будет генерировать и ваша писанина исчезнет (и никто не спросит даже про нее в отличие от стм-овского где есть соотв. галочки). Навязывают изначально свои дерьмовые структуры для User приложения. И без них ничего не будет работать. Изначально свою структуру проекта навязывают! Вы поняли? Даже вспоминаешь про это - и такая злость и тоска берет - хотя уже столько времени прошло. Представьте это просто от воспоминаний об этом ПО такое чувство приходит, а что бывает когда его используешь?!!! Честно - попользовались бы Вы ихним "HAL"-ом -потом посмотрел бы я на Вас. Этим дерьмом (очень мягко говоря) вообще не хочется пользоваться. И баги в нем очень медленно исправляют (когда им написал про баг с настройкой DMA - они сказали спасибо Вам. что написали и что в след. ревизии мы вообще удалим эту функцию. Да Вы не ослышались - не исправим, а удалим. А таких моментов очень много. И кривой код!! Чего стоит switch из 10-ти пунктов ветвлений где они все одинаковые причем!! Да да Вы не ослышались - 10 абсолютно одинаковых обработок (все по 2 строчки где-то) у всех 10-ти меток switch-а. Вам там дерьмо нужно?? Чтобы оно место в килобайтах занимало в проекте? Чтобы в нем копаться и вонять при этом? Вот пожалуйста - вот такой у них КАЛ (реально). А тут хотя бы на первых порах многие используют стм-овский софт. Да, да - признавайтесь. Хотя бы для быстрой проверки чего-то. 100% очень нужная вещь. А то что SSerge тут пишет про Delay - типа она через 2^32 степени миллисекунд перестанет работать - то во-первых это голословное заявление и просто слова. Не обратили внимания что там у него только слова? Где кусок кода и док-во. что это не так. Я мог бы привести ссылку на др. сайт где про это подробно расписано и доказано, что все в порядке, но зачем? А тут нельзя? А во-вторых многие также делают. Видел у других такое. И наконец эту задержку легко можно превратить в использование с Таймерами (с помощью этого ПО - только галочки где нужно поставь/настрой).
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 10 2016, 17:07
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Огурцов @ Apr 9 2016, 18:08) *
hal - это от слова ад, добро пожаловать
он имел бы право на жизнь, будь он надстройкой над spl
но почему-то st ударило переколбасить spl, перемешав кашу с винегретом - не переваришь

Hell
Нет, на самом деле, никакой разницы между HAL и SPL - другая организация дабы как-то соответствовать CMSIS(The ARM® Cortex® Microcontroller Software Interface Standard (CMSIS) is a vendor-independent hardware abstraction layer for the Cortex-M processor series). Качество кода при этом никак не улучшилось.
Цитата
У микрочипа например - в 100 раз хуже его "HAL".
Во-первых, я персонально PIC невзлюбил еще очень давно и с тех самых пор дела с ним не имею, а, во-вторых, не вижу смысла в соревновании у кого хуже и во сколько раз. Дело в том, что любой текст можно интерпретировать по-разному, а вот с кодом это уже, практически, не так. Поэтому референс, примеры с кодом- прекрасная подспорка к документации. Конечно плохо, когда и то, и другое - оно, но 2 она все-таки лучше, чем ничего.

Сообщение отредактировал pitt - Apr 10 2016, 17:22


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 10 2016, 17:14
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(AleksBak @ Apr 10 2016, 13:49) *
А то что SSerge тут пишет про Delay - типа она через 2^32 степени миллисекунд перестанет работать - то во-первых это голословное заявление и просто слова. Не обратили внимания что там у него только слова?

Это было в версии 1.0.0, потом они этот баг поправили:
Цитата
* @file stm32f4xx_hal.c
* @author MCD Application Team
* @version V1.0.0
* @date 18-February-2014
void HAL_Delay(__IO uint32_t Delay)
{
uint32_t timingdelay;

timingdelay = HAL_GetTick() + Delay;
while(HAL_GetTick() < timingdelay)
{
}
}

Впрочем, я уже тогда не особенно интересовался новыми версиями HAL.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Apr 10 2016, 17:41
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(pitt @ Apr 10 2016, 18:07) *

а послушать ?
https://translate.google.ru/#en/ru/hal
https://translate.google.ru/#en/ru/hell
st какбэ явно намекает - имеющий уши - да услышит


Сообщение отредактировал Огурцов - Apr 10 2016, 17:45
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2016, 17:55
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Огурцов @ Apr 10 2016, 20:41) *
а послушать ?
st какбэ явно намекает - имеющий уши - да услышит

Огурцов, а звучание GUI вам ни на что не намекает? biggrin.gif
Go to the top of the page
 
+Quote Post
romas2010
сообщение Apr 10 2016, 18:41
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 25-11-11
Пользователь №: 68 515



Цитата(pitt @ Apr 10 2016, 02:04) *
Я полагаю, что со временем, периферия будет более и более стандартизоваться... Также очевидно для чего компании разрабатывают HAL-ы: чтобы поиметь и в прямом и переносном смысле пользователя. STM молодцы в этом смысле. HAL сделать проще(индусы дешевле чем technical writers) , чем написать достойный мануал/референс/документ. За десятки лет моей карьеры я не видел много документов хуже, чем STM, причем, английский для меня очень давно не проблема. NXP и Atmel намного лучше в этом смысле. Зато у SТМ есть HAL(очень xочется сказать, что от слова ХАЛтура) и это - все-таки, неплохой референс.
Так что, уважаемые коллеги:"думайте сами, решайте сами..."


Cогласен с вами полностью...ведь не боги горшки обжигают,то бишь программисты,пишущие код HAL ,от нас ничем не отличаются,и багов там не меряно..ты сравниваешь их код со своим и разбираешься по даташиту,почему их код работает а твой-нет и наоборот...этих людей надо уважать за то,что они тебя развивают и ты не уподобляешься Qt-расам,которые
do
{
do
{
load(library,internet);
}while (! compile(library));
}while(! run_without_bugs(library));

Как говорится,читайте,читайте и еще раз читайте(даташит)
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Apr 10 2016, 19:39
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(ViKo @ Apr 10 2016, 17:55) *
Огурцов, а звучание GUI вам ни на что не намекает? biggrin.gif

я не знаю белорусский
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 10 2016, 20:02
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(romas2010 @ Apr 10 2016, 21:41) *
этих людей надо уважать за то,что они тебя развивают

О господи. Хотите кого-нибудь поуважать - найдите нормальных программистов, а не индусских говнокодеров. А то ведь какие-нибудь неокрепшие умы почитают и решат, что говнокод - это норма жизни. Есть примеры добротно сделанных проектов. Недавно натыкался на LabTool, к примеру, и там код выглядит вполне прилично. Читайте, развивайтесь.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 10 2016, 20:44
Сообщение #28


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(scifi @ Apr 10 2016, 23:02) *
Есть примеры добротно сделанных проектов. Недавно натыкался на LabTool, к примеру, и там код выглядит вполне прилично. Читайте, развивайтесь.


Ага, LabTool, повеселил:

Код
uint32_t GetTimerCounter()
{
        return 0;
}


Типичный говнокод.
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 10 2016, 20:49
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Огурцов @ Apr 10 2016, 14:39) *
я не знаю белорусский

А что, имеющий уши, услышит на вопрос:"Who are you?"
VIKo beer.gif
Для незнающих белорусский сообщаю, что HAL - произносится как "хал", а Hell - как "хэл".


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Apr 10 2016, 21:24
Сообщение #30


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



но гугель с вами не согласен
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 10 2016, 23:31
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Огурцов @ Apr 10 2016, 17:24) *
но гугель с вами не согласен

Спросите у Google как произносится CAN(Controller Area Network), но не модальный глалол "can".
В английском есть понятие акроним и по правилам CAN должен произноситься как СиЭйЭн, но мои коллеги американцы произносят КАН, ну и я, соответственно, чтобы меня понимали...Кстати, модальный глалол "can" действительно произностится "кэн". bb-offtopic.gif Сорри фор оф топик, кэн вы клоуз ит нау?


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 10 2016, 23:47
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Вот и я поимел опыт с HAL. Начальную установку и конфигурацию сделал на кубе. За 4 месяца сделал два близких устройства на STM32F429 и драйверы к ним на Линуксе. Подсоединение устройства с STM32F429 к компьютеру по USB. На компьютере бежит Астериск.
Одно устройство 16 телефонных розеток для подключения телефонов, а второе 16 телефонных линий для подключения к каждому одной телефонной линии от АТС.
Ни в коде куба ни в коде HAL править ничего не понадобилось, хотя сделал бы это не долго раздумывая. Писать свою конфигурацию заняло бы больше времени. Так что в целом HAL и кубом удовлетворен.

Проектом занимался в свободное от основной работы время.
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 11 2016, 00:38
Сообщение #33


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Tarbal @ Apr 10 2016, 19:47) *
Вот и я поимел опыт с HAL. Начальную установку и конфигурацию сделал на кубе. За 4 месяца сделал два близких устройства на STM32F429...
Ни в коде куба ни в коде HAL править ничего не понадобилось, хотя сделал бы это не долго раздумывая. Писать свою конфигурацию заняло бы больше времени. Так что в целом HAL и кубом удовлетворен.

Для того и HAL и CUBE задумывались. Никто не сказал, что там ничего не работает. Там всегда что-то или не работает или работает не так... Вопрос, на самом деле, не сколько времени ушло на проекты, а насколько разработчик понимает что и как внутри работает, сколько времени уйдет, когда что-нибудь вылетит и надо будет понять, найти и исправить...Так что я не вижу тут никаких противоречий.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 11 2016, 07:14
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pitt @ Apr 11 2016, 02:31) *
В английском есть понятие акроним и по правилам CAN должен произноситься как СиЭйЭн, но мои коллеги американцы произносят КАН, ну и я, соответственно, чтобы меня понимали...

Вы можете придумывать какие угодно правила, или даже ссылаться на какие-то книжки, но если этим правилам никто не следует, то их как бы и нет вовсе. Причём англоязычные товарищи гораздо либеральнее наших относятся к таким фривольностям. Во всяком случае, ни разу не слышал от них занудств по таким поводам. Понятно, о чём идёт речь, - и слава богу.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2016, 07:27
Сообщение #35


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Если аббревиатуру можно произнести слитно, а не по буквам, то почему бы и нет? Например, P-CAD.
Но "хэл" на HAL никто не скажет.
upd. скажет "хал", ближе к этому... русскими буквами не передать.
Go to the top of the page
 
+Quote Post
EasyToUse
сообщение Apr 11 2016, 07:30
Сообщение #36





Группа: Участник
Сообщений: 12
Регистрация: 8-12-14
Из: Смоленск
Пользователь №: 84 036



Помните, как мы работали раньше? ))) Как конфигурировали порты и флеш, настраивали тактирование? Как энтузиасты писали макросы для настройки и ПО высокого уровня для того же? И вы скажете HAL это плохо? HAL это великолепно! ))) Идея витала в воздухе. И ее неплохо реализовали. Концепция HAL с ее реентерабельностью функций и механизмом блокировки объектов отлично подходит, когда используешь RTOS. Есть некоторые шероховатости, но это детские болезни и они пройдут! Нашел баг - напиши в ST!
P.S. И индусы молодцы! Они, вообще, ребята умные - шахматы придумали )))
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 11 2016, 07:42
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Apr 11 2016, 10:27) *
Но "хэл" на HAL никто не скажет.

Я вижу, все уже забыли про "Космическую одиссею". Ознакомьтесь.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2016, 07:48
Сообщение #38


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Apr 11 2016, 10:42) *
Я вижу, все уже забыли про "Космическую одиссею". Ознакомьтесь.

Наверное, вы не так поняли мою мысль. Я поправил, для ясности.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 11 2016, 08:05
Сообщение #39


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(EasyToUse @ Apr 11 2016, 11:30) *
...Концепция HAL с ее реентерабельностью функций и механизмом блокировки объектов отлично подходит, когда используешь RTOS...

У него механизм этот блокировки объектов реально хороший что ли?
Go to the top of the page
 
+Quote Post
EasyToUse
сообщение Apr 11 2016, 08:22
Сообщение #40





Группа: Участник
Сообщений: 12
Регистрация: 8-12-14
Из: Смоленск
Пользователь №: 84 036



Цитата
У него механизм этот блокировки объектов реально хороший что ли?

На укладку парашюта еще никто не жаловался... Реентерабельные функции можно вызывать из разных задач, а используя HALовский LOCK для устройств периферии не нужны мьютексы RTOS.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 11 2016, 08:52
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(AleksBak @ Apr 11 2016, 11:05) *
У него механизм этот блокировки объектов реально хороший что ли?

Нириально хороший.

Просто флажок "периферия занята". Поддержки RTOS (типа "семафор"), как и банальных критических секций, там нет.
Т.е. наблюдаем типичную хорошо спрятанную граблю - неатомарная операция "проверил - поменял - записал" выполняется, теоретически, в нескольких потоках.

Дальше только вопрос времени, когда это добро "выстрелит"...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
EasyToUse
сообщение Apr 11 2016, 09:06
Сообщение #42





Группа: Участник
Сообщений: 12
Регистрация: 8-12-14
Из: Смоленск
Пользователь №: 84 036



А если проверку этого флажка делать в критической секции?
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 11 2016, 09:48
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(EasyToUse @ Apr 11 2016, 13:06) *
А если проверку этого флажка делать в критической секции?

Все можно. Но только в ихней обертке cmsis_os.h нету таких вещей/обертки. laughing.gif А еще можно просто добавить мьютекс. Но тогда получается в обоих случаях этот HAL править нужно. А эту cmsis_os.h сам ARM первый выдвинул - так получается?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 11 2016, 10:48
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Мне кажется, надо только переделать HAL_LockTypeDef на мьютекс.
И дефайны __HAL_LOCK() / __HAL_UNLOCK() переопределить.

Ну или вручную, критическая секция в __HAL_LOCK()


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
EasyToUse
сообщение Apr 11 2016, 10:57
Сообщение #45





Группа: Участник
Сообщений: 12
Регистрация: 8-12-14
Из: Смоленск
Пользователь №: 84 036



А лучше одну и ту же периферию не использовать в разных задачах.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 11 2016, 11:59
Сообщение #46


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(pitt @ Apr 11 2016, 04:38) *
Для того и HAL и CUBE задумывались. Никто не сказал, что там ничего не работает. Там всегда что-то или не работает или работает не так... Вопрос, на самом деле, не сколько времени ушло на проекты, а насколько разработчик понимает что и как внутри работает, сколько времени уйдет, когда что-нибудь вылетит и надо будет понять, найти и исправить...Так что я не вижу тут никаких противоречий.


Просто хотел поделиться успешным опытом.
Как найти и исправить проблем нет. Может потому и взялся. Были проблемы с длинными обработчиками прерываний, но реорганизовал структуру драйвера, чтобы не мешало.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Apr 11 2016, 15:55
Сообщение #47


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (scifi @ Apr 9 2016, 12:04) *
Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.

Собственно если посмотреть в самые-самые первые версии ARM CMSIS (в районе 1.1), то там и подразумевался единый уровень абстракции для чипов всех производителей. Типа: UART, можно выставить скорость, четность, стоп-биты, отправить-принять байт. Ethernet: можно выставить скорость, дуплекс, принять-отправить пакет. Естественно при этом теряются некоторые специфические фишки, плата за переносимость между производителями. Но производители в восторг не пришли, драйвера писать не стали. А сам ARM поддерживать зоопарк не осилил. И к версии CMSIS 2.0 эту красоту убрали, оставив поддержку только самого ядра.
Go to the top of the page
 
+Quote Post
quarz
сообщение Apr 11 2016, 17:06
Сообщение #48


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 15-01-05
Из: Москва
Пользователь №: 1 980



Будь я модератором, убрал бы из темы 3/4 холивара и оставил полезные посты.

А вот мой случай:
В библиотеке HAL 1.1.0 - 1.4.0 для STM32L1xx был баг в функции HAL_RCC_GetSysClockFreq(), которая возвращала установленную тактовую частоту:
Код
pllvco = HSE_VALUE * (pllm / plld);
...
return pllvco;

Из-за ошибки округления в скобках, возвращалось неверное значение. Надо переставить скобки - сначала умножать, потом делить. Переполнения не будет.

В версии 1.5.0 баг исправили
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 12 2016, 06:34
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(esaulenka @ Apr 11 2016, 11:52) *
Нириально хороший.

Просто флажок "периферия занята". Поддержки RTOS (типа "семафор"), как и банальных критических секций, там нет.
Т.е. наблюдаем типичную хорошо спрятанную граблю - неатомарная операция "проверил - поменял - записал" выполняется, теоретически, в нескольких потоках.

Дальше только вопрос времени, когда это добро "выстрелит"...

Тока хотел написать ... Опередили ...
lol.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 12 2016, 06:56
Сообщение #50


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Заинтересовало. Глянул. Свежескачанные кубы для 4xx и 2xx. Версии от ноября прошлого года. Какая там многопоточность, о чем вы?

CODE
#if (USE_RTOS == 1)
  /* Reserved for future use */
  #error " USE_RTOS should be 0 in the current HAL release "
#else
  #define __HAL_LOCK(__HANDLE__)                                           \



Про то, что ради 100-килобайтного заголовочного файла с описанием регистров из CMSIS приходится качать полтораста мегабайт куба - отдельный разговор.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 12 2016, 07:39
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Сергей Борщ @ Apr 12 2016, 10:56) *
Заинтересовало. Глянул. Свежескачанные кубы для 4xx и 2xx. Версии от ноября прошлого года. Какая там многопоточность, о чем вы?

Код
#if (USE_RTOS == 1)
  /* Reserved for future use */
  #error " USE_RTOS should be 0 in the current HAL release "
#else
  #define __HAL_LOCK(__HANDLE__)                                           \


...

Оно все время не продекларировано это USE_RTOS и просто так. Пусть себе пишут (2 руками за) - 1. даренному коню в зубы не смотрят и 2. проверить/разобраться с Кубом что-то - самое то это (очень и очень многое с ним вообще-то можно проверить).
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 12 2016, 08:00
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



2 AleksBak.
Да никто ни на индусов ни на HAL не нападает. Задача "создать универсальную библиотеку", в принципе не решаемая. Чем более универсальна она будет, тем она будет более громоздкая. Документация по ней превысит исходную документацию на кристалл в несколько раз. Вот и всё.
В результате, чтобы задействовать функцию, приходится смотреть в доки на библиотеку и доки на кристалл. Потом ещё рыться в библиотеках ну и так далее ... То есть при каком-то уровне абстракции это просто теряет смысл.
Ну, например, взять таймер. Хотим организовать ШИМ. Читаем 10 регистров и появляется примерно следующее
Код
  // Инициализация таймера ШИМ подсветки
  TIM_PWM_LIGHT->CR1 = TIM_CR1_CEN;            // Включить таймер
  TIM_PWM_LIGHT->CCMR2 = TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1;// PWM1
  TIM_PWM_LIGHT->CCER = TIM_CCER_CC4E;        // Включить канал CH4
  TIM_PWM_LIGHT->PSC = FPWM_PSC-1;            // Прескалер
  TIM_PWM_LIGHT->ARR = FPWM_MAX-1;            // Частота ШИМ 200 Гц

Ну и управление яркостью, соответственно
TIM_PWM_LIGHT->CCR4 = teklight;
...
Если захочешь написать это с помощью HAL, то меньше не окажется ... Читать меньше тоже не придётся ... Более того, это всё ещё будет завязано ещё на какую-нибудь библиотеку и... погнали наши городских. В результате подключено 10 библиотек HAL, для того, чтобы махнуть одной ножкой... Какие преимущества то?
Это всё уже писано 10 раз.
Против самих библиотек никто не возражает. Иногда удобно. Например туда посмотреть.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 12 2016, 08:40
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(SasaVitebsk @ Apr 12 2016, 12:00) *
...
Это всё уже писано 10 раз.
...

Полностью на 100.0% согласен. Так и стараюсь делать вообще-то. Спс за развернутый ответ. ТС хотел в этой теме какие если есть важные ошибки в HAL - чтобы про них кто-то написал и тогда не буду тему "захламлять". До этого "наводящий" вопрос о __HAL_LOCK/__HAL_UNLOCK я спецом задал, а то так бы тут и обсуждали перевод слова "hal" и т.п.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 09:37
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (SasaVitebsk @ Apr 12 2016, 11:00) *
Задача "создать универсальную библиотеку", в принципе не решаемая.

Угу, только не заметили-ли Вы, что "универсальная библиотека" это еще цветочки и уже идет полным ходом создание "универсальной программы" sad.gif. Например, под наванием "линукс". И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс - только зашитые "библиотеки", или вообще "линукс" и точка.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 12 2016, 10:47
Сообщение #55


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(zltigo @ Apr 12 2016, 13:37) *
…И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс…


Китайцы, в основном, и континентальные и островные…


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 12 2016, 10:52
Сообщение #56


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(zltigo @ Apr 12 2016, 13:37) *
Угу, только не заметили-ли Вы, что "универсальная библиотека" это еще цветочки и уже идет полным ходом создание "универсальной программы" sad.gif. Например, под наванием "линукс". И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс - только зашитые "библиотеки", или вообще "линукс" и точка.


Да Бог с вами. Линукс это тысячи разных программ. Так не пользуйтесь теми платформами, что используют не open source.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 12 2016, 11:11
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(zltigo @ Apr 12 2016, 12:37) *
Угу, только не заметили-ли Вы, что "универсальная библиотека" это еще цветочки и уже идет полным ходом создание "универсальной программы" sad.gif. Например, под наванием "линукс". И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс - только зашитые "библиотеки", или вообще "линукс" и точка.

Да заметил. Но пока ещё далеко до завершения этой работы... Даже с идеалогией не всё в порядке.
И вообще. Посмотрите, почему линукс? Он так хорош? Да нет, просто объём работы (суммарный, а не только по ОС) таков, что реально сложно за него взяться.
Это ведь как в любом проекте. Когда его завершаешь, то видишь кучу мелочей, которые надо бы исправить. И беда в том, что на начальном этапе ты этих мелочей не заметил, или не предусмотрел механизмов которые помогают их красиво устранить. А на этапе, когда ты их видишь, к сожалению, их устранение приводит к коренной переработке всего проекта. А ты на это не готов. И количество людей, принимающих участие в проекте, не улучшает его свойств (не уменьшает количество огрехов), а, наоборот, увеличивает. И... поехало всё с нуля.
StdPeriph_Driver -> HAL_Driver ->
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 11:29
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Tarbal @ Apr 12 2016, 13:52) *
Да Бог с вами. Линукс это тысячи разных программ. Так не пользуйтесь теми платформами, что используют не open source.

Ну и что, что тысячи? В этом-то и проблема от которой никакой "open" не спасает - количество латанного перелатанного "open" кода уже просто превысило все мыслимые размеры. Никакакая опенутость НЕ делает работоспособным поминаемый здесь HAL. Все, что можно, это сделать еще одну заплатку, причем надо понимать, что всяких заплаток завтра еще наделают без Вас. После этого у Вас альернатива, либо остаться на текущей версии того-же HAL, либо постоянно разбираться с потоком заплаток и нововведений во всяких свежелатанных версиях HAL и их последствиями.
Для того, что-бы потушить костер достаточно в него подкинуть бревно побольше. Жупел "open" это именно такое бревно.

Массой НЕ "open" платформ уже просто не возможно не пользоваться, например, на какой платформе Ваш телефон?




QUOTE (SasaVitebsk @ Apr 12 2016, 14:11) *
И вообще. Посмотрите, почему линукс? Он так хорош?

Просто один из примеров - можно сказать флагман бизнесмодели "секс по телефону бесплатный - платите только за телефонный звонок", но конечно, не единственный.
QUOTE
И количество людей, принимающих участие в проекте, не улучшает его свойств (не уменьшает количество огрехов), а, наоборот, увеличивает. И... поехало всё с нуля.
StdPeriph_Driver -> HAL_Driver ->

Хуже того, в большинстве больших опенутых проектов набегают новички, которые даже уже основ НЕ смогли понять и радостно начинают ваять альтернативные яйца в профиль, но уже совсем через анус sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2016, 11:31
Сообщение #59


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



У меня такой подход - сначала кубом делается инициализация и настройка по максимуму.
Затем дебаггером прохожу и смотрю что всё действительно как задумывалось.
После этого выкидываю всё лишнее (вместе с кубовскими поделками).
Остается только то, что нужно (с коментариями из куба).
Из плюсов - не надо лазить по RM в поисках битов/регистров, более-менее понятные коментарии.
Ну и размер конечно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 11:33
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (SasaVitebsk @ Apr 12 2016, 14:11) *
И беда в том, что на начальном этапе ты этих мелочей не заметил, или не предусмотрел механизмов которые помогают их красиво устранить. А на этапе, когда ты их видишь, к сожалению, их устранение приводит к коренной переработке всего проекта. А ты на это не готов.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
segment
сообщение Apr 12 2016, 11:38
Сообщение #61


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



Цитата(x893 @ Apr 12 2016, 14:31) *
Из плюсов - не надо лазить по RM в поисках битов/регистров, более-менее понятные коментарии.

Жесть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 11:39
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (x893 @ Apr 12 2016, 14:31) *
У меня такой подход - сначала кубом делается инициализация и настройка по максимуму

Я во всякие вещи типа "библиотек" и "примеров" заглядываю только в одном случае, если что-то упорно не получается по документации сделать. Но помогает далеко не всегда, ибо не получается сразу обычно что-то более хитрое, чем два байта переслать.
В чем смысл делать "инициализация и настройка по максимуму" вообще не понимаю. Разбираться с железом надо по любому постепенно и только с тем, которое СЕЙЧАС нужно. Шаг за шагом - GPIO помигать светодиодом, UART - поднять консольку, таймер - операционку поднять,.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 12 2016, 13:01
Сообщение #63


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(zltigo @ Apr 12 2016, 15:39) *
Я во всякие вещи типа "библиотек" и "примеров" заглядываю только в одном случае, если что-то упорно не получается по документации сделать. Но помогает далеко не всегда, ибо не получается сразу обычно что-то более хитрое, чем два байта переслать.
В чем смысл делать "инициализация и настройка по максимуму" вообще не понимаю. Разбираться с железом надо по любому постепенно и только с тем, которое СЕЙЧАС нужно. Шаг за шагом - GPIO помигать светодиодом, UART - поднять консольку, таймер - операционку поднять,.....


Но не все делают как вы всегда делаете. Мир многообразен.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 13:26
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Tarbal @ Apr 12 2016, 16:01) *
Но не все делают как вы всегда делаете.

Да, я это очень хорошо знаю. Но в определеной мере такой подход к делу меня устраивает - к тому, кто смог написать надежную фирмварь ПОСЛЕ того, как были познаны все прелести гимморидальной болезни, как минимум, отношение почтительное. В какой-то степени это является моим куском хлеба с маслом.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2016, 16:33
Сообщение #65


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Особо вдаваться не хочется. Да и для разных типов процессоров держать в голове это всё - мало GВ под волосами. В общем-то каждый делает как ему удобнее.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 12 2016, 20:53
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (x893 @ Apr 12 2016, 19:33) *
Особо вдаваться не хочется. Да и для разных типов процессоров держать в голове это всё - мало GВ под волосами.

Зачем в голове? Постепенно все описывается и остается в хидерах в качестве привычных дефиниций. И можно подумать, что держать в голове все разные поделки "индусов" под разные контроллеры это легко, тем более, если их вообще (к счастью) нет.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 13 2016, 06:42
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(zltigo @ Apr 12 2016, 14:33) *
Я инода все-же такое делаю. Помогает, что срок жизни изделий по железу очень большой (10 лет типично), вот и становится разумным переодически вдыхать новую жизнь в старое железо. При этом рефакторинг тоже делаю.

Да тоже делаю. И, кстати, это одна из причин, по которой стараюсь библиотеки не применять. В последнем проекте, за время жизни даже CMSIS поменялся, сцуко. У меня ещё оставался на тот момент RCC (ну он один раз вначале проекта используется, для инициализации кварца.) Так пришлось переписать, так как IAR/CMSIS/HAL всё поменялось...

Цитата(x893 @ Apr 12 2016, 19:33) *
Особо вдаваться не хочется. Да и для разных типов процессоров держать в голове это всё - мало GВ под волосами. В общем-то каждый делает как ему удобнее.

Ещё раз повторяю. Вас никто уговаривать не собирается. Вы сами к этому придёте.
А держать в голове ничего не надо. Да и у программиста не держится ничего ... )))))
Я вообще сразу всё выкидываю. Иначе меня бы в толпе с расстояния пол километра видно было бы, по этой голове... ))
Я сейчас и даташит бегло читаю. Сразу открываю регистры и поехал ... )) Вся эта периферия более/ менее похожа. Нюансы - это незначительная часть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 06:50
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (SasaVitebsk @ Apr 13 2016, 09:42) *
А держать в голове ничего не надо. Да и у программиста не держится ничего ... )))))
Я вообще сразу всё выкидываю. Иначе меня бы в толпе с расстояния пол километра видно было бы, по этой голове... ))

sm.gif точно!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 06:56
Сообщение #69


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Не, одними регистрами не отделаешься. Приходится читать нужный раздел, и не раз. Всплывают всяческие зависимости от других периферийных устройств. А так, да, программирую регистры, не пропуская ни одного бита (умножаю на 0 ненужные). Последним часто программирую регистр, в котором включается это периферийное устройство. Обычно, работает. В-общем, команд - минимум.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Apr 13 2016, 07:17
Сообщение #70


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(ViKo @ Apr 13 2016, 07:56) *
Не, одними регистрами не отделаешься. Приходится читать нужный раздел, и не раз. Всплывают всяческие зависимости от других периферийных устройств. А так, да, программирую регистры, не пропуская ни одного бита (умножаю на 0 ненужные). Последним часто программирую регистр, в котором включается это периферийное устройство. Обычно, работает. В-общем, команд - минимум.

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

ОТ: По нескольку раз перечитывая разделы, Вы уже и пишете по нескольку раз wink.gif . SCNR.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 08:04
Сообщение #71


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(KnightIgor @ Apr 13 2016, 10:17) *
ОТ: По нескольку раз перечитывая разделы, Вы уже и пишете по нескольку раз wink.gif . SCNR.

С АндроЕда, в метро. То есть связь, то нема. Однако, движок Электроникса пропускает такие голы.
Вот пример моего "творчества".
Код
  //  RCC->APB1RSTR |= RCC_APB1RSTR_TIM4RST;
  //  RCC->APB1RSTR = 0;
  
/*  Timer 4 задает интервал работы АЦП для измерения напряжений VREG, VACC  */
  TIM4->CR2 =
    TIM_CR2_CCDS         * 0 |    // Capture/Compare DMA Selection
    TIM_CR2_MMS_0        * 2 |    // Master Mode Selection: Update
    TIM_CR2_TI1S         * 0;    // TI1 Selection
  TIM4->SMCR = 0;
  TIM4->DIER = 0;

//  TIM4->CCMR1, TIM4->CCMR2 не используются
//  TIM4->CCER не используется
//  TIM4->CNT = 60E3 - 5;
  TIM4->PSC = PCLK1 * 2 / 1E3 - 1;    // Prescaler: 1 kHz, 1 ms
  TIM4->ARR = 60E3 - 1;            // Auto-reload: 60 s
//  Note that the actual counter enable signal CNT_EN is set 1 clock cycle after CEN.
  TIM4->CR1 =
    TIM_CR1_CEN          * 1 |    // Counter enable
    TIM_CR1_UDIS         * 0 |    // Update disable
    TIM_CR1_URS          * 0 |    // Update request source: Overflow, UG bit...
    TIM_CR1_OPM          * 0 |    // One pulse mode
    TIM_CR1_DIR          * 0 |    // Direction: Up
    TIM_CR1_CMS_0        * 0 |    // Center-aligned mode selection
    TIM_CR1_ARPE         * 1 |    // Auto-reload preload enable: buffered
    TIM_CR1_CKD_0        * 0;    // Clock division
  //  __nop(); __nop(); __nop(); __nop();
  //  DELAY(1333, _US);

/*  Так как Prescale Buffer обновляется по Update Event, то его нужно создать  */
  TIM4->EGR = TIM_EGR_UG;        // Update Generation
  //  TIM4->SR = 0;
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 08:46
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Apr 13 2016, 09:56) *
Не, одними регистрами не отделаешься. Приходится читать нужный раздел, и не раз. Всплывают всяческие зависимости от других периферийных устройств. А так, да, программирую регистры, не пропуская ни одного бита (умножаю на 0 ненужные).

Чрезмерно кучеряво с "умножением". Да и понимания не добавляет, ибо в Вашем-же примере
CODE
TIM_CR2_MMS_0        * 2

Я, ествественно понимаю, от чего на два, но если бы в Вашем-же стиле было написано
CODE
TIM_CR2_MMS_0        * 1

То для читающего никак не следует, что можно умножать на какое-то другое число и где предел? на 999 можно sm.gif?
Посему подобное нужно описывать или тупо все
TIM_CR2_MMS_0
TIM_CR2_MMS_1
....
Или, привычнее для меня, хотя и без защиты на 999 sm.gif, но игнорировать залезание в другие поля при указании 999 это можно и нужно.
TIM_CR2_MMS(x)
В упоминании незначаших битов особого смысла не вижу, поскольку надо или явно задекларировать, или просто посмотреть в хидере ВСЕ биты, причем с КОММЕНТАРИЯМИ. Редактор ДОЛЖЕН уметь работать с TAG и посмотреть в хидере выливается в один хоткей. Если перед глазами будет все время маячить такая крастота со множителями, то лично у меня просто глаза разбегутся и замылятся.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 09:58
Сообщение #73


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



У меня все биты с комментариями. В комментарии до двоеточия - документированное описание бита (из хидера), после двоеточия - конкретная выбранная функция.
И, вообще, все биты, что есть в устройстве. Ни один не пропущен (кроме битовых полей, из которых использую младший, умножая; конкретную функцию задает-то все поле). И я могу:
1. Легко изменить режим работы, меняя нолики на единички, или одно число на другое.
2. Использовать этот фрагмент, как заготовку, в другом проекте.
Умножаю на столько, сколько описано в руководстве для этого поля. Конкретно, для показанного случая, читаем:
Цитата
Bits 6:4 MMS[2:0]: Master mode selection
These bits allow to select the information to be sent in master mode to slave timers for
synchronization (TRGO). The combination is as follows:
000: Reset - the UG bit from the TIMx_EGR register is used as trigger output (TRGO). If the
reset is generated by the trigger input (slave mode controller configured in reset mode) then
the signal on TRGO is delayed compared to the actual reset.
001: Enable - the Counter enable signal, CNT_EN, is used as trigger output (TRGO). It is
useful to start several timers at the same time or to control a window in which a slave timer is
enabled. The Counter Enable signal is generated by a logic OR between CEN control bit
and the trigger input when configured in gated mode.
When the Counter Enable signal is controlled by the trigger input, there is a delay on TRGO,
except if the master/slave mode is selected (see the MSM bit description in TIMx_SMCR
register).
010: Update - The update event is selected as trigger output (TRGO). For instance a master
timer can then be used as a prescaler for a slave timer.
011: Compare Pulse - The trigger output send a positive pulse when the CC1IF flag is to be
set (even if it was already high), as soon as a capture or a compare match occurred.
(TRGO)
100: Compare - OC1REF signal is used as trigger output (TRGO)
101: Compare - OC2REF signal is used as trigger output (TRGO)
110: Compare - OC3REF signal is used as trigger output (TRGO)
111: Compare - OC4REF signal is used as trigger output (TRGO)

Защиты от превышения нет. Ну, так, мало ли что кому в голову взбредет. Можно и однобитовую переменную умножить на 999, если мозгов нет.
То, что бит не один, а целое поле, видно по его названию, где в конце всегда стоит _0. Были косяки в хидерах, но они исправляются.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 10:20
Сообщение #74


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Apr 13 2016, 12:58) *
У меня все биты с комментариями.

Вижу. Это и ДОПОЛНИТЕЛЬНО и напрягает.
QUOTE
1. Легко изменить режим работы, меняя нолики на единички, или одно число на другое.

А НЕ изменить при этом комментарий ЕЩЕ проще sad.gif. По этой причине ститя комментирования подобного Вышему категорически избегаю.
QUOTE
Защиты от превышения нет. Ну, так, мало ли что кому в голову взбредет. Можно и однобитовую переменную умножить на 999, если мозгов нет.

А где граница наличия мозгов? Умножение на 3 это есть мозги, или уже нет? sm.gif
QUOTE
То, что бит не один, а целое поле, видно по его названию, где в конце всегда стоит _0.

Это Ваше личное знание. Я первым делом-бы подумал, что это таки значение поля. Наверное мозгов нет ;(


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 10:24
Сообщение #75


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zltigo @ Apr 13 2016, 13:20) *
Это Ваше личное знание. Я первым делом-бы подумал, что это таки значение поля. Наверное мозгов нет ;(

Основано на изучении кейловского хидера. Пример:
Код
#define  PWR_CR_PLS                          ((uint32_t)0x000000E0)     /*!< PLS[2:0] bits (PVD Level Selection) */
#define  PWR_CR_PLS_0                        ((uint32_t)0x00000020)     /*!< Bit 0 */
#define  PWR_CR_PLS_1                        ((uint32_t)0x00000040)     /*!< Bit 1 */
#define  PWR_CR_PLS_2                        ((uint32_t)0x00000080)     /*!< Bit 2 */

А значение поля у них кодируется иначе:
Код
#define  PWR_CR_PLS_LEV0                     ((uint32_t)0x00000000)     /*!< PVD level 0 */
#define  PWR_CR_PLS_LEV1                     ((uint32_t)0x00000020)     /*!< PVD level 1 */
#define  PWR_CR_PLS_LEV2                     ((uint32_t)0x00000040)     /*!< PVD level 2 */
#define  PWR_CR_PLS_LEV3                     ((uint32_t)0x00000060)     /*!< PVD level 3 */
#define  PWR_CR_PLS_LEV4                     ((uint32_t)0x00000080)     /*!< PVD level 4 */
#define  PWR_CR_PLS_LEV5                     ((uint32_t)0x000000A0)     /*!< PVD level 5 */
#define  PWR_CR_PLS_LEV6                     ((uint32_t)0x000000C0)     /*!< PVD level 6 */
#define  PWR_CR_PLS_LEV7                     ((uint32_t)0x000000E0)     /*!< PVD level 7 */

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

P.S. Насчет мозгов можно сомневаться, а вот объективности в суждениях точно не хватает. Какие же упертые, эти латыши. Что один, что другой. biggrin.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 13 2016, 11:23
Сообщение #76


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ViKo @ Apr 13 2016, 12:24) *
Вот тогда на помощь приходит красивое решение - умножить младший бит.
Не самое красивое решение, хотя я тоже с такого начинал. Сейчас пишу так:
CODE
2 * (PWR_CR_PLS & -PWR_CR_PLS)
У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

QUOTE (ViKo @ Apr 13 2016, 12:24) *
Какие же упертые, эти латыши
Если это был намек в мой адрес - то я не латыш, я русский. Но мы оба латвийцы, да. Точно также как не каждый россиянин является русским. С белорусами в этом плане сложнее sm.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 13 2016, 11:39
Сообщение #77


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Apr 13 2016, 14:23) *
Код
2 * (PWR_CR_PLS & -PWR_CR_PLS)
У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

Чем дальше в лес, тем толще партизаны cranky.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 11:46
Сообщение #78


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Apr 13 2016, 14:23) *
Не самое красивое решение, хотя я тоже с такого начинал. Сейчас пишу так:
Код
2 * (PWR_CR_PLS & -PWR_CR_PLS)
У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

Можно поспорить, что красивее. Но не стоит. Ваше решение я помню. Применял именно там, где хидерописатели напутали с описанием битов латентности флэш.
Цитата
Если это был намек в мой адрес - то я не латыш, я русский. Но мы оба латвийцы, да. Точно также как не каждый россиянин является русским. С белорусами в этом плане сложнее sm.gif

Тогда - латвийцы. rolleyes.gif
В Беларуси тоже много национальностей. Я сам - космополит наполовину. rolleyes.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2016, 12:42
Сообщение #79


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Apr 13 2016, 13:24) *
Основано на изучении кейловского хидера. Пример:
CODE
#define  PWR_CR_PLS_0                        ((uint32_t)0x00000020)     /*!< Bit 0 */
#define  PWR_CR_PLS_1                        ((uint32_t)0x00000040)     /*!< Bit 1 */
#define  PWR_CR_PLS_2                        ((uint32_t)0x00000080)     /*!< Bit 2 */

Тут как значения битов, а не только _0 с расчетом на умножение. Совершенно обыденно.
QUOTE
Если битов в поле больше трех, то описывать все их комбинации - мазохизм. Их и нет в хидере. Вот тогда на помощь приходит красивое решение - умножить младший бит.

PWR_CR_PLS_0*7 для получения (PWR_CR_PLS_0|PWR_CR_PLS_1|PWR_CR_PLS_2) Что-то мне это нифига красивым не кажется.
PWR_CR_PLS(7) - приемлимо. А лучше в таком выражении эту семерку задефинировать:
#define PLS_OC4REF (7)
И получим:
PWR_CR_PLS(PLS_OC4REF)

, что читабельнее и БЕЗОШИБОЧНЕЕ комментариев при изменениях. Причем расписывать все комбинации сразу нет никакой необходимости. Нужные режимы добавляются в процессе работы. Получается никак не более трудоемко, чем комментарии.

QUOTE (Сергей Борщ @ Apr 13 2016, 14:23) *
Не самое красивое решение, хотя я тоже с такого начинал. Сейчас пишу так:
CODE
2 * (PWR_CR_PLS & -PWR_CR_PLS)
У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

Такое нужно в дополнительную обертку заворачивать. Иначе ЧЕЛОВЕЧЕСКИЙ глаз таки режет sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 13 2016, 13:28
Сообщение #80


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Apr 13 2016, 16:23) *
Не самое красивое решение, хотя я тоже с такого начинал. Сейчас пишу так:
Код
2 * (PWR_CR_PLS & -PWR_CR_PLS)
У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

Ничего себе, "вырублено на лбу". Такую запись сходу поймут полтора человека из тысячи, а подумав - ещё человек десять sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 13 2016, 13:36
Сообщение #81


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



de gustibus non est disputandum


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 13 2016, 13:43
Сообщение #82


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AHTOXA @ Apr 13 2016, 15:28) *
Ничего себе, "вырублено на лбу". Такую запись сходу поймут полтора человека из тысячи, а подумав - ещё человек десять sm.gif
Я в том смысле, что такая запись позвляет отличать битовое поле от одиночных битов:
CODE
    RCC->BDCR = 0
        | 0 * RCC_BDCR_BDRST
        | 0 * RCC_BDCR_RTCEN
        | 3 * (RCC_BDCR_RTCSEL &-RCC_BDCR_RTCSEL)   // 0 - no clk, 1 - LSE, 2 - LSI, 3 - HSE
        | 0 * RCC_BDCR_LSEBYP
        | 0 * RCC_BDCR_LSEON
       ;



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 13 2016, 15:41
Сообщение #83


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Вот еще добавлю...
Вдруг после очередного обновления пресловутого КУБа обнаружилось, что после старта АЦП с ДМА второй АЦП уже не стартует нормально.
Подробнее. При пошаговом прохождении в отладчике все как бы нормально, что еще противнее. Лень было разбираться.
Если запустить первый АЦП с внешним запуском, а потом второй АЦП, то так можно обойти проблему.
Где еще зарыли ОНИ подводные камни?
А в старом - я его предусмотрительно оставила, - все нормально идет.
Конечно, основной плюс КУБа в скорости создания инициализации. Особенно для особенно ленивых.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 13 2016, 16:09
Сообщение #84


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Apr 13 2016, 18:43) *
Я в том смысле, что такая запись позвляет отличать битовое поле от одиночных битов:

Сейчас пришла в голову мысль: можно завернуть это в constexpr-функцию, и пользовать её. Причём (это моё личное предпочтение) лучше сделать не маску, а номер бита, чтоб было не умножение, а сдвиг. То есть, где-то в заголовочнике:
Код
constexpr uint32_t CountTrailing0(uint32_t mask)
{
    return mask ? __builtin_ctz(mask) : sizeof(mask) * __CHAR_BIT__;
}

И где угодно:
Код
   RCC->BDCR = 0
        | 0 * RCC_BDCR_BDRST
        | 0 * RCC_BDCR_RTCEN
        | (3 << CountTrailing0(RCC_BDCR_RTCSEL))   // 0 - no clk, 1 - LSE, 2 - LSI, 3 - HSE
        | 0 * RCC_BDCR_LSEBYP
        | 0 * RCC_BDCR_LSEON
     ;

Так, возможно, число понявших немножко увеличитсяsm.gif
С другой стороны, это только C++, причём C++11. Но я, наверное, буду пользовать.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Apr 13 2016, 16:11
Сообщение #85


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Tanya @ Apr 13 2016, 18:41) *
Конечно, основной плюс КУБа в скорости создания инициализации. Особенно для особенно ленивых.

Для меня основное преимущество Куба- это графическая распиновка, помощь при распределении ног и привязанных к этим пинам ресурсов, а также красивое документирование этого. Вот за это им честь-хвала и поклоны поясные.
Go to the top of the page
 
+Quote Post
pitt
сообщение Apr 13 2016, 16:17
Сообщение #86


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Tanya @ Apr 13 2016, 11:41) *
Вот еще добавлю...
Вдруг после очередного обновления пресловутого КУБа обнаружилось, что после старта АЦП с ДМА второй АЦП уже не стартует нормально.
Подробнее. При пошаговом прохождении в отладчике все как бы нормально, что еще противнее. Лень было разбираться.
Если запустить первый АЦП с внешним запуском, а потом второй АЦП, то так можно обойти проблему.
Где еще зарыли ОНИ подводные камни?
А в старом - я его предусмотрительно оставила, - все нормально идет.
Конечно, основной плюс КУБа в скорости создания инициализации. Особенно для особенно ленивых.

К сожалению, железо развивается быстрее, чем мы накапливаем знания. Документация STM отвратительная и подручная Индия есть не у всех... Короче, слишком часто скорость перевешивает качество и это, по-видимому, чем дальше, тем больше будет основным фактором. C'est la vie.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Baser
сообщение Apr 13 2016, 16:22
Сообщение #87


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата
Код
2 * (PWR_CR_PLS & -PWR_CR_PLS)

У такой записи на лбу вырублено "я - битовое поле" и она работает даже если авторы заголовочного файла забыли определить отдельные биты.

Цитата(AHTOXA @ Apr 13 2016, 16:28) *
Ничего себе, "вырублено на лбу". Такую запись сходу поймут полтора человека из тысячи, а подумав - ещё человек десять sm.gif

Думаю, даже меньше sm.gif
Это чисто математический трюк, не зная который в его смысл нужно въезжать.
Я вот так и не придумал, почему дополнение до машинного слова маски поля бит всегда дает единицу внутри этого поля.
Однако это так sm.gif
Так что такая запись будет "вырублена на лбу" только после её осмысления.
А стороннего бедолагу разработчика, которому нужно будет подправить этот код может ввести в глубокий ступор.

Цитата(pitt @ Apr 13 2016, 16:36) *
de gustibus non est disputandum

Абсолютно согласен, что начался спор о вкусах. Результат то все равно будет одинаковым.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 13 2016, 16:56
Сообщение #88


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



ну не знаю... rolleyes.gif 0x11001000 * 5 = 0x55005000
это уже на лбу должно быть biggrin.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 13 2016, 17:28
Сообщение #89


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(_Pasha @ Apr 13 2016, 21:56) *
ну не знаю... rolleyes.gif 0x11001000 * 5 = 0x55005000
это уже на лбу должно быть biggrin.gif

Речь не об этом, а о:
0x30 & -0x30 = 0x10


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Apr 13 2016, 18:17
Сообщение #90


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Tanya @ Apr 13 2016, 15:41) *
Конечно, основной плюс КУБа в скорости создания инициализации. Особенно для особенно ленивых.

лениво - написать один раз свою инициализацию и затем копипастить в везде
а каждый раз разбираться с новыми интересными чужими граблями, особенно прикольно в поле - это надо быть весьма и весьма активным и весёлым человеком

Сообщение отредактировал Огурцов - Apr 13 2016, 18:17
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 19:36
Сообщение #91


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Скажите уже, что мой способ - и простой, и красивый.
Таня, разбираться надо не с Кубом, а с регистрами. Регистры описывали творцы, а Куб создали ремесленники (изучившие регистры).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 13 2016, 20:56
Сообщение #92


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Apr 13 2016, 20:28) *
Речь не об этом, а о:
0x30 & -0x30 = 0x10

Ага. Это есть трюк. Понятный, когда прикинешь к носу. Но даже автор (Сергей Борщ) в одной из тем описАлся, выдав nnn & ~nnn вместо nnn & -nnn.
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 14 2016, 09:08
Сообщение #93


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(ViKo @ Apr 14 2016, 00:56) *
Ага. Это есть трюк.


Hacker's Delight by Henry S. Warren, "Алгоритмические трюки для программистов".


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 14 2016, 09:27
Сообщение #94


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ViKo @ Apr 13 2016, 22:56) *
Ага. Это есть трюк. Понятный, когда прикинешь к носу.
2 + 2 = 4. Тоже трюк. Не использовать?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 14 2016, 10:45
Сообщение #95


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Apr 14 2016, 14:27) *
2 + 2 = 4. Тоже трюк. Не использовать?

Тут простая математика. А там - именно что трюк. Насколько я понимаю, он базируется на том, что числа представлены в дополнительном коде. И единичка получается из-за несимметричности представления положительных и отрицательных чисел. Если же числа будут не в дополнительном коде, то трюк не сработает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Apr 14 2016, 12:17
Сообщение #96


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Я извиняюсь, но почему бы не использовать структуры с битовыми полями? В них можно запихивать и энумы.

Код
    #include <iostream>
    using namespace std;
    
    enum BOOL {
        f=0,
        t=1
    };
    
    struct A {
        BOOL b:1;
    };
    
    int main()
    {
        A a;
        a.b = t;
        if (a.b == t)
        {
            cout << "bit fields";
        }
        return 0;
    }
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 14 2016, 12:30
Сообщение #97


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Kabdim @ Apr 14 2016, 15:17) *
Я извиняюсь, но почему бы не использовать структуры с битовыми полями? В них можно запихивать и энумы.


Потому что имена уже определены в хидерах.
Большинство тут пытается манипулировать с уже придуманными производителями HAL-ов именами.

Go to the top of the page
 
+Quote Post
Baser
сообщение Apr 14 2016, 12:37
Сообщение #98


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Kabdim @ Apr 14 2016, 15:17) *
Я извиняюсь, но почему бы не использовать структуры с битовыми полями? В них можно запихивать и энумы.

Битовые поля хороши всем, кроме невозможности получить реальный номер бита, где это поле расположено.
Битовое поле и было придумано, чтобы скрыть эту якобы ненужную информацию.
Как результат, проблематично одной командой сбросить/установить несколько битовых полей одновременно.
Многие фирмы сейчас предоставляют хидеры для МК, где регистры расписаны как в виде битовых полей, так и в виде обычных дефайнов с номерами или масками битов.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Apr 14 2016, 12:38
Сообщение #99


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(AlexandrY @ Apr 14 2016, 15:30) *
Потому что имена уже определены в хидерах.
Большинство тут пытается манипулировать с уже придуманными производителями HAL-ов именами.

Это же не взаимоисключающие способы. То что не критично, с тем использовать HAL (причем на уровне оберток и автогенератора) и не париться. А для того блока для которого стоит задача высосать все соки и небольшой кусок хедеров переписать не зазорно. Всё равно своя библиотечка с нужным функционалом будет писаться дольше этого переписывания уже существующего, но при этом она будет значительно яснее.
Цитата(Baser @ Apr 14 2016, 15:37) *
Битовое поле и было придумано, чтобы скрыть эту якобы ненужную информацию.
Как результат, проблематично одной командой сбросить/установить несколько битовых полей одновременно.
Многие фирмы сейчас предоставляют хидеры для МК, где регистры расписаны как в виде битовых полей, так и в виде обычных дефайнов с номерами или масками битов.

Последовательное присвоение полям нормальный компилятор должен оптимизировать в 1 команду. Если очень надо именно определнную в старом стиле маску - есть тайпкасты. Да и опять же к регистрам можно обращаться одновременно и как к структурам и как описано в хидере производителя.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 14 2016, 12:44
Сообщение #100


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Потому что у битовых полей их расположение в слове не определено точно, с какого бита начинается - с младшего или старшего, и может оказаться не совпадающим с расположением битов в регистрах.
Go to the top of the page
 
+Quote Post

8 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.02736 секунд с 7
ELECTRONIX ©2004-2016