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

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

Чт ноя 17, 2022 18:29:12

VladislavS, прошивки отличаются, на asm
Спойлер
Код:
Program Size:               
      text      data       bss       dec       hex      filename
      5299      136      184      5619   15f3   rnd_f030.elf
ну и бинарники соответственно, на asm=5440 байт, на с=5432 байта, а если сравнивать по содержимому - то там полностью все отличается, кроме последней строки, она одинакова.

И опять же, в вашем варианте самая первая точка останова на SystemInit();, это когда отключен в debug run to main, то есть я не вижу где инициализируется оперативная память, сейчас это на каком нибудь массиве проверю.

Добавлено after 4 minutes 36 seconds:
Все увидел, вопрос отпадает, где это происходит.

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

Чт ноя 17, 2022 18:31:33

VladislavS, без понятия.
Печалька.

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

Чт ноя 17, 2022 18:33:15

VladislavS, а вот эта строчка, синим выделено, программа туда должна заходить.
СпойлерИзображение

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

Чт ноя 17, 2022 18:36:07

VladislavS, а вот эта строчка, синим выделено, программа туда должна заходить.
В твоём случае должна. Это инициализация глобальных (ненулевых) данных.
А вот при отладке из SRAM не должна. Так как инициализирующие данные и так уже в SRAM, зачем их копировать туда-сюда.
Последний раз редактировалось VladislavS Чт ноя 17, 2022 18:38:06, всего редактировалось 1 раз.

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

Чт ноя 17, 2022 18:37:53

Ну, тогда все ОК, работает. Можно мой код экспериментировать.

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

Чт ноя 17, 2022 18:54:39

COKPOWEHEU, это действительно найдено в первом попавшемся проекте для ARМ (приведённом тут чуть выше как пример). И степень "невникания" удивала.

Пожалуй, сочту это комплиментом. Вроде как вы не ожидали от меня такой халтуры.
Но вообще-то, не вижу смысла уделять стартапу слишком много внимания: он выполняется единственный раз при старте камня, и даже если там накручено говнокода, по большому счету это ни на чем не скажется. Лично я к ARM'у пришел "сверху", от готового шаблона, и лезть глубоко "вниз" надобности не было: работает и ладно.
А вот с RISC-V так не повезло: не нашел шаблона, который бы просто собрался и заработал, пришлось изучать ассемблер, линкер-скрипты и прочую ядерную магию. В процессе, разумеется, тоже изрядно накосячил. Первый проект на Си у меня собрался чуть больше двух лет назад, и только на прошлой неделе я выловил грубую ошибку в линкер-скрипте.
VladislavS писал(а):Не будет подобного в курсах - замечательно.

"Будет" это уже немного поздно: 80% уже выложено на всеобщее обозрение, можете сами проверить какие там косяки.
{звуки беспалевной агитации побыть бесплатным бета-тестером}

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

Чт ноя 17, 2022 21:25:13

VladislavS, встроить код несложно было
Спойлер
Код:
void __attribute__((naked, noreturn)) Reset_Handler()
{
#ifdef __DEBUG_SRAM__
  __set_MSP((uint32_t)&_estack);
#endif

  SystemInit();

  CRC_Config();

   char *ptr = (void*)RAMSTART;
   uint32_t seed=0;
   for(uint16_t i=0; i < (RAMEND-RAMSTART-1); i++){
      seed += CRC_32BitsCompute(ptr++);
   }

#ifndef __DEBUG_SRAM__
  extern uint32_t _sidata[], _sdata[], _edata[];
  for (volatile uint32_t *pSrc = _sidata, *pDst = _sdata; pDst != _edata; *pDst ++= *pSrc++) ;
#endif

  extern uint32_t _sbss[], _ebss[];
  for (volatile uint32_t *pDst = _sbss; pDst != _ebss; *pDst ++= 0) ; // Zero -> BSS

  srand(seed);

  main();
}
Одним словом, СПАСИБО.

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

Чт ноя 17, 2022 21:49:29

Чтобы сделать этот код независимым от тулчейна следеут поместить всё что до инициализации данных в SystemInit (она, вообще говоря, для этого и придумана), где-то спрятать seed на время инициализации данных (в какой-нибудь периферии) и использовать по назначению уже в main.

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

Чт ноя 17, 2022 21:58:38

