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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3901976#p3901976"]Дело не в Си, а в байтовом доступе к порту. И он даёт реальную экономию.[/uquote]Да это понятно и очевидно. Давно так делаю. И не только с регистрами установки/сброса сост.пинов, а с любыми IO-регистрами периферии, позволяющими байтовый доступ. Загрузка константы 0...255 в Cortex-M выгоднее, чем другие значения. И по размеру и по скорости.

Добавлено after 1 minute 8 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3901980#p3901980"]В чем экономия во флеше что ли?[/uquote]Экономия флеша ведёт к экономии тактов. В общем случае.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Oxford",url="/forum/viewtopic.php?p=3901980#p3901980"]В чем экономия во флеше что ли?[/uquote]Да. Меньше код. Быстрее считывается и соответственно выполняется.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Считывается одинаково. Выполняется одинаково. Повторяю нет разницы они 32 битные.
Но думать вы можете как угодно.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Oxford",url="/forum/viewtopic.php?p=3901980#p3901980"]MOV r1,#0x80000000
STR r1,[r0,#0x18]
LSRS r2,r1,#16
STR r2,[r0,#0x18]
STR r1,[r0,#0x18]

нет разницы байт или 32 бита. STM32 32 битные.[/uquote]
А то, что в примере VladislavS 4 команды, а у вас - 5 команд (для тех же действий) - конечно не заметили? И что у него все команды 2-байтовые, а у вас первая 4-байтная - тоже не заметили?? 8)
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Меня это абсолютно не волнует сколько там байт. пусть будет больше значит больше.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Oxford",url="/forum/viewtopic.php?p=3901986#p3901986"]Считывается одинаково. Выполняется одинаково.[/uquote]Ложь.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Oxford",url="/forum/viewtopic.php?p=3901990#p3901990"]Меня это абсолютно не волнует сколько там байт. пусть будет больше значит больше.[/uquote]Блин, ну вроде же конструктивно начинали обсуждение :( Могли бы дальше подумать как это на Си автоматизировать, а вы сразу в бочку.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Oxford",url="/forum/viewtopic.php?p=3901974#p3901974"]К сожалению, я понимаю что вы хотели сказать что С++ лучше Си, но увы на Си меньше расходов и проще.[/uquote]
При этом ты предлагаешь практически всегда использовать RTOS, даже когда простая пауза нужна, так что количество расходов больше зависит от того как пишешь, а не на чем :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="jcxz",url="/forum/viewtopic.php?p=3901979#p3901979"]Вроде бы очевидное решение, но почему-то ST не догадался так сделать. :dont_know:[/uquote]ST задействовал эту операцию под другую возможность. Она позволяет через BSRR одной операцией устанавливать значение в нужных битах порта в любое состояние.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

А то, что в примере VladislavS 4 команды, а у вас - 5 команд (для тех же действий) - конечно не заметили? И что у него все команды 2-байтовые, а у вас первая 4-байтная - тоже не заметили?? 8)
Вы то куда лезите. А кто это у нас там спрятал C++ класс? Ладно ребятишки дальше без меня считайте байты сидите между собой.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3901997#p3901997"]ST задействовал эту операцию под другую возможность. Она позволяет через BSRR одной операцией устанавливать значение в нужных битах порта в любое состояние.[/uquote]Не понял... :dont_know: Поясните? У BSRR есть ещё какой-то функционал кроме установки/сброса сост.пина?

Добавлено after 1 minute 43 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3901998#p3901998"]Вы то куда лезите. А кто это у нас там спрятал C++ класс? Ладно ребятишки дальше без меня считайте байты сидите между собой.[/uquote]Тут главное - ни за что не признавать свою неправоту, как бы очевидна она ни была. да ужжж...... :dont_know:
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Нету у фрискале никакого атомарного тоггле. Что по вашему означает атомарный тоггле?
Там регистр вывода OUT и регистр модификации OMR эквивалент BSRR

К тому же у XMC регистр OMR виртуальный 8- или 16-битная запись ведет себя как 32-битная запись, заполненная нулями.
Последний раз редактировалось Oxford Пн окт 05, 2020 11:58:32, всего редактировалось 1 раз.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Oxford",url="/forum/viewtopic.php?p=3902003#p3902003"]Нету у фрискале никакого атомарного тоггле.[/uquote]У фрискале - нет, у ST - нет, у Infineon - есть. Я про фрискале вроде и не говорил.... :dont_know:

[uquote="Oxford",url="/forum/viewtopic.php?p=3902003#p3902003"]Что по вашему означает атомарный тоггле?[/uquote]То, что и всегда - непрерываемый. Выполняющийся в одной команде.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Я инфенион и смотрю оговорился просто.
https://www.infineon.com/dgdl/Infineon- ... 44ccd35c20

Ну так OMR (инфенион) это и есть тоггле атомарный, что и BSRR, за один вызов переключит.

Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="jcxz",url="/forum/viewtopic.php?p=3902000#p3902000"]Не понял... :dont_know: Поясните? У BSRR есть ещё какой-то функционал кроме установки/сброса сост.пина?[/uquote]Смотрите. Есть у меня переменная X. Что в ней я не знаю. Но хочу её состояние вывести на ножки порта. Для простоты возьмём uint8_t X и сопоставим её ножкам PA2-PA9.

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

uint8_t x;
GPIOA->BSRR = (0xFF<<(2+16)) | (x<<2);
В принципе, ножки можно брать любые. В RESET_BIT пишем 1-цу, а в SET_BIT нужное значение. Так как SET имеет приоритет над RESET, то...

Добавлено after 1 minute 54 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3902006#p3902006"]Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?[/uquote]toggle это переключение состояния выхода на противоположное вне зависимости от текущего состояния.
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Oxford",url="/forum/viewtopic.php?p=3902006#p3902006"]Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?[/uquote]toggle - переключение из одного состояния (любого) в противоположное.

Добавлено after 1 minute 19 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3902013#p3902013"]toggle это переключение состояния выхода на противоположное вне зависимости от текущего состояния.[/uquote]Именно так.

[uquote="VladislavS",url="/forum/viewtopic.php?p=3902013#p3902013"]В принципе, ножки можно брать любые. В RESET_BIT пишем 1-цу, а в SET_BIT нужное значение. Так как SET имеет приоритет над RESET, то...[/uquote]Это нетрудно сделать и не используя возможность записи единиц в set и в reset одновременно:
GPIOA->BSRR = (x ^ 0xFF) << 2 + 16 | x << 2;
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Это дополнительные вычисления.
Мудрый кот
Сообщения: 1846
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3902027#p3902027"]Это дополнительные вычисления.[/uquote]Всего на одну команду больше - вместо 3 команд будет 4. Зато +1 дополнительная функция.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Не уверен точно, у AVR- ок каких-то было toggle зарисью в PIN (аналог нашего IDR). Варианты всегда возможны, было бы желание. ST не возжелала :)
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

ST много чего не сделала. Что есть то и юзаешь. Можно выбрать другой камень.
На практике тоггле мне например не требовался. Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?
А так производительности и флеша хватает чтобы не думать об байтах и тактах.
Инженер R@D

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

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