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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

dosikus писал(а):С помощью головы и рук, без SPL и калокуба
Тогда ничего удивительного! Поэтому и занимает мало места! Я в свое время на Тини2313 чудеса функционала творил (на асме :)) ). Но не везде такой подход приемлем.
Мурик писал(а):Но в данном случае речь шла об оптимизации
А еще, насколько ущербен HAL, SPL И все такое)
С одной стороны, понятно что с технической точки зрения лучше всего можно написать только "с помощью головы и рук". С другой стороны (к сожалению), в последнее время все большее значение приобретает скорость разработки и получения готового продукта (часто в ущерб качеству). Вот я и пытаюсь выяснить где что уместно и как найти компромисс. Может этот HAL как-то настроить можно, что он будет давать вполне приемлемый код? SPL, как я понял, вообще умер (с точки зрения самого ST)?
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

aam писал(а): Но не везде такой подход приемлем.

...
Вот я и пытаюсь выяснить где что уместно и как найти компромисс. Может этот HAL как-то настроить можно, что он будет давать вполне приемлемый код? SPL, как я понял, вообще умер (с точки зрения самого ST)?
Такой подход приемлем в любом МК, знание железа просто необходимо, это не PC .
А калокуб с SPL для лентяев, любителей ардуньи и барсиков...
Мурик писал(а): Но в данном случае речь шла об оптимизации, а не том из чего состоит код. :)
Офигительно, сперва накидать д***ца в виде кало_кода затем его оптимизировать. Самому-то не смешно??? :))) :)))
Последний раз редактировалось dosikus Пн ноя 07, 2016 14:20:04, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

aam писал(а):А еще, насколько ущербен HAL, SPL
Думаю нет большой разницы займет код 10 или 20% памяти. Все равно свободного места больше чем достаточно. Другое дело что HAL и SPL снижают порог вхождения при изучении МК и улучшают переносимость кода.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

И дело тут даже не в размере, хотя кал и здесь позади планеты всей.
Функции калокуба устроены так что работает через ж, даже там где есть красивые аппаратные решения.
Так что не тешь себя , не знаешь железа и калокуб не поможет.
А порог вхождение и переносимость это сказки для ардуинщиков...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

Возьмем конкретный пример. Нужно запустить USB в МК. Скажи сколько времени понадобится на разборки с USB с нуля и написание кода? :facepalm: Но ведь можно по быстрому мышкотыканьем получить нужный код из куба. :)
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

Alexey_N писал(а):Такая проблема, компилирую fasmarm'ом такой код под F030:

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

        push    {lr}
        ldr     r1, [_stk_tick]
        ldr     r0, [r1]
        tst     r0, r0
        beq     .continue
        subs    r0, 1
        str     r0, [r1]
    .continue:
        pop     {pc}
Получаю ошибку:

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

include\systick.inc [42]:
        beq     .continue
error: Requires CPU capability 7M, use directive "processor" to select.
Фасм не видит абсолютную метку (далеко наверное), поскольку .continue это относительная метка. Может быть ближайшая абсолютная метка не выравнена по 2 байтам. Лучше сделать так:

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

align 2
procedure_name:
        push    {lr}
        ldr     r1, [_stk_tick]
        ldr     r0, [r1]
        tst     r0, r0
        beq     .continue
        subs    r0, 1
        str     r0, [r1]
    .continue:
        pop     {pc}
или так:

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

align 2
procedure_name:
        push    {lr}
        ldr     r1, [_stk_tick]
        ldr     r0, [r1]
        tst     r0, r0
        beq     @f
        subs    r0, 1
        str     r0, [r1]
    @@:
        pop     {pc}
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Мурик, на USB есть уже решения без твоих г.кубиков , умей искать...
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

Если речь про STM32 USB-FS то она заточена под дискавери и нужно много чего с нее выпиливать.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

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

Сообщение Alexey_N »

2 Andrew Martin
Пробовал разное выравнивание (2, 4), разные имена (name, @@) - все равно та же ошибка. Команды b, bl компилируются нормально, проблема именно с условной версией bxx label, не пойму, что не так ...
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

dosikus писал(а):Речь об этом http://radiokot.ru/forum/viewtopic.php?f=59&t=130816
Что и требовалось доказать. Сколько времени они разбираются с USB и насколько продвинулись? В кубе можно получить результат за несколько минут.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

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

Сообщение Alexey_N »

2 Andrew Martin
Проблема решилась и оказалась совсем в другом: далеко находилась сама эта процедура от ее упоминания, т.е.:

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

dw      _sti_handler + 1
...
тут было много байт
...
        align   4
_sti_handler:
        push    {lr}
        ldr     r1, [_stk_tick]
        ldr     r0, [r1]
        tst     r0, r0
        beq     .continue
        subs    r0, 1
        str     r0, [r1]
    .continue:
        pop     {pc}