SystemInit вот сюда перекидывается
Спойлер
Код:
void SystemInit1 (void)
{   
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

#if defined (STM32F0XX_MD) || defined (STM32F030X8)
  /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
  RCC->CFGR &= (uint32_t)0xF8FFB80C;
#else
  /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE, MCOSEL[2:0], MCOPRE[2:0] and PLLNODIV bits */
  RCC->CFGR &= (uint32_t)0x08FFB80C;
#endif /* STM32F0XX_MD or STM32F030X8 */
 
  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
  RCC->CFGR &= (uint32_t)0xFFC0FFFF;

  /* Reset PREDIV1[3:0] bits */
  RCC->CFGR2 &= (uint32_t)0xFFFFFFF0;

  /* Reset USARTSW[1:0], I2CSW, CECSW and ADCSW bits */
  RCC->CFGR3 &= (uint32_t)0xFFFFFEAC;

  /* Reset HSI14 bit */
  RCC->CR2 &= (uint32_t)0xFFFFFFFE;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

  /* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */
  SetSysClock();
}
VladislavS писал(а):где-то спрятать seed на время инициализации данных
а где его спрятать?

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

Пт ноя 18, 2022 00:15:36

а где его спрятать?
В каждом чипе можно найти либо специально предназначенные для хранения данных регистры, либо неиспользуемые регистры периферии, способные это делать. Проявите изобретательность, почитайте RM :)

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

Пт ноя 18, 2022 20:08:26

Backup, backup SRAM

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

Сб ноя 19, 2022 10:10:47

VladislavS, я не знал что SystemInit можно было перенести в первый вызов, то есть сделать так
Спойлер
Код:
Reset_Handler:
  ldr   r0, =_eram
  mov   sp, r0          /* set stack pointer */

/* Call the clock system intitialization function.*/
    bl  SystemInit
   
/* Copy the data segment initializers from flash to SRAM */
  movs r1, #0
  b LoopCopyDataInit
  .
  .
  .
а потом в SystemInit, как вы пишите, поместить мой код, в seed сохранить, к примеру, в 32-битном регистре таймера ТИМ2 (вроде он 32-битный).

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

Сб ноя 19, 2022 13:15:05

я не знал что SystemInit можно было перенести в первый вызов
Не только можно, но и нужно. Именно там его место.

seed сохранить, к примеру, в 32-битном регистре таймера ТИМ2 (вроде он 32-битный).
Ну можете же, если захотите :)

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

Сб ноя 19, 2022 14:25:35

Второй раз повторяю - регистры Backup, память Buckap SRAM.
Ну и пусть топикстартер расскажет (чисто для интереса), зачем же ему понадобилась генерация случайного числа? Нужно ли одно число получить или несколько, нужно ли их получить один раз при старте или получать их периодически во время работы?

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

Сб ноя 19, 2022 16:08:04

MLX90640 писал(а):Второй раз повторяю - регистры Backup, память Buckap SRAM.
И я еще раз повторяю - stm32f030f4p6, или может в этом чипе еще что-то есть, чего я не знаю?.
Нужно что бы при старте программы получалось всегда новое число (всего один раз сканирование ОЗУ, при старте), и нужно периодически во время работы. А АЦП не охота задействовать.

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

Сб ноя 19, 2022 16:18:12

А АЦП не охота

Очень убедительно... :))) :))) :)))
Заниматься масштабной движухой с памятью хочется, а получить практически true Random - нет... :tea: У всех свои извращения...

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

Сб ноя 19, 2022 16:47:25

MLX90640 писал(а):Второй раз повторяю - регистры Backup, память Buckap SRAM.
И я еще раз повторяю - stm32f030f4p6, или может в этом чипе еще что-то есть, чего я не знаю?.
Ещё в DMA-контроллере обычно много 32-битных регистров простаивает. А от того что он десять раз повторит в f030 backup не появится.

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

Вт дек 27, 2022 17:07:58

Котаны, натыкайте меня мордой чего покурить на тему fasmarm желательно с примерами... Особенно возбуждает дрыганье ножкой, работа с таймерами, ADC, извлечение квадратного корня в целых числах
targeet device STM32F030

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

Чт дек 29, 2022 16:56:56

Такой дурацкий вопрос: а будет ли код, написанный под STM32F303, работать на F302? Попутали маленько и не те заказали…
Вроде в апоуте "migrating between F303 and F302" написано, что все должно быть ОК (а вот обратно может не получиться, т.к. у F302, как ни странно, функционал пожирней).

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

Чт дек 29, 2022 17:22:02

Заменить стартап, линкерскрипт и заголовочный файл контроллера. Проверить систему тактирования. Если после этого пересоберётся, то скорее всего и заработает.
Ответить