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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3907376#p3907376"]Это абсолютно разные языки. Ничего общего у них уже давным-давно нет. Разве что g++ умеет собирать сишные файлы.[/uquote]
В языке D есть флаг компилятора -betterC, он отключает использование классов, исключений и т.д., при этом оставляя доступными множество других улучшений. Точно такой-же флаг можно было бы использовать для С++, просто особой необходимости нет, потому что проблема с излишним функционалом языка исключительно в головах тех кто, как я уже говорил, сам себя ограничить неким подмножеством языка не может.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Reflector",url="/forum/viewtopic.php?p=3907449#p3907449"]потому что проблема с излишним функционалом языка исключительно в головах тех кто, как я уже говорил, сам себя ограничить неким подмножеством языка не может.[/uquote]Как увидят у файла расширение .cpp так и давай перегружать классами да вариативными шаблонами перемежая концептами и оператором <=> . :write:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3907378#p3907378"]Eddy_Em, этот С++ код тоже совершенно нечитабельный?[/uquote]
Да, т.к. непонятно, что там за апостроф!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=3907416#p3907416"]что этот апостроф означает - я не знаю, и знать не желаю[/uquote]
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3907472#p3907472"]Да, т.к. непонятно, что там за апостроф![/uquote]
Господа, вы сделали мой вечер!!! :)))
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3907472#p3907472"]Да, т.к. непонятно, что там за апостроф![/uquote]
Это все мелочи, если вдруг будет принят N2522, это документ на 600 страниц со спецификацией общего С/C++ ядра, то монастыри по всему миру будут гарантированно переполнены :)
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Reflector, да плевать - все равно C99 будет поддерживаться. А большего мне и не надо!
А там, глядишь, наркоманы, которые сейчас С++ расхваливают, на какой-нибудь хипстерский раст перейдут. Школьники уже сейчас пхытон мучают... В общем, меньше будет извращенцев, покушающихся на С!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

А "учитель" сказал с89 наше всё. Кому верить?
СпойлерТам, кстати, бомбит непадецки :)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):и оператором <=>
смотрите: триграфы есть испокон века. диграфы так же никто не отменял. операторов из двух символов уже полно, теперь добавляется оператор из трех символов. если тренд построить, то вскоре большинство комбинаций из 2 и 3 символов станут зарезервированными... а там недолго и до ситуации, о которой я писал: любой случайный набор символов станет корректной записью какой-то конструкции языка.
чем это будет отличаться о брейнфака?
к чему приводить язык к уровню клинописи? неужели на самом деле проблема сравнений настолько велика, что вместо написания нескольких строк кода следует изменять стандарт языка, вводя очередной оператор?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

ARV, вы даже не подозреваете, насколько далеко обсуждение оператора <=> теме "Для новичка". Так что, оставьте свои фантазии, ничего общего даже близко не имеющие с реальностью, при себе.
Спойлерhttps://habr.com/ru/company/microsoft/blog/458242/
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):насколько далеко обсуждение оператора <=> теме "Для новичка"
но ведь не я его в тему "для новичка" привнес! почему же вы мне затыкаете рот?

а хабр я читал по этой теме (еще до того, как вы возбудились на мои слова), не буду озвучивать выводы, к которым я пришел :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=3907571#p3907571"]а хабр я читал по этой теме[/uquote]Если бы читали, то не писали бы вот эту глупость[uquote="ARV",url="/forum/viewtopic.php?p=3907552#p3907552"]что вместо написания нескольких строк кода следует изменять стандарт языка, вводя очередной оператор?![/uquote]
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

О минусах C++ пишут те кто его знать не знает, а о плюсах С++ пишут те кто знает и С и С++. Интересный диалог...
Иван Сусанин - первый полупроводник :solder:
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

И что интересного нашли?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32

Сообщение alex38779 »

Помогите оптимизировать код. Хочу получить задержки в ~0.3 и ~0.9мкс на пине 2 порта С. Допускается +- 0.15мкс
Контроллер stm32f100rbt6 частота 24 МГц

