Страница 238 из 446

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 15:28:10
pvit
[uquote="jcxz",url="/forum/viewtopic.php?p=3463212#p3463212"]Продуктивность ярко видна по форумам: все форумы просто заполнены стонами пользователей всяких калокубов: "нашёл в нете это. прикостылил к себе, что-то понатыкал там и там - не работает! :(( перетыкал по-другому - опять не работает! :((( спасите-помогите - куда ещё потыкать?? - неделю уже бьюсь, а никак не получается! :(((".
И практически ни одного вопроса от тех, кто читает мануалы и разбирается сам без всяких либ.
Это очень показательно. 8)

И сделать кое-как, по-быстрому не разбираясь - это значит - переделывать потом и ещё и ещё. И в результате потратить много больше времени, чем если прочитать доки и сделать сразу нормально. Так что если важно время и оно ценно - то никаких калокубов однозначно![/uquote]
IMHO вы съезжаете с конкретного примера на разговоры за жизнь. У меня не было проблем с кубом. И изучение его исходников начинать програмирование с чтения RM желания не прибавило. За тех кого вы видели на форумах отвечать не могу, т.к. делюсь собственным опытом.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 15:37:01
dosikus
pvit, мы все здесь наблюдали ваше "не было проблем" вы кого сейчас лечите?

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 15:41:46
oleg110592
Посмотрел что там сейчас куб генерит:
Первым делом LATENCY:

Код: Выделить всё

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
  {
  Error_Handler();  
  }
....
внутри функции работа с регистром напрямую:

Код: Выделить всё

__STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency)
{
  MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, Latency);
}
и т.д.
imho как пример на подсмотреть пойдет

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 16:53:57
VladislavS
[uquote="oleg110592",url="/forum/viewtopic.php?p=3463236#p3463236"]

Код: Выделить всё

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
  {
  Error_Handler();  
  }
....
[/uquote]Это пять! Они сами сомневаются что смогли изменить один регистр?

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 18:30:52
WiseLord
Конечно сомневаются. Потому что MODIFY_REG изменяет лишь один бит регистра.

Или Вы будете утверждать, что если написать var |= 0x01, то в результате в var будет именно 0x01?

*поправка - не один бит, а сколько задано маской. Так что, возможно, это и лишнее.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 19:37:29
dosikus
WiseLord, правильно что сомневаетесь , это начало на пути к просветлению.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 20:03:05
philosoraptor
[uquote="WiseLord",url="/forum/viewtopic.php?p=3463327#p3463327"]если написать var |= 0x01, то в результате в var будет именно 0x01?[/uquote]

Едва ли товарищ выше, к примеру, умеет эндить и орить, так что |= ему ничего не скажет. А что-то типа var &= ~0xfffc его и вовсе в ступор введет. Причем объяснять ему, почему не var &= 0x0003, совершенно бесполезно.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 20:13:01
dosikus
philosoraptor, ты только что обгадился по полной и все из-за абсолютной невнимательности...

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 20:38:09
Oxford
Есть стандартные файлы кода запуска. В файлах есть комменты обьясняющие че по чем зачем и почему. О чем базар?

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:10:25
Мурик
philosoraptor писал(а):А что-то типа var &= ~0xfffc его и вовсе в ступор введет. Причем объяснять ему, почему не var &= 0x0003
Разве не одно и тоже?

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:19:36
ARV
Мурик писал(а):Разве не одно и тоже?
ну как бы для 32-битной платформы не одно...

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:27:29
Мурик
Тип переменных нам неизвестен. Может он uint16_t.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:36:51
a5021
[uquote="VladislavS",url="/forum/viewtopic.php?p=3463268#p3463268"]Это пять! Они сами сомневаются что смогли изменить один регистр?[/uquote]
Это писали особо недоверчивые индусы. Сомневаться им приходится во всем, включая даже то, что регистры непосредственно после подачи питания находятся в их дефолтных состояниях.
Вот кусок стартапа, функции, которая вызывается до main():

Код: Выделить всё

void SystemInit(void)
{
  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001U;
HSION там уже в единице, но индусы считают, что лишний раз не повредит. Ну а там где один лишний раз, то и другой уже лишним точно не будет:

Код: Выделить всё

void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_0)
  {
  Error_Handler();  
  }
  LL_RCC_HSI_Enable();

   /* Wait till HSI is ready */
  while(LL_RCC_HSI_IsReady() != 1)
  {
    
  }
  LL_RCC_HSI_SetCalibTrimming(16);

  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);

  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);

  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);

   /* Wait till System clock is ready */
  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
  {
  
  }
Все вышеперечисленные действия инитят регистры в их дефолтовые значения, которые и до этого те же самые значения имели. И как можно видеть, LL_RCC_HSI_Enable() пытается взвести изначально взведенный бит HSION уже во второй раз.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:54:49
VladislavS
Вообще, можно придумать ситуации когда прошивка стартует с недефолтными регистрами.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 21:58:01
a5021
Например?

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 23:00:34
Myp3ik
Например управление передается из бутлодера.

Re: STM32 новичку в ARM что к чему

Добавлено: Вс сен 23, 2018 23:54:09
a5021
Если основная прошивка стартует с перекрученными черти как регистрами бутлоадером, то это плохой, негодный бутлоадер. Но даже в этом крайнем случае очень сложно объяснить необходимость устанавливать бит HSION дважды подряд.

Re: STM32 новичку в ARM что к чему

Добавлено: Пн сен 24, 2018 05:41:49
VladislavS
Результат работы процедуры инициализации не должен зависеть от предсостояния. Ошибочное, кривое или сбойное оно было - код должен работать. Вот как-то так.

Re: STM32 новичку в ARM что к чему

Добавлено: Пн сен 24, 2018 07:26:11
philosoraptor
[uquote="Мурик",url="/forum/viewtopic.php?p=3463445#p3463445"]
philosoraptor писал(а):А что-то типа var &= ~0xfffc его и вовсе в ступор введет. Причем объяснять ему, почему не var &= 0x0003
Разве не одно и тоже?[/uquote]
А вы попробуйте сделать и так и эдак, и проверьте результат.

Добавлено after 8 minutes 33 seconds:
[uquote="a5021",url="/forum/viewtopic.php?p=3463460#p3463460"]

Код: Выделить всё

RCC->CR |= (uint32_t)0x00000001U;
[/uquote]

Вот же он, ярчайший пример быдлокодинга и незнания азов. Сферический в вакууме. Битмаски? Не, не слыхали. И ведь индусы искренне верят, что приведение типов и/или добавление магического U заставят компайлер считать нули перед единицей.

Re: STM32 новичку в ARM что к чему

Добавлено: Пн сен 24, 2018 09:01:31
a5021
[uquote="VladislavS",url="/forum/viewtopic.php?p=3463598#p3463598"]Результат работы процедуры инициализации не должен зависеть от предсостояния. Ошибочное, кривое или сбойное оно было - код должен работать. Вот как-то так.[/uquote]
Не, "как-то так" не пойдет. Фантазмы должны быть ошеломительными, чтобы пресекать всякие вопросы и оправдывать любую белиберду.

Типичный сценарий разработки всегда включает появление из неоткуда кривейшего и горбатейшего загрузчика неизвестных свойств, чью врожденную убогость блестяще исправляет гениальнейший код из под индусов. Ограниченной дееспособности пользователь куба, страдая когнитивными расстройствами всех видов, не в состоянии понять ни байта ни в чем и только неизвестный индийский гений обширно подстелил соломки во всех темных уголках автоматически генерируемого кода, чтобы несчастный не убился насмерть в первую же секунду.

Ага. Все так обычно и бывает.