Полная версия этой страницы:
HAL
картошка
Apr 8 2016, 15:16
Очень важная тема думаю.
Давайте будем озвучивать подозрения на некорректную работу HAL, у кого были какие проблемы с периферией при использовании этого "индусского" кода ?
В основном интересует тесты на убой; в частности электро-помехи на UART линии выявили полную неработоспособность реализации HAL. Это не касается "ORE"!
Потому-что валовая мода на HAL, приведет к хаосу качества программного обеспечения. Кто-то останется без работы

.
- - - Проблемы с UART:
Некорректная обработка прерываний, приводящая к зависанию системы, конкретно: Low Noise и Frame Error . Анализ кода показал, что "писатели" не понимают принципов сброса большинства статусных состояний в регистре состояния SR (до десятка чтений регистра SR). Лишние действия по четности бит.
- - - Система прерываний, вернее вызов специфических обработчиков, затормозили опять до уровня архитектуры 7DTMI, все очень медленно.
Передача указателя и так в известный контекст выполнения. По видимому начало разработки HAL по времени взято с времен архитектуры 7TDMI, где подобные задержки можно было бы понять и простить.
Цитата
* 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.
*
А что вы хотите?
Да нечего там обсуждать, для реальных проектов этот HAL непригоден.
Настройку системы тактирования для стандартных случаев да настройку GPIO можно оставить, а остальное либо с ошибками (например, таймер), либо просто неправильно реализовано и поэтому использовать его невозможно (UART).
картошка
Apr 8 2016, 17:09
Цитата(pitt @ Apr 8 2016, 19:39)

А что вы хотите?
"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем

. Завтра, на работу не устроишься. Будешь доказывать "желтым" лбам кто валенок, а кто нет. Причем тенденция набирает обороты.
Цитата(SSerge @ Apr 8 2016, 20:57)

Да нечего там обсуждать, для реальных проектов этот HAL непригоден.
Настройку системы тактирования для стандартных случаев да настройку GPIO можно оставить, а остальное либо с ошибками (например, таймер), либо просто неправильно реализовано и поэтому использовать его невозможно (UART).
Вот ! Мало кто выкладывает полезную информацию. А что там по таймеру, что-то с прерываниями опять ?!
Цитата(картошка @ Apr 9 2016, 00:09)

"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем

. Завтра, на работу не устроишься. Будешь доказывать "желтым" лбам кто валенок, а кто нет. Причем тенденция набирает обороты.
Это их проблемы.
Цитата
Вот ! Мало кто выкладывает полезную информацию. А что там по таймеру, что-то с прерываниями опять ?!
Хуже, они не осилили тему из этого топика:
http://electronix.ru/forum/index.php?showt...p;#entry1326501
Ruslan1
Apr 8 2016, 17:57
Цитата(картошка @ Apr 8 2016, 20:09)

"Некоторые" конторы требования уже вывесили по знанию HAL. И мечты их не затемнишь ничем

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

