Не становится. Загрузка адреса GPIOA->BSRR есть в любом случае. Она, естественно, не будет выполняться каждый раз, если где-то до этого была работа c GPIO. А в "чистом поле" для STR r1,[r0,#0x18] нужно два регистра предварительно загрузить в любом случае. Чудес не бывает.
Я об этом вообще не думаю. Не было никогда нужды считать байты и такты. В разных местах все по разному будет все от кода зависит и уровня оптимизации настроенной.
Поэтому выдумывать придумывать что-то нет смысла. Я просто программирую что мне нужно и все.
Даже если я напишу три раза подряд дрыгание ногой это будет выглядеть так:
Раз ты сброс-установка-сброс привёл в пример. Давай я покажу что получится, если учесть байтовый доступ. Но, с вашего позволения, на С++. Боюсь запутаться во всех этих адресах и константах на С. Пусть компилятор сам посчитает.
[uquote="Oxford",url="/forum/viewtopic.php?p=3901974#p3901974"]Конечно не имеет. Потому что у вас расход памяти больше на С++ за счет ООП.[/uquote]Это неправда. Давай не будем C vs С++. Я напишу на С, пусть вас не смущает, результат будет байт в байт.
[uquote="Oxford",url="/forum/viewtopic.php?p=3901974#p3901974"]На Си не хуже.[/uquote]Дело не в Си, а в байтовом доступе к порту. И он даёт реальную экономию. На вашем же примере
[uquote="VladislavS",url="/forum/viewtopic.php?p=3901971#p3901971"]Раз ты сброс-установка-сброс привёл в пример.[/uquote]Атомарная установка/сброс - это конечно хорошо. Но вот почему ST не догадался сделать атомарный toggle пина? Infineon вот догадался. В семействе XMC4000 при записи лог."1" одновременно в set и в reset позицию производится атомарный toggle состояния пина.
Вроде бы очевидное решение, но почему-то ST не догадался так сделать.
В чем экономия во флеше что ли? ну да какие то байты есть выигрыш.
Ну вот мой код же. К тому же легко читаем, по сравнением с вашим.
GPIOA->BSRR = GPIO_BSRR_BR15;
GPIOA->BSRR = GPIO_BSRR_BS15;
GPIOA->BSRR = GPIO_BSRR_BR15;
[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]Экономия флеша ведёт к экономии тактов. В общем случае.
[uquote="Oxford",url="/forum/viewtopic.php?p=3901980#p3901980"]В чем экономия во флеше что ли?[/uquote]Да. Меньше код. Быстрее считывается и соответственно выполняется.
нет разницы байт или 32 бита. STM32 32 битные.[/uquote]
А то, что в примере VladislavS4 команды, а у вас - 5 команд (для тех же действий) - конечно не заметили? И что у него все команды 2-байтовые, а у вас первая 4-байтная - тоже не заметили??