|
|
  |
HAL, сколько можно фиксить ? |
|
|
|
Apr 11 2016, 11:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(pitt @ Apr 11 2016, 04:38)  Для того и HAL и CUBE задумывались. Никто не сказал, что там ничего не работает. Там всегда что-то или не работает или работает не так... Вопрос, на самом деле, не сколько времени ушло на проекты, а насколько разработчик понимает что и как внутри работает, сколько времени уйдет, когда что-нибудь вылетит и надо будет понять, найти и исправить...Так что я не вижу тут никаких противоречий. Просто хотел поделиться успешным опытом. Как найти и исправить проблем нет. Может потому и взялся. Были проблемы с длинными обработчиками прерываний, но реорганизовал структуру драйвера, чтобы не мешало.
|
|
|
|
|
Apr 11 2016, 15:55
|
Частый гость
 
Группа: Участник
Сообщений: 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 эту красоту убрали, оставив поддержку только самого ядра.
|
|
|
|
|
Apr 11 2016, 17:06
|
Участник

Группа: Участник
Сообщений: 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 баг исправили
|
|
|
|
|
Apr 12 2016, 06:56
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Apr 12 2016, 07:39
|
Частый гость
 
Группа: Участник
Сообщений: 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. проверить/разобраться с Кубом что-то - самое то это (очень и очень многое с ним вообще-то можно проверить).
|
|
|
|
|
Apr 12 2016, 08:00
|
Гуру
     
Группа: Свой
Сообщений: 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 раз. Против самих библиотек никто не возражает. Иногда удобно. Например туда посмотреть.
|
|
|
|
|
Apr 12 2016, 08:40
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(SasaVitebsk @ Apr 12 2016, 12:00)  ... Это всё уже писано 10 раз. ... Полностью на 100.0% согласен. Так и стараюсь делать вообще-то. Спс за развернутый ответ. ТС хотел в этой теме какие если есть важные ошибки в HAL - чтобы про них кто-то написал и тогда не буду тему "захламлять". До этого "наводящий" вопрос о __HAL_LOCK/__HAL_UNLOCK я спецом задал, а то так бы тут и обсуждали перевод слова "hal" и т.п.
|
|
|
|
|
Apr 12 2016, 09:37
|

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

|
QUOTE (SasaVitebsk @ Apr 12 2016, 11:00)  Задача "создать универсальную библиотеку", в принципе не решаемая. Угу, только не заметили-ли Вы, что "универсальная библиотека" это еще цветочки и уже идет полным ходом создание "универсальной программы"  . Например, под наванием "линукс". И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс - только зашитые "библиотеки", или вообще "линукс" и точка.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 12 2016, 11:11
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(zltigo @ Apr 12 2016, 12:37)  Угу, только не заметили-ли Вы, что "универсальная библиотека" это еще цветочки и уже идет полным ходом создание "универсальной программы"  . Например, под наванием "линукс". И уже пошли чипы и платформы на котрых нет того-же описания чипа в доступе как класс - только зашитые "библиотеки", или вообще "линукс" и точка. Да заметил. Но пока ещё далеко до завершения этой работы... Даже с идеалогией не всё в порядке. И вообще. Посмотрите, почему линукс? Он так хорош? Да нет, просто объём работы (суммарный, а не только по ОС) таков, что реально сложно за него взяться. Это ведь как в любом проекте. Когда его завершаешь, то видишь кучу мелочей, которые надо бы исправить. И беда в том, что на начальном этапе ты этих мелочей не заметил, или не предусмотрел механизмов которые помогают их красиво устранить. А на этапе, когда ты их видишь, к сожалению, их устранение приводит к коренной переработке всего проекта. А ты на это не готов. И количество людей, принимающих участие в проекте, не улучшает его свойств (не уменьшает количество огрехов), а, наоборот, увеличивает. И... поехало всё с нуля. StdPeriph_Driver -> HAL_Driver ->
|
|
|
|
|
Apr 12 2016, 11:29
|

Гуру
     
Группа: Свой
Сообщений: 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 -> Хуже того, в большинстве больших опенутых проектов набегают новички, которые даже уже основ НЕ смогли понять и радостно начинают ваять альтернативные яйца в профиль, но уже совсем через анус  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 12 2016, 11:33
|

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

|
QUOTE (SasaVitebsk @ Apr 12 2016, 14:11)  И беда в том, что на начальном этапе ты этих мелочей не заметил, или не предусмотрел механизмов которые помогают их красиво устранить. А на этапе, когда ты их видишь, к сожалению, их устранение приводит к коренной переработке всего проекта. А ты на это не готов. Я инода все-же такое делаю. Помогает, что срок жизни изделий по железу очень большой (10 лет типично), вот и становится разумным переодически вдыхать новую жизнь в старое железо. При этом рефакторинг тоже делаю.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|