У меня вопрос к знатокам HAL. Он же для любой серии ARM разных производителей по идее разный должен быть.
Ну то есть STM32 один HAL, LPC другой, разные версии ARM там 7й, 9й, 11й, 15й, Cortex, M версия, A версия.
Вы тут о каком HAL ведете речь. Или я чего то не понимаю? Поясните...
Да нет, не может такого быть. Это придумка для STM32. Совсем не понимаю, зачем, но тем не менее...
Вот посмотрел на документацию к этому халу. Там стыдливо ссылаются на основной мануал (прескалеры там всякие, время выборки и прочая, и прочая). И возникает вопрос: раз уж мануал - основной источник, зачем над ним нахлобучивать ещё что-то? Чтобы побольше почитать? Это противоречит заявленной цели "быстрее, дешевле, проще". Или расчёт на то, что мануал читать никто не будет, аки нерадивая школота, и сдерут какой-то пример с тырнетов? Но это подход в лучшем случае троечника, и ничего толковее дешёвой ёлочной гирлянды так не сделаешь, ИМХО. Вот я и недоумеваю...
AlexandrY
Apr 8 2016, 20:06
Цитата(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.
HAL-ы возникли когда производители начали поставлять BSP и PSP к своим чипам, а не отдельные мелкие демо-проектики.
И HAL-ы нужны в первую очередь самим писателям BSP и HAL-ов.
В добавок HAL-ы как абстракция абстрагируются от многих полезных фичей периферии, что тоже в минус.
HAL-ы также мешают портированию BSP на платформы собственной разработки, поскольку их цель скрыть работу с периферией.
Короче, применение разработчиками HAL-ов я бы назвал верхом мазохизма если эти HAL-ы не используются RTOS
Использование HAL, в понимании многих - ускорение работы. Отчасти, это так и есть, но ничего задаром не бывает - за скорость приходиться расплачиваться надежностью. Есть опция использования Chibios - он идет со встроенным HAL. Там качество на несколько порядков выше, но, естественно, отстает по времени. Многие пишут свой HAL. Преимущество в том, что используешь чужой код как референс, а разбираешься сам и затачиваешь под себя и свои нужды. Т.е. за счет сокращения об'ема и функциональности нагоняешь по времени. К сожалению, при накоплении проектов приходиться и обновлять и перепроектировать, а железо убегает вперед...
Alechek
Apr 9 2016, 08:22
Цитата(AlexandrY @ Apr 9 2016, 01:06)

HAL-ы возникли когда производители начали поставлять BSP и PSP к своим чипам, а не отдельные мелкие демо-проектики.
И HAL-ы нужны в первую очередь самим писателям BSP и HAL-ов.
Короче, применение разработчиками HAL-ов я бы назвал верхом мазохизма если эти HAL-ы не используются RTOS
Ноги растут из BSP для ОС (не обязательно Real-Time)
Кому нужны чипы, если с ними нельзя начать быстро сделать свое?
Всякие
*WinCE железки-навигаторы
*DVD-медиа-проигрыватели.
*сотовые телефоны
*и т.п.
никто не стал бы делать без поддержки производителя чипа РАБОЧИМ примером его использования.
--
ЗЫ
Для меня образец кода HAL WindowsCE (и прочих библиотек) является образцом лаконичности и понятности кода.
А вот самописные драйвера-заплатки для конкретных моделей навигаторов смотреть без слез невозможно.
Цитата(AlexandrY @ Apr 8 2016, 23:06)

Да у всех есть HAL, только называют его где-то по другому.
Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.
Alechek
Apr 9 2016, 11:27
Спрятаться то оно может и для всех, только даже из названия (HAL), подразумевается, что это будет для какой-то конкретной программной оболочки.
Пока не будет этой самой оболочки, разговор об уровнях абстракции железа - ни о чем.
romas2010
Apr 9 2016, 13:45
Цитата(Alechek @ Apr 9 2016, 14:27)

Спрятаться то оно может и для всех, только даже из названия (HAL), подразумевается, что это будет для какой-то конкретной программной оболочки.
Пока не будет этой самой оболочки, разговор об уровнях абстракции железа - ни о чем.
для каждого процессора все равно надо делать свой "типа HAL"..универсализировать очень тяжело..Более-менее понятно у ребятишек из chibios,они хотя бы сами и портируют
mantech
Apr 9 2016, 18:05
Цитата(scifi @ Apr 9 2016, 12:04)

Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.
Вот если такое хотели сделать, то в первую очередь нужно стандартизировать API, например, как WIN32 в свое время, все системные вызовы прописать и документировать, например команды работы с портами, инициализация портов, параметры пинов, функции установки\сброса и т.п. Вот тогда это еще можно будет как-то использовать...
Дались вам эти порты. Есть куда более интересные периферийные устройства. Например, один таймер задает частоту дискретизации, аналоговый вотчдог срабатывает, как синхронизатор, другой таймер высчитывает количество выборок в послезапуске, третий таймер вычисляет время между синхронизацией и выборкой. Все это у меня сделано на STM32F3xx (пока чисто для развлечения), и никаким стандартным HAL-ом я этого не сделал бы, я так думаю.
Цитата(ViKo @ Apr 9 2016, 21:49)

Например, один таймер задает частоту дискретизации, аналоговый вотчдог срабатывает, как синхронизатор, другой таймер высчитывает количество выборок в послезапуске, третий таймер вычисляет время между синхронизацией и выборкой. Все это у меня сделано на STM32F3xx (пока чисто для развлечения), и никаким стандартным HAL-ом я этого не сделал бы, я так думаю.
Вот именно. Этот как бы хал убивает идею МК на корню (ну, кроме простейшей гирлянды). Как-то так.
HAL ничего не убивает. Это просто еще один инструмент. Убивает, как всегда, глупость, бездумное пользование инструментом. Любой проект состоит из алгоритма и кода, ответственного за периферию. Соответственно, HAL должен облечать применение алгоритма к этой самой перифирии. Очевидно, что те, кто не знает перифирии, наломает дров с любым HAL-ом, а разнообразие доступного железа и его отличия от одой модели к другой и, уж тем более, от одного производителя к другому, осложняют жизнь разработчика и, соответственно, затягивают время на выполнение проекта. Я полагаю, что со временем, периферия будет более и более стандартизоваться... Также очевидно для чего компании разрабатывают HAL-ы: чтобы поиметь и в прямом и переносном смысле пользователя. STM молодцы в этом смысле. HAL сделать проще(индусы дешевле чем technical writers) , чем написать достойный мануал/референс/документ. За десятки лет моей карьеры я не видел много документов хуже, чем STM, причем, английский для меня очень давно не проблема. NXP и Atmel намного лучше в этом смысле. Зато у SТМ есть HAL(очень xочется сказать, что от слова ХАЛтура) и это - все-таки, неплохой референс.
Так что, уважаемые коллеги:"думайте сами, решайте сами..."
Огурцов
Apr 9 2016, 23:08
hal - это от слова ад, добро пожаловать
он имел бы право на жизнь, будь он надстройкой над spl
но почему-то st ударило переколбасить spl, перемешав кашу с винегретом - не переваришь
AleksBak
Apr 10 2016, 06:49
У микрочипа например - в 100 раз хуже его "HAL". Так что если что-то ругаете, то с ихнего ПО вообще в тихий ужас впадете. С ума сойдете от их ПО. Да. Нет такой продуманной софтовой организации. Ерунда какая-то там. Нет такого - что где-то свой код добавить (USER CODE) - нет! Да Вы не ослышались! Все заново будет генерировать и ваша писанина исчезнет (и никто не спросит даже про нее в отличие от стм-овского где есть соотв. галочки). Навязывают изначально свои дерьмовые структуры для User приложения. И без них ничего не будет работать. Изначально свою структуру проекта навязывают! Вы поняли? Даже вспоминаешь про это - и такая злость и тоска берет - хотя уже столько времени прошло. Представьте это просто от воспоминаний об этом ПО такое чувство приходит, а что бывает когда его используешь?!!! Честно - попользовались бы Вы ихним "HAL"-ом -потом посмотрел бы я на Вас. Этим дерьмом (очень мягко говоря) вообще не хочется пользоваться. И баги в нем очень медленно исправляют (когда им написал про баг с настройкой DMA - они сказали спасибо Вам. что написали и что в след. ревизии мы вообще удалим эту функцию. Да Вы не ослышались - не исправим, а удалим. А таких моментов очень много. И кривой код!! Чего стоит switch из 10-ти пунктов ветвлений где они все одинаковые причем!! Да да Вы не ослышались - 10 абсолютно одинаковых обработок (все по 2 строчки где-то) у всех 10-ти меток switch-а. Вам там дерьмо нужно?? Чтобы оно место в килобайтах занимало в проекте? Чтобы в нем копаться и вонять при этом? Вот пожалуйста - вот такой у них КАЛ (реально). А тут хотя бы на первых порах многие используют стм-овский софт. Да, да - признавайтесь. Хотя бы для быстрой проверки чего-то. 100% очень нужная вещь. А то что SSerge тут пишет про Delay - типа она через 2^32 степени миллисекунд перестанет работать - то во-первых это голословное заявление и просто слова. Не обратили внимания что там у него только слова? Где кусок кода и док-во. что это не так. Я мог бы привести ссылку на др. сайт где про это подробно расписано и доказано, что все в порядке, но зачем? А тут нельзя? А во-вторых многие также делают. Видел у других такое. И наконец эту задержку легко можно превратить в использование с Таймерами (с помощью этого ПО - только галочки где нужно поставь/настрой).
Цитата(Огурцов @ 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 она все-таки лучше, чем ничего.
SSerge
Apr 10 2016, 17:14
Цитата(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.
Огурцов
Apr 10 2016, 17:41
Цитата(pitt @ Apr 10 2016, 18:07)

а послушать ?
https://translate.google.ru/#en/ru/halhttps://translate.google.ru/#en/ru/hellst какбэ явно намекает - имеющий уши - да услышит
Цитата(Огурцов @ Apr 10 2016, 20:41)

а послушать ?
st какбэ явно намекает - имеющий уши - да услышит
Огурцов, а звучание GUI вам ни на что не намекает?
romas2010
Apr 10 2016, 18:41
Цитата(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));
Как говорится,читайте,читайте и еще раз читайте(даташит)
Огурцов
Apr 10 2016, 19:39
Цитата(ViKo @ Apr 10 2016, 17:55)

Огурцов, а звучание GUI вам ни на что не намекает?

я не знаю белорусский
Цитата(romas2010 @ Apr 10 2016, 21:41)

этих людей надо уважать за то,что они тебя развивают
О господи. Хотите кого-нибудь поуважать - найдите нормальных программистов, а не индусских говнокодеров. А то ведь какие-нибудь неокрепшие умы почитают и решат, что говнокод - это норма жизни. Есть примеры добротно сделанных проектов. Недавно натыкался на LabTool, к примеру, и там код выглядит вполне прилично. Читайте, развивайтесь.
AlexandrY
Apr 10 2016, 20:44
Цитата(scifi @ Apr 10 2016, 23:02)

Есть примеры добротно сделанных проектов. Недавно натыкался на LabTool, к примеру, и там код выглядит вполне прилично. Читайте, развивайтесь.
Ага, LabTool, повеселил:
Код
uint32_t GetTimerCounter()
{
return 0;
}
Типичный говнокод.
Цитата(Огурцов @ Apr 10 2016, 14:39)

я не знаю белорусский
А что, имеющий уши, услышит на вопрос:"Who are you?"
VIKo
Для незнающих белорусский сообщаю, что HAL - произносится как "хал", а Hell - как "хэл".
Огурцов
Apr 10 2016, 21:24
но гугель с вами не согласен
Цитата(Огурцов @ Apr 10 2016, 17:24)

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

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

Вот и я поимел опыт с HAL. Начальную установку и конфигурацию сделал на кубе. За 4 месяца сделал два близких устройства на STM32F429...
Ни в коде куба ни в коде HAL править ничего не понадобилось, хотя сделал бы это не долго раздумывая. Писать свою конфигурацию заняло бы больше времени. Так что в целом HAL и кубом удовлетворен.
Для того и HAL и CUBE задумывались. Никто не сказал, что там ничего не работает. Там всегда что-то или не работает или работает не так... Вопрос, на самом деле, не сколько времени ушло на проекты, а насколько разработчик понимает что и как внутри работает, сколько времени уйдет, когда что-нибудь вылетит и надо будет понять, найти и исправить...Так что я не вижу тут никаких противоречий.
Цитата(pitt @ Apr 11 2016, 02:31)

В английском есть понятие акроним и по правилам CAN должен произноситься как СиЭйЭн, но мои коллеги американцы произносят КАН, ну и я, соответственно, чтобы меня понимали...
Вы можете придумывать какие угодно правила, или даже ссылаться на какие-то книжки, но если этим правилам никто не следует, то их как бы и нет вовсе. Причём англоязычные товарищи гораздо либеральнее наших относятся к таким фривольностям. Во всяком случае, ни разу не слышал от них занудств по таким поводам. Понятно, о чём идёт речь, - и слава богу.
Если аббревиатуру можно произнести слитно, а не по буквам, то почему бы и нет? Например, P-CAD.
Но "хэл" на HAL никто не скажет.
upd. скажет "хал", ближе к этому... русскими буквами не передать.
EasyToUse
Apr 11 2016, 07:30
Помните, как мы работали раньше? ))) Как конфигурировали порты и флеш, настраивали тактирование? Как энтузиасты писали макросы для настройки и ПО высокого уровня для того же? И вы скажете HAL это плохо? HAL это великолепно! ))) Идея витала в воздухе. И ее неплохо реализовали. Концепция HAL с ее реентерабельностью функций и механизмом блокировки объектов отлично подходит, когда используешь RTOS. Есть некоторые шероховатости, но это детские болезни и они пройдут! Нашел баг - напиши в ST!
P.S. И индусы молодцы! Они, вообще, ребята умные - шахматы придумали )))
Цитата(ViKo @ Apr 11 2016, 10:27)

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

