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

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 01:01:28

ПростоНуб, ассемблер - это язык высокого уровня, "специалист" я программировал тумблерами, вводя двоичный код.:)

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 01:27:58

linkov1959, сэр прямо извращенец. i8080 и Z80, когда еще не было ассеблера для ZX Spectrum, я программировал все равно на ассемблере, просто сделав себе макробиблиотеку кроссассемблера для ассемблера ЕС ЭВМ. Выводил на перфоленту, а с нее уже самодельным считывателем и ручным протягиванием перфоленты через него - прошивал РФ-ки.
Вот на EC 1033 тумблерами простейшие канальные программы вводил. Но там без вариантов было. Если система не грузится из-за зависшей дисковой стойки, то иначе ее не протолкнуть. А по питанию передергивать - себе дороже. Включение ЕС 1033 - это всегда была целая история, причем, нередко, с заменой сдохших при включении ТЭЗов. Потому месяцами не выключали ее. Когда появились ЕС-1035, ЕС-1045 и ЕС-1061 - это было уже счастье. У них уже был сервисный процессор, с которым можно было общаться через Consul или даже дисплей.

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 08:14:05

ПростоНуб писал(а):в IT, если даже всего год не учиться ничему новому, квалификацию теряешь заметно
так я и потерял... профессионально (т.е. по должности) я программировал (недолго) еще в те времена, когда написание программ на ассемблере для MS DOS было вполне естественным... а потом увы.

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 09:02:23

Мне вот ночью приснилось, что при выполнении кода из RAM, например, при отладке, сегмент данных находится сразу на своём месте
Код:
   .data :
   {
      . = ALIGN(4);
      _sdata = .;
      *(.data)
      *(.data*)
      . = ALIGN(4);
      _edata = .;
   } > SRAM
и его не надо копировать в стартапе. То есть, правильнее в стартапе вот так
Код:
#ifndef __DEBUG_SRAM__   
  extern uint32_t _sidata[], _sdata[], _edata[];
  for (volatile uint32_t *pSrc = _sidata, *pDst = _sdata; pDst != _edata; *pDst ++= *pSrc++) ;
#endif

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 20:40:28

ПростоНуб, А ещё, извращенцы стирали РФки сваркой!

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 20:51:57

linkov1959, тогда уж солнышком. Но некоторые пытались это делать через оконное стекло, забыв, что оно ультрафиолет не пропускает )))
Но это реально изврат, так как люминисцентные УФ лампы тогда были вполне доступны в продаже. Великоваты, конечно, так как предназначались для загара или в медицинских целях. Но вполне пригодны для стирания РФ-ок.

Re: Stm32 с чего начать изучение...

Ср янв 26, 2022 22:21:38

ПростоНуб писал(а):тогда уж солнышком.
Пробовал. Это долго. Понадобилось около 2-ух месяцев нахождения на солнце.
Лучше уж
linkov1959 писал(а):сваркой
:))) :)))

Re: Stm32 с чего начать изучение...

Чт янв 27, 2022 05:26:05

Мурик, в полярную ночь что ли пробовали или сквозь оконное стекло? В ясную погоду под летним крымским солнышком большинство за день стирались, хотя изредка попадались экземпляры, которые приходилось неделю держать до сплошного 0xFF.

P.S. На Роман-коше стирать не пробовал. Подозреваю, что на высоте в полтора километра за несколько часов бы все стерлись )

Re: Stm32 с чего начать изучение...

Чт янв 27, 2022 09:15:26

VladislavS, ты что ты дал, там стартап какой-то скудный
Код:
/*----------
  Reset Handler called on controller reset
 *----------*/
void Reset_Handler(void)
{
  SystemInit();                             /* CMSIS System Initialization */
  __PROGRAM_START();                        /* Enter PreMain (C library entry point) */
}
не говоря уж про SystemInit(). И где само копирование? Самому ручками прописывать?
VladislavS писал(а):что при выполнении кода из RAM
а я то думал, но по чему из ram толком ни чего не работает.

Re: Stm32 с чего начать изучение...

Чт янв 27, 2022 10:34:18

а я то думал, но по чему из ram толком ни чего не работает.
Вывод неверный. Копирование данных самих в себя только время лишнее занимает и ничего в работе прошивки не меняет.

Re: Stm32 с чего начать изучение...

Чт янв 27, 2022 12:50:23

Dimon456 писал(а):И где само копирование? Самому ручками прописывать?

Видимо, внутри __PROGRAM_START(). Это ведь Enter PreMain (C library entry point). Там создаются и инициализируются начальными значениями глобальные и локальные статические данные в RAM-памяти.

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 19:36:27

Здравствуйте, друзья!
Пересаживаюсь с АВР на СТМ, изучаю, вот в голову залезла бестолковая идея: сделать функцию расчёта частоты работы МК.
По сути - всё изветно: кварц, все прескалеры, но... Идея сделать расчёт универсальным, а не просто взять известные цифры и перемножить. То есть, сделать функцию расчёта по параметрам, заданым в SystemClock_Config();
Но как вытянуть численное значение из строки RCC_OscInitStruct.PLL.PLLN = 168; ?
И, в продолжение, есть параметры, который описаны так: RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;, тут вопрос как их запихнуть в IF для сравнения и последующего приравнивания некой переменной числа.
Как знаю - попробовал, не работает. Прошу помощи.

