Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Вс сен 23, 2018 15:28:10

Продуктивность ярко видна по форумам: все форумы просто заполнены стонами пользователей всяких калокубов: "нашёл в нете это. прикостылил к себе, что-то понатыкал там и там - не работает! :(( перетыкал по-другому - опять не работает! :((( спасите-помогите - куда ещё потыкать?? - неделю уже бьюсь, а никак не получается! :(((".
И практически ни одного вопроса от тех, кто читает мануалы и разбирается сам без всяких либ.
Это очень показательно. 8)

И сделать кое-как, по-быстрому не разбираясь - это значит - переделывать потом и ещё и ещё. И в результате потратить много больше времени, чем если прочитать доки и сделать сразу нормально. Так что если важно время и оно ценно - то никаких калокубов однозначно!

IMHO вы съезжаете с конкретного примера на разговоры за жизнь. У меня не было проблем с кубом. И изучение его исходников начинать програмирование с чтения RM желания не прибавило. За тех кого вы видели на форумах отвечать не могу, т.к. делюсь собственным опытом.

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

Вс сен 23, 2018 15:37:01

pvit, мы все здесь наблюдали ваше "не было проблем" вы кого сейчас лечите?

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

Вс сен 23, 2018 15:41:46

Посмотрел что там сейчас куб генерит:
Первым делом 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

Код:
void SystemClock_Config(void)
{

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);

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

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

Вс сен 23, 2018 18:30:52

Конечно сомневаются. Потому что MODIFY_REG изменяет лишь один бит регистра.

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

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

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

Вс сен 23, 2018 19:37:29

WiseLord, правильно что сомневаетесь , это начало на пути к просветлению.

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

Вс сен 23, 2018 20:03:05

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


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

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

Вс сен 23, 2018 20:13:01

philosoraptor, ты только что обгадился по полной и все из-за абсолютной невнимательности...

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

Вс сен 23, 2018 20:38:09

Есть стандартные файлы кода запуска. В файлах есть комменты обьясняющие че по чем зачем и почему. О чем базар?

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

Вс сен 23, 2018 21:10:25

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

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

Вс сен 23, 2018 21:19:36

Мурик писал(а):Разве не одно и тоже?
ну как бы для 32-битной платформы не одно...

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

Вс сен 23, 2018 21:27:29

Тип переменных нам неизвестен. Может он uint16_t.

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

Вс сен 23, 2018 21:36:51

Это пять! Они сами сомневаются что смогли изменить один регистр?

Это писали особо недоверчивые индусы. Сомневаться им приходится во всем, включая даже то, что регистры непосредственно после подачи питания находятся в их дефолтных состояниях.
Вот кусок стартапа, функции, которая вызывается до 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

Вообще, можно придумать ситуации когда прошивка стартует с недефолтными регистрами.

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

Вс сен 23, 2018 21:58:01

Например?

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

Вс сен 23, 2018 23:00:34

Например управление передается из бутлодера.

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

Вс сен 23, 2018 23:54:09

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

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

Пн сен 24, 2018 05:41:49

Результат работы процедуры инициализации не должен зависеть от предсостояния. Ошибочное, кривое или сбойное оно было - код должен работать. Вот как-то так.

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

Пн сен 24, 2018 07:26:11

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

А вы попробуйте сделать и так и эдак, и проверьте результат.

Добавлено after 8 minutes 33 seconds:
Код:
RCC->CR |= (uint32_t)0x00000001U;


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

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

Пн сен 24, 2018 09:01:31

Результат работы процедуры инициализации не должен зависеть от предсостояния. Ошибочное, кривое или сбойное оно было - код должен работать. Вот как-то так.

Не, "как-то так" не пойдет. Фантазмы должны быть ошеломительными, чтобы пресекать всякие вопросы и оправдывать любую белиберду.

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

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