STM32 новичку в ARM что к чему
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3901990#p3901990"]Меня это абсолютно не волнует сколько там байт. пусть будет больше значит больше.[/uquote]Блин, ну вроде же конструктивно начинали обсуждение
Могли бы дальше подумать как это на Си автоматизировать, а вы сразу в бочку.
- Реклама
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3901974#p3901974"]К сожалению, я понимаю что вы хотели сказать что С++ лучше Си, но увы на Си меньше расходов и проще.[/uquote]
При этом ты предлагаешь практически всегда использовать RTOS, даже когда простая пауза нужна, так что количество расходов больше зависит от того как пишешь, а не на чем
При этом ты предлагаешь практически всегда использовать RTOS, даже когда простая пауза нужна, так что количество расходов больше зависит от того как пишешь, а не на чем
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="jcxz",url="/forum/viewtopic.php?p=3901979#p3901979"]Вроде бы очевидное решение, но почему-то ST не догадался так сделать.
[/uquote]ST задействовал эту операцию под другую возможность. Она позволяет через BSRR одной операцией устанавливать значение в нужных битах порта в любое состояние.
Вы то куда лезите. А кто это у нас там спрятал C++ класс? Ладно ребятишки дальше без меня считайте байты сидите между собой.А то, что в примере VladislavS 4 команды, а у вас - 5 команд (для тех же действий) - конечно не заметили? И что у него все команды 2-байтовые, а у вас первая 4-байтная - тоже не заметили??
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="VladislavS",url="/forum/viewtopic.php?p=3901997#p3901997"]ST задействовал эту операцию под другую возможность. Она позволяет через BSRR одной операцией устанавливать значение в нужных битах порта в любое состояние.[/uquote]Не понял...
Поясните? У BSRR есть ещё какой-то функционал кроме установки/сброса сост.пина?
Добавлено after 1 minute 43 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3901998#p3901998"]Вы то куда лезите. А кто это у нас там спрятал C++ класс? Ладно ребятишки дальше без меня считайте байты сидите между собой.[/uquote]Тут главное - ни за что не признавать свою неправоту, как бы очевидна она ни была. да ужжж......
Добавлено after 1 minute 43 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3901998#p3901998"]Вы то куда лезите. А кто это у нас там спрятал C++ класс? Ладно ребятишки дальше без меня считайте байты сидите между собой.[/uquote]Тут главное - ни за что не признавать свою неправоту, как бы очевидна она ни была. да ужжж......
- Реклама
Нету у фрискале никакого атомарного тоггле. Что по вашему означает атомарный тоггле?
Там регистр вывода OUT и регистр модификации OMR эквивалент BSRR
К тому же у XMC регистр OMR виртуальный 8- или 16-битная запись ведет себя как 32-битная запись, заполненная нулями.
Там регистр вывода OUT и регистр модификации OMR эквивалент BSRR
К тому же у XMC регистр OMR виртуальный 8- или 16-битная запись ведет себя как 32-битная запись, заполненная нулями.
Последний раз редактировалось Oxford Пн окт 05, 2020 11:58:32, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="Oxford",url="/forum/viewtopic.php?p=3902003#p3902003"]Нету у фрискале никакого атомарного тоггле.[/uquote]У фрискале - нет, у ST - нет, у Infineon - есть. Я про фрискале вроде и не говорил....
[uquote="Oxford",url="/forum/viewtopic.php?p=3902003#p3902003"]Что по вашему означает атомарный тоггле?[/uquote]То, что и всегда - непрерываемый. Выполняющийся в одной команде.
[uquote="Oxford",url="/forum/viewtopic.php?p=3902003#p3902003"]Что по вашему означает атомарный тоггле?[/uquote]То, что и всегда - непрерываемый. Выполняющийся в одной команде.
Я инфенион и смотрю оговорился просто.
https://www.infineon.com/dgdl/Infineon- ... 44ccd35c20
Ну так OMR (инфенион) это и есть тоггле атомарный, что и BSRR, за один вызов переключит.
Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?
https://www.infineon.com/dgdl/Infineon- ... 44ccd35c20
Ну так OMR (инфенион) это и есть тоггле атомарный, что и BSRR, за один вызов переключит.
Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="jcxz",url="/forum/viewtopic.php?p=3902000#p3902000"]Не понял...
Поясните? У BSRR есть ещё какой-то функционал кроме установки/сброса сост.пина?[/uquote]Смотрите. Есть у меня переменная X. Что в ней я не знаю. Но хочу её состояние вывести на ножки порта. Для простоты возьмём uint8_t X и сопоставим её ножкам PA2-PA9.
В принципе, ножки можно брать любые. В 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 это переключение состояния выхода на противоположное вне зависимости от текущего состояния.
Код: Выделить всё
uint8_t x;
GPIOA->BSRR = (0xFF<<(2+16)) | (x<<2);
Добавлено after 1 minute 54 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3902006#p3902006"]Поэтому и спрашиваю что означает для вас Toggle. Переключение бита из 1 в 0 это Toggle?[/uquote]toggle это переключение состояния выхода на противоположное вне зависимости от текущего состояния.
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[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;
Добавлено 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;
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="VladislavS",url="/forum/viewtopic.php?p=3902027#p3902027"]Это дополнительные вычисления.[/uquote]Всего на одну команду больше - вместо 3 команд будет 4. Зато +1 дополнительная функция.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Не уверен точно, у AVR- ок каких-то было toggle зарисью в PIN (аналог нашего IDR). Варианты всегда возможны, было бы желание. ST не возжелала 
ST много чего не сделала. Что есть то и юзаешь. Можно выбрать другой камень.
На практике тоггле мне например не требовался. Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?
А так производительности и флеша хватает чтобы не думать об байтах и тактах.
На практике тоггле мне например не требовался. Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?
А так производительности и флеша хватает чтобы не думать об байтах и тактах.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3901984#p3901984"]Меньше код. Быстрее считывается и соответственно выполняется.[/uquote]
Не портабельно. Старые семейства (F1, F2) умеют только word access.
Не портабельно. Старые семейства (F1, F2) умеют только word access.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3902076#p3902076"]Не портабельно.[/uquote]Как напишешь библиотеку так и будет.
[uquote="a5021",url="/forum/viewtopic.php?p=3902076#p3902076"]Старые семейства (F1, F2) умеют только word access.[/uquote]Что мешает применить эту оптимизацию там где она возможна?
Вот пример портабельности.
Скомпилируем этот код под разные камни. Библиотека с компилятором сами разберутся что и как.
STM32F4STM32F1
STM32L0. У него учтено Errata: 2.1.1 Writing in byte mode to the GPIOx_OTYPER register does not workУгадайте какой
Добавлено after 4 minutes 4 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3902034#p3902034"]Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?[/uquote]Где вы в лёгкой и непринуждённой беседе ярых проповедников встретили? Я вот так применяю. Можно?
[uquote="a5021",url="/forum/viewtopic.php?p=3902076#p3902076"]Старые семейства (F1, F2) умеют только word access.[/uquote]Что мешает применить эту оптимизацию там где она возможна?
Вот пример портабельности.
Код: Выделить всё
//Настроим PA15 на выход и в единичку
PA_15::mode<PinMode::PushPull_LowSpeed<1>>();
__NOP(); // Разделитель для наглядности
// Подрыгаем ногой
PA_15::clear();
PA_15::set();
PA_15::clear();STM32F4
Спойлер
Код: Выделить всё
//PA_15::mode<PinMode::PushPull_LowSpeed<1>>();
LDR.N R0,??main_0 ;; 0x40020003
LDRB R1,[R0, #+0]
AND R1,R1,#0x3F
ORR R1,R1,#0x40
STRB R1,[R0, #+0]
MOV R2,#-2147450880
LDRB R1,[R0, #+12]
AND R1,R1,#0x3F
STRB R1,[R0, #+12]
LDRB R1,[R0, #+8]
AND R1,R1,#0x3F
STRB R1,[R0, #+8]
LDRB R1,[R0, #+2]
AND R1,R1,#0x7F
STRB R1,[R0, #+2]
STR R2,[R0, #+21]
//__NOP();
Nop
//PA_15::clear();
MOVS R1,#+128
STRB R1,[R0, #+24]
//PA_15::set();
STRB R1,[R0, #+22]
//PA_15::clear();
STRB R1,[R0, #+24]Спойлер
Код: Выделить всё
//PA_15::mode<PinMode::PushPull_LowSpeed<1>>();
LDR.W R5,??main_0 ;; 0x40010804
LDR R0,[R5, #+0]
BIC R0,R0,#0xF0000000
ORR R0,R0,#0x20000000
STR R0,[R5, #+0]
MOV R1,#-2147450880
STR R1,[R5, #+12]
//__NOP();
Nop
//PA_15::clear();
MOV R0,#-2147483648
STR R0,[R5, #+12]
//PA_15::set();
MOV R1,#+32768
STR R1,[R5, #+12]
//PA_15::clear();
STR R0,[R5, #+12]Спойлер
Код: Выделить всё
//PA_15::mode<PinMode::PushPull_LowSpeed<1>>();
MOVS R1,#+63
LDR R0,??main_0 ;; 0x50000003
LDRB R2,[R0, #+0]
ANDS R2,R2,R1
MOVS R3,#+64
ORRS R3,R3,R2
STRB R3,[R0, #+0]
LDRB R2,[R0, #+12]
ANDS R2,R2,R1
STRB R2,[R0, #+12]
LDRB R2,[R0, #+8]
ANDS R1,R1,R2
STRB R1,[R0, #+8]
ADDS R0,R0,#+1
LDR R1,[R0, #+0]
LDR R2,??main_0+0x4 ;; 0xffff7fff
ANDS R2,R2,R1
STR R2,[R0, #+0]
LDR R1,??main_0+0x8 ;; 0x80008000
STR R1,[R0, #+20]
SUBS R0,R0,#+1
//__NOP();
Nop
//PA_15::clear();
MOVS R1,#+128
STRB R1,[R0, #+24]
//PA_15::set();
STRB R1,[R0, #+22]
//PA_15::clear();
STRB R1,[R0, #+24]
Спойлер
mdr1986ve8(1)Код: Выделить всё
//PA_15::mode<PinMode::PushPull_LowSpeed<1>>();
LDR.N R0,??DataTable1 ;; 0x40080008
MOV R1,#+32768
STR R1,[R0, #+8]
STR R1,[R0, #+48]
STR R1,[R0, #+76]
STR R1,[R0, #+60]
STR R1,[R0, #+68]
MOV R2,#+1073741824
STR R2,[R0, #+80]
MOV R3,#-2147483648
STR R3,[R0, #+88]
MOV R2,#-268435456
STR R2,[R0, #+36]
STR R1,[R0, #+0]
//__NOP();
Nop
//PA_15::clear();
STR R1,[R0, #+4]
//PA_15::set();
STR R1,[R0, #+0]
//PA_15::clear();
STR R1,[R0, #+4][uquote="Oxford",url="/forum/viewtopic.php?p=3902034#p3902034"]Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?[/uquote]Где вы в лёгкой и непринуждённой беседе ярых проповедников встретили? Я вот так применяю. Можно?
Код: Выделить всё
void SysTick_Handler()
{
LED::Toggle();
}- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="Oxford",url="/forum/viewtopic.php?p=3902034#p3902034"]На практике тоггле мне например не требовался. Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?[/uquote]"На практике" атомарный toggle иногда полезен например для пинания WDT из разных задач без необходимости блокировок. И вообще - везде где нужно переключить пин атомарно.
Да и просто - аппаратно реализованная функция уменьшает число требуемых программных тактов. Всегда лучше когда какая-то функция есть.
Да и просто - аппаратно реализованная функция уменьшает число требуемых программных тактов. Всегда лучше когда какая-то функция есть.
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3902093#p3902093"]Что мешает применить эту оптимизацию там где она возможна?[/uquote]
Ничего не мешает. Точно так же, как ничего не вдохновляет. Слишком невелик эффект.
Ничего не мешает. Точно так же, как ничего не вдохновляет. Слишком невелик эффект.
[uquote="jcxz",url="/forum/viewtopic.php?p=3902266#p3902266"][uquote="Oxford",url="/forum/viewtopic.php?p=3902034#p3902034"]На практике тоггле мне например не требовался. Хотелось бы узнать от ярых праповедников тоггле когда вы это применяете на практике?[/uquote]"На практике" атомарный toggle иногда полезен например для пинания WDT из разных задач без необходимости блокировок. И вообще - везде где нужно переключить пин атомарно.
Да и просто - аппаратно реализованная функция уменьшает число требуемых программных тактов. Всегда лучше когда какая-то функция есть.[/uquote]
В каком плане пинание WDT? Там же просто число записываешь, пох из какой задачи идет запись. Где еще нужно?
Атомарный доступ нужен только в случае применения ОС когда есть многопоточность и в случае если оба потока работают с периферией через read-modify-write. Но, на практике я не рекомендую так программировать, это очень плохо. Случаи эти редкие очень. У ОС есть свои механизмы синхронизации потоков для работы с общей периферией.
Поэтому есть два подхода программирования микроконтроллеров с операционной системой и без. Оба подхода кардинально отличаются и требуют разной практики программирования.
Просто нужно программировать вещи сложнее чем GPIO порт и не байты считать и такты, а думать головой над алгоритмами. Еще ни разу не упирался в нехватку ресурсов, к тому же линейка STM32 очень широкая есть из чего выбрать.
Да и просто - аппаратно реализованная функция уменьшает число требуемых программных тактов. Всегда лучше когда какая-то функция есть.[/uquote]
В каком плане пинание WDT? Там же просто число записываешь, пох из какой задачи идет запись. Где еще нужно?
Атомарный доступ нужен только в случае применения ОС когда есть многопоточность и в случае если оба потока работают с периферией через read-modify-write. Но, на практике я не рекомендую так программировать, это очень плохо. Случаи эти редкие очень. У ОС есть свои механизмы синхронизации потоков для работы с общей периферией.
Поэтому есть два подхода программирования микроконтроллеров с операционной системой и без. Оба подхода кардинально отличаются и требуют разной практики программирования.
Просто нужно программировать вещи сложнее чем GPIO порт и не байты считать и такты, а думать головой над алгоритмами. Еще ни разу не упирался в нехватку ресурсов, к тому же линейка STM32 очень широкая есть из чего выбрать.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="Oxford",url="/forum/viewtopic.php?p=3902321#p3902321"]В каком плане пинание WDT? Там же просто число записываешь, пох из какой задачи идет запись. Где еще нужно?[/uquote]Какое "число"? Разговор о чём идёт? О пине. Даже чайнику должно быть ясно, что пином (внешним сигналом) пинается внешний WDT. А значит о нём и речь.
[uquote="Oxford",url="/forum/viewtopic.php?p=3902321#p3902321"]У ОС есть свои механизмы синхронизации потоков для работы с общей периферией.[/uquote]Я вообще то и писал - если есть атомарный toggle пина, то никакие дополнительные механизмы синхронизации для переключения состояния пина - не нужны. Оно и так уже атомарно. В том и плюс.
[uquote="Oxford",url="/forum/viewtopic.php?p=3902321#p3902321"]Просто нужно программировать вещи сложнее чем GPIO порт и не байты считать и такты, а думать головой над алгоритмами.[/uquote]Вот и думайте.
PS: Если вам не нужен toggle - не используйте, никто не заставляет. Зачем срач на пустом месте разводить?
[uquote="Oxford",url="/forum/viewtopic.php?p=3902321#p3902321"]У ОС есть свои механизмы синхронизации потоков для работы с общей периферией.[/uquote]Я вообще то и писал - если есть атомарный toggle пина, то никакие дополнительные механизмы синхронизации для переключения состояния пина - не нужны. Оно и так уже атомарно. В том и плюс.
[uquote="Oxford",url="/forum/viewtopic.php?p=3902321#p3902321"]Просто нужно программировать вещи сложнее чем GPIO порт и не байты считать и такты, а думать головой над алгоритмами.[/uquote]Вот и думайте.
PS: Если вам не нужен toggle - не используйте, никто не заставляет. Зачем срач на пустом месте разводить?