Я вижу, все уже забыли про "Космическую одиссею".
Ознакомьтесь.
Наверное, вы не так поняли мою мысль. Я поправил, для ясности.
AleksBak
Apr 11 2016, 08:05
Цитата(EasyToUse @ Apr 11 2016, 11:30)

...Концепция HAL с ее реентерабельностью функций и механизмом блокировки объектов отлично подходит, когда используешь RTOS...
У него механизм этот блокировки объектов реально хороший что ли?
EasyToUse
Apr 11 2016, 08:22
Цитата
У него механизм этот блокировки объектов реально хороший что ли?
На укладку парашюта еще никто не жаловался... Реентерабельные функции можно вызывать из разных задач, а используя HALовский LOCK для устройств периферии не нужны мьютексы RTOS.
esaulenka
Apr 11 2016, 08:52
Цитата(AleksBak @ Apr 11 2016, 11:05)

У него механизм этот блокировки объектов реально хороший что ли?
Нириально хороший.
Просто флажок "периферия занята". Поддержки RTOS (типа "семафор"), как и банальных критических секций, там нет.
Т.е. наблюдаем типичную хорошо спрятанную граблю - неатомарная операция "проверил - поменял - записал" выполняется, теоретически, в нескольких потоках.
Дальше только вопрос времени, когда это добро "выстрелит"...
EasyToUse
Apr 11 2016, 09:06
А если проверку этого флажка делать в критической секции?
AleksBak
Apr 11 2016, 09:48
Цитата(EasyToUse @ Apr 11 2016, 13:06)