Заранее спасибо и простите мою неграмотность :)

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 19:49:24

Все делители в конце концов ложатся в регистры RCC. Оттуда их можно читать. Только пустое это. Зачем вычислять то что вы сами же и задаёта?

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 20:23:40

делать функцию расчёта частоты работы МК.

Она уже есть! Найдите поиском ф-цию SystemCoreClockUpdate. Она входит в стандартную поставку и генерируется вместе с созданием проекта.
Эта функция обновляет глобальную переменную SystemCoreClock, которая может использоваться в выражениях для задания частотозависимых интервалов. Например при настройке таймера.
Необходимость в этой функции может возникать при неявном задании частоты МК. Например, в L-серии при выходе из стоп-режимов МК может запускаться на иной частоте, чем при нормальном старте по POR.

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 20:52:36

делать функцию расчёта частоты работы МК.

Она уже есть! Найдите поиском ф-цию SystemCoreClockUpdate. Она входит в стандартную поставку и генерируется вместе с созданием проекта.
Эта функция обновляет глобальную переменную SystemCoreClock, которая может использоваться в выражениях для задания частотозависимых интервалов. Например при настройке таймера.
Необходимость в этой функции может возникать при неявном задании частоты МК. Например, в L-серии при выходе из стоп-режимов МК может запускаться на иной частоте, чем при нормальном старте по POR.
Большое спаси за наводку! Действительно, там, в SystemCoreClockUpdate происходит нужный мне расчёт. Но... Если я ссылаюсь на эту переменную (sysclockfreq) в основной программе - компилятор ругается на необьявленность (делаю всё в CubeIDE). Так же и с другими переменными из этой функции. Ещё есть функция uint32_t HAL_RCC_GetHCLKFreq(void). С ней та же беда. Что-то не пойму, как заставить выполняться эти функции... Файлы прикреплены к проекту...


VladislavS писал(а):Все делители в конце концов ложатся в регистры RCC. Оттуда их можно читать. Только пустое это. Зачем вычислять то что вы сами же и задаёта?
Всё в виде научного эксперимента :) В рамках изучения STM32 =)

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 21:12:27

Эта переменная объявляется как extern в одноименном заголовочном файле (system_stm32.... .h) и по идее, этот файл должен быть подключен при геренации проекта в CubeIDE.
В любом случае, вы можете объявить переменную вручную через extern в нужном месте:
extern uint32_t SystemCoreClock;

Re: Stm32 с чего начать изучение...

Пт апр 22, 2022 21:18:28

Эта переменная объявляется как extern в одноименном заголовочном файле (system_stm32.... .h) и по идее, этот файл должен быть подключен при геренации проекта в CubeIDE.
В любом случае, вы можете объявить переменную вручную через extern в нужном месте:
extern uint32_t SystemCoreClock;

Большое спасибо за советы, друзья! Что-то получилось) Ещё не понял что) Странные данные на экран вывел (31232 зайцев). Ошибку нашёл, двигаюсь дальше! :beer:

UPD: всё, вывел правильно :) 168 МГц =)

Re: Stm32 с чего начать изучение...

Вс май 01, 2022 21:45:21

Всем привет!
4 дня впервые потратил на приобщение к F030F4P6, из-за 12-битного ADC.
Проект собираю в STM32CubeIDE 1.9.0. Исходники моего говнотворения прилагаю.
Собственно, мой вопрос. В avr-gcc я мог легко оформить кусок кода в виде:
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
...
}
а здесь (gcc-arm-none-eabi) не понятно, по хидерам искал, ничего дельного не нашел.
Как включить кусок кода в атомик-блок?
Или, какие-то другие механизмы задействуются?
И, буду рад к критическим коментариям к приложенной писанине.

main.h

main.c
Вложения
STM32F030 clean USART DMA ADC.rar
(81.56 KiB) Скачиваний: 62

Re: Stm32 с чего начать изучение...

Пн май 02, 2022 10:37:12

Как включить кусок кода в атомик-блок?
Вариантов много. Самое простое
Код:
  uint32_t tmp = __get_PRIMASK();
  __disable_irq();
  // код
  __set_PRIMASK(tmp);

Re: Stm32 с чего начать изучение...

Пн май 02, 2022 10:55:14

Вот это портянка... Вы лучше на словах скажите, куда хотите впендюрить атомарность и почему, соппсна, оная вам нужна для АЦП?
Атомарность - она для чего нужна: если в обработчике прерывания вы обращаетесь к тому же ресурсу, что и и в общем коде. Или при работе с RTOS. Но RTOS предоставляет свои алгоритмы защиты. Без RTOS можно временно отключить вектор прерывания (через функции NVIC), в котором происходит параллельное действие. Или временно полностью запертить прерывания.
Ответить