Но почему-то фасм докопался до другой метки ... Какой предел расстояния в таком случае?
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Как-то мутно в STM32 выбор ИОН для АЦП реализован. Смотрю примеры - там выбирают несколько каналов и канал 17, на котором VREFINT. А еще включают сам VREFINT.
Мне надо использовать только один канал (0) и хочу использовать VREFINT.
Так будет правильно?

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

ADC->CCR|= ADC_CCR_VREFEN;
ADC1->CHSELR|= ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL17;
Мурик писал(а):HAL и SPL снижают порог вхождения при изучении МК
Если так начинать учить МК, конечно быстрее получится заморгать светодиодиком, но архитектуру проца так не изучить, железо не прочувствовать. Не будет понимания того, что происходит внутри МК. Так и до ардуньи докатиться недолго.
Мурик писал(а):улучшают переносимость кода
А вот это несомненный плюс. Как минимум потому, что многие куски кода можно будет заимствовать у самого себя особо не загоняясь над адаптацией под конкретный МК. Неговоря уже о случае, когда разрабатывается линейка устройств на разных МК со схожими функциями.
Мурик писал(а):Думаю нет большой разницы займет код 10 или 20% памяти.
Зависит от конкретного случая. Когда в последний момент прошивка перестает влезать в проц начинаются всякие танцы с бубном. Да и вообще полезно иметь запас на случай дополнения устройства новыми функциями.
Мурик писал(а):сколько времени понадобится на разборки с USB с нуля и написание кода? :facepalm:
Зато наступит полное понимание того, как работает USB :) Хотя если надо этим заняться на работе, то тут конечно будет не до глубокого познания истины.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

aam писал(а):Зато наступит полное понимание того, как работает USB
Потратить несколько месяцев, а может и лет на изучение USB, написание кода для STM это по моему уже слишком...
aam писал(а):но архитектуру проца так не изучить, железо не прочувствовать
Этим нужно заниматься в свободное время, а когда требуется разработать устройство и нет много времени на разборки с документацией, тогда SPL самое то. В STM32 минимальный объем flash - 32 КБ. Это не тинька или PIC с 1 КБ где действительно нужно экономить каждый байт.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Мурик, что ты уперся в экономию памяти? Тебе про периферию и работу с ней говорят. Не нужны для этого калокубы и спл. Займись изучением документации а не тыканьем в калокубах..
Уже предостаточно примеров , когда Нубы соблазнившись этим самым вашим "порогом вхождения", натыкавшись и нахрена не поняв вопят - помогите.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

dosikus писал(а):Уже предостаточно примеров , когда Нубы соблазнившись этим самым вашим "порогом вхождения", натыкавшись и нахрена не поняв вопят - помогите.
На AVR нет калокубов, пишут на С обращаясь напрямую к регистрам, как ты любишь, многие еще и ассм знают, но все равно у новичков куча проблем с простейшими программами, при том, что и периферия там простейшая. Если бы для STM32 не было высокоуровневых библиотек, то даже просто поморгать светодиодом смог бы далеко не каждый и они бы с этой своей проблемой шли на форум, где такие как ты обзывали бы их ничего не понимающими нубами :)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Reflector, давай сначала определимся -какие нубы.
Я считаю, что лезть нахрапом в арм дохлое дело.
Надо хотя бы знать базу электроники, кодописательства и уметь читать документацию.
А тем кто и изучать ничего не хочет , ни калокубы и ни какие визуальные тыкалки не помогут.
А не знаю твой ли ник на изиэлектроникс или как, но давеча появилось там чудо - "ни хАчу читать, помогите" , и что? Помог ему калокуб с его низкоуровневым вхождение?
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

Alexey_N писал(а): Но почему-то фасм докопался до другой метки ... Какой предел расстояния в таком случае?
Впервые вижу такое поведение, лично не сталкивался. Основная масса проблем с метками у меня было из-за ненадлежащего выравнивания либо из-за большой дистанции, и все претензии фасма были по существу. Попробуйте проверить ещё раз имена меток.
Вот содержимое моего стартапа:
Спойлер;Startup

_top_of_stack = SRAM_BASE+SRAM_SIZE


;Vector table
_vectors:
dw _top_of_stack ;initial stack pointer
vector _reset_handler ;reset handler
vector _blink ;NMI
vector _blink ;HardFault
vector _default_handler
vector _default_handler
vector _default_handler
vector _default_handler
vector _default_handler
vector _default_handler
vector _default_handler
vector _default_handler ;SVCall
vector _default_handler
vector _default_handler
vector _default_handler ;PendSV
vector _default_handler ;SysTick
vector _default_handler ;WWDG
vector _default_handler ;PVD_VDDIO2
vector _default_handler ;RTC
vector _default_handler ;FLASH
vector _default_handler ;RCC_CRS
vector _default_handler ;EXTI0_1
vector _default_handler ;EXTI2_3
vector _default_handler ;EXTI4_15
vector _default_handler ;TSC
vector _default_handler ;DMA_CH1
vector _default_handler ;DMA_CH2_3/DMA2_CH1_2
vector _default_handler ;DMA_CH4_5_6_7/DMA2_CH3_4_5
vector _default_handler ;ADC_COMP
vector _default_handler ;TIM1_BRK_UP/TRG_COM
vector _default_handler ;TIM1_CC
vector _default_handler ;TIM2
vector _default_handler ;TIM3
vector _default_handler ;TIM6_DAC
vector _default_handler ;TIM7
vector _default_handler ;TIM14
vector _default_handler ;TIM15
vector _default_handler ;TIM16
vector _default_handler ;TIM17
vector _default_handler ;I2C1
vector _default_handler ;I2C2
vector _default_handler ;SPI1
vector _default_handler ;SPI2
vector _default_handler ;USART1
vector _default_handler ;USART2
vector _default_handler ;USART3_4_5_6_7_8
vector _default_handler ;CEC_CAN
vector _default_handler ;USB