А если проверку этого флажка делать в критической секции?
Все можно. Но только в ихней обертке
cmsis_os.h нету таких вещей/обертки.

А еще можно просто добавить мьютекс. Но тогда получается в обоих случаях этот HAL править нужно. А эту
cmsis_os.h сам ARM первый выдвинул - так получается?
esaulenka
Apr 11 2016, 10:48
Мне кажется, надо только переделать HAL_LockTypeDef на мьютекс.
И дефайны __HAL_LOCK() / __HAL_UNLOCK() переопределить.
Ну или вручную, критическая секция в __HAL_LOCK()
EasyToUse
Apr 11 2016, 10:57
А лучше одну и ту же периферию не использовать в разных задачах.
Tarbal
Apr 11 2016, 11:59
Цитата(pitt @ Apr 11 2016, 04:38)

Для того и HAL и CUBE задумывались. Никто не сказал, что там ничего не работает. Там всегда что-то или не работает или работает не так... Вопрос, на самом деле, не сколько времени ушло на проекты, а насколько разработчик понимает что и как внутри работает, сколько времени уйдет, когда что-нибудь вылетит и надо будет понять, найти и исправить...Так что я не вижу тут никаких противоречий.
Просто хотел поделиться успешным опытом.
Как найти и исправить проблем нет. Может потому и взялся. Были проблемы с длинными обработчиками прерываний, но реорганизовал структуру драйвера, чтобы не мешало.
LightElf
Apr 11 2016, 15:55
QUOTE (scifi @ Apr 9 2016, 12:04)