Переписываю код с стм8 на 32 битный, на стм8 делал подобное на асме, так же на частоте 24МГц.

Написал такой код на ассемблере, все это в цикле while. Пробую просто вкл и выкл пин.

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

	asm("ldr r2, =(0x42000000+(0x4001100c-0x40000000)*32+2*4)");
	asm("mov r1,#0");
	asm("str r1,  [r2]");
	asm("mov r1,#1");
	asm("str r1, [r2]");
В 1 строчке мы загружаем адрес PORTC_ODR_pin2 в регистр r2. Следующими строками загружаю 1 или 0 в регистр.

В итоге получаю картину
Изображение

Время в сост включенном 2,542мкс, время в выключенном состоянии - 0,25мкс.

Как мне оптимизировать этот код, что бы время во включенном состоянии было примерно = в выключенном.
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Шимить не проще?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32

Сообщение alex38779 »

[uquote="Reflector",url="/forum/viewtopic.php?p=3911985#p3911985"]Шимить не проще?[/uquote]

Нет, по сути делаю простой протокол для связи с одним устройством, и там нужны подобные задержки в 0,3 0,6 0,9 мкс и ресет в 80мкс
Контактная информация:
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

с регистрами напряг?
до цикла их загрузить нельзя?

на 329 стр. приводил пример компиляции Кейла, там ногодрыг регистром bsrr:
для записи и 0 и 1 используются два регистра (константа, адрес) значение формируется смещением.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32

Сообщение alex38779 »

[uquote="a797945",url="/forum/viewtopic.php?p=3912107#p3912107"]на 329 стр. приводил пример компиляции Кейла, там ногодрыг регистром bsrr:
для записи и 0 и 1 используются два регистра (константа, адрес) значение формируется смещением.[/uquote]

Спасибо. Кое что сдвинулось.

Сейчас мой код такой, может кому пригодится.
Порт С, регистр BSRR, вкл-выкл 2 пин

Настройка:

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

	asm("ldr r2, =0x40011010");
	asm("movs r0,#0x04");
	asm("mov.w r1,#0x40000");
Непосредственно включение и выключение пина

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

			asm("str r0, [r2]");
			asm("str r1, [r2]");
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Во-первых, эффективнее BSRR и BRR использовать.

Во-вторых, не страдайте ерундой, на Си всё сильно проще.

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

GPIOC->BSRR = GPIO_BSRR_BS2;
GPIOC->BRR = GPIO_BRR_BR2;
GPIOC->BSRR = GPIO_BSRR_BS2;
GPIOC->BRR = GPIO_BRR_BR2;

    LDR.N    R0,??main_0  ;; 0x40011010
    MOVS     R1,#+4

    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
А на С++ ещё проще

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

template<unsigned N, typename F>
__attribute__((always_inline)) inline void RepeatL(F f)
{
  if constexpr (N>0) {f(); RepeatL<N-1>(f);}
}

RepeatL<5>([]{ GPIOC->BSRR=GPIO_BSRR_BS2; GPIOC->BRR=GPIO_BRR_BR2; });

    LDR.N    R0,??main_0  ;; 0x40011010
    MOVS     R1,#+4

    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
    STR      R1,[R0, #+0]
    STR      R1,[R0, #+4]
Разбавить __NOP() по вкусу.

В-третьих, как вам уже говорили, PWM с DMA. STM32 WS2812B
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="alex38779",url="/forum/viewtopic.php?p=3911989#p3911989"][uquote="Reflector",url="/forum/viewtopic.php?p=3911985#p3911985"]Шимить не проще?[/uquote]

Нет, по сути делаю простой протокол для связи с одним устройством, и там нужны подобные задержки в 0,3 0,6 0,9 мкс и ресет в 80мкс[/uquote]

Тот случай когда человек не знает архитектуру микроконтроллера и пытается делать ногодрыгом управление светодиодами.
С++ здесь тоже не нужен.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Ответить

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