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

 
 
8 страниц V  « < 4 5 6 7 8 >  
Reply to this topicStart new topic
> HAL, сколько можно фиксить ?
Сергей Борщ
сообщение 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

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:00
Рейтинг@Mail.ru


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