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

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

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

 


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


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