Имелось в виду, что что "вот сейчас возникнет уровень абстракции, за которым спрячется периферия всех-всех-всех, включая ST, NXP, TI и т.д.". Вот про это я и говорю "не может быть". Потому что такой уровень абстракции даст только "дёрнуть ножкой", "сделать выборку АЦП" и всё. Ничего сложнее там не сделаешь.
Собственно если посмотреть в самые-самые первые версии ARM CMSIS (в районе 1.1), то там и подразумевался единый уровень абстракции для чипов всех производителей. Типа: UART, можно выставить скорость, четность, стоп-биты, отправить-принять байт. Ethernet: можно выставить скорость, дуплекс, принять-отправить пакет. Естественно при этом теряются некоторые специфические фишки, плата за переносимость между производителями. Но производители в восторг не пришли, драйвера писать не стали. А сам ARM поддерживать зоопарк не осилил. И к версии CMSIS 2.0 эту красоту убрали, оставив поддержку только самого ядра.
Будь я модератором, убрал бы из темы 3/4 холивара и оставил полезные посты.
А вот мой случай:
В библиотеке HAL 1.1.0 - 1.4.0 для STM32L1xx был баг в функции HAL_RCC_GetSysClockFreq(), которая возвращала установленную тактовую частоту:
Код
pllvco = HSE_VALUE * (pllm / plld);
...
return pllvco;
Из-за ошибки округления в скобках, возвращалось неверное значение. Надо переставить скобки - сначала умножать, потом делить. Переполнения не будет.
В версии 1.5.0 баг исправили
SasaVitebsk
Apr 12 2016, 06:34
Цитата(esaulenka @ Apr 11 2016, 11:52)

Нириально хороший.
Просто флажок "периферия занята". Поддержки RTOS (типа "семафор"), как и банальных критических секций, там нет.
Т.е. наблюдаем типичную хорошо спрятанную граблю - неатомарная операция "проверил - поменял - записал" выполняется, теоретически, в нескольких потоках.
Дальше только вопрос времени, когда это добро "выстрелит"...
Тока хотел написать ... Опередили ...
Сергей Борщ
Apr 12 2016, 06:56
Заинтересовало. Глянул. Свежескачанные кубы для 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 приходится качать полтораста мегабайт куба - отдельный разговор.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.