;Faults handlers

;Blink on PA3 for STM32F0F4P6

align 2

LED_PIN = 3 ;PA3
BLINK_FCLK = 28 ;system clock in MHz
BLINK_DELAY = 1000000 ;time in uS

_blink:
;Enable peripheral clock for GPIOA
ldr r0,[.rcc_base]
virtual at r0
.rcc RCC_TypeDef
end virtual
ldr r2,[.rcc.AHBENR]
ldbit r1,RCC_AHBENR_GPIOAEN
orrs r2,r1
str r2,[.rcc.AHBENR]
ldr r0,[.gpioa_base]
virtual at r0
.gpioa GPIO_TypeDef ;GPIO structure
end virtual
;Set LED_PIN to output
ldr r2,[.gpioa.MODER]
movs r1,11b
lsls r1,r1,2*LED_PIN
bics r2,r1
movs r1,01b
lsls r1,r1,2*LED_PIN
orrs r2,r1
str r2,[.gpioa.MODER]
;Set speed to high
ldr r2,[.gpioa.OSPEEDR]
movs r1,11b
lsls r1,r1,2*LED_PIN
orrs r2,r1
str r2,[.gpioa.OSPEEDR]
.blink_loop:
movs r1,1 ;set bit
lsls r1,r1,LED_PIN
str r1,[.gpioa.BSRR]
ldr r1,[.delay]
@@:
subs r1,1
bne @r
movs r1,1 ;reset bit
lsls r1,r1,LED_PIN+16
str r1,[.gpioa.BSRR]
ldr r1,[.delay]
@@:
subs r1,1
bne @r
b .blink_loop

align 4
.gpioa_base dw GPIOA_BASE
.rcc_base dw RCC_BASE
.delay dw BLINK_DELAY*BLINK_FCLK/4
align 2

_default_handler:
bx lr


_reset_handler:
cpsid iflags_i ;disable interrupts
ldr r0,[.start_code]
bx r0 ;jump to main
align 4
.start_code dw main+1
align 2


От

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

.start_code	dw main+1
до метки main аж около 4К кода всяких библиотек. Проблем нет.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Добрый вечер. Можно ли использовать Analog Watchdog только для определенных каналов?
У меня схема имеет 10 ограничителей тока через АЦП (через низкоомный резистор) и одну крутилку (тобиш потенциометр). Ограничение по току на всех 10-ти каналов одинаковое, поэтому использовать Watchdog - отличный вариант (как только напряжение выйдет за рамки - срабатывает прерывание и нагрузка отключается), а вот потенциометр в этой схеме будет при определенных значениях постоянно вызывать это прерывание, что ни есть хорошо с точки зрения производительности. Можно ли как-то оградить один канал от влияния на сторожевой таймер (может с группами как-то можно поиграться)?
Камень STM32F103.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

dosikus писал(а):Reflector, давай сначала определимся -какие нубы.
А тем кто и изучать ничего не хочет , ни калокубы и ни какие визуальные тыкалки не помогут.
А не знаю твой ли ник на изиэлектроникс или как, но давеча появилось там чудо - "ни хАчу читать, помогите" , и что? Помог ему калокуб с его низкоуровневым вхождение?
Давай сразу оставим в покое людей, которые в принципе не хотят ничего изучать. А ник да, мой.:)
Я считаю, что лезть нахрапом в арм дохлое дело.
Надо хотя бы знать базу электроники, кодописательства и уметь читать документацию.
Посмотри на это с другой стороны... Люди переходят с AVR на STM32, оснований для этого предостаточно, но у них сразу скорость значительно больше, памяти значительно больше, копеешный отладчик, т.е. он теперь в принципе есть, а от них еще требуют красивых аппаратных решений, чтоб прям все работало через DMA, а проц ничего не делал, при этом нельзя юзать HAL, т.к. с ним такая красота не получится :) А может оно им [пока] не нужно. Может на первых порах использования STM32 в качестве быстрого, вместительного, но простого AVR более чем достаточно... Кому будет нужно, тот со временем сам придет к другим решениям. Или не придет, этому я тоже не особо расстроюсь :)
Ответить

Вернуться в «ARM»