Да вы и так уже блеснули всем, чем могли.
STM32 новичку в ARM что к чему
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903781#p3903781"]Если вы не видете разницы между "movs r2, #2" и "mov.w r2, #0x020000", то я ничем не могу помочь.[/uquote]
Да вы и так уже блеснули всем, чем могли.
Да вы и так уже блеснули всем, чем могли.
- Реклама
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903790#p3903790"]Oxford, так вся суть в том чтобы не писать это на Си. Естественно, можно и на Си добиться такого же доступа к регистрам. Но это достаточно трудоёмко. Чуть что поменялось и переделыаай всё заново. Тут же всё отдано на откуп компилятору, он никогда не устаёт и оптимизирует, оптимизирует, оптимизирует...[/uquote]
Выкладывай исходник посмотрим
Выкладывай исходник посмотрим
Последний раз редактировалось Oxford Пт окт 09, 2020 02:05:03, всего редактировалось 5 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903790#p3903790"]Oxford, так вся суть в том чтобы не писать это на Си. Естественно, можно и на Си добиться такого же доступа к регистрам. Но это достаточно трудоёмко. Чуть что поменялось и переделыаай всё заново. Тут же всё отдано на откуп компилятору, он никогда не устаёт и оптимизирует, оптимизирует, оптимизирует...[/uquote]
Главное в сказки верить.
Главное в сказки верить.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3903782#p3903782"]Reflector давай те код полностью на Си. я жду а там уже будем думать.[/uquote]
Вот код функции:
Т.к. данные в старшей половине PB, то очевидная оптимизация - это запись в старшую половину ODR, хотя такое можно сделать не везде. Если данные и WR находятся на одном порту, тогда можно изменить маску и очистить WR вместе с записью данных, но это все дополнительные проверки, плюс есть еще RS, потому не помню чтобы кто-то так делал. Шаблонная либа это делает автоматически, даже если все пины данных идут вразброс она их посортирует по портам и будет обрабатывать группами.
Вот код функции:
Код: Выделить всё
GPIOB->BSRR = 0xFF00'0000 | (data & 0xFF00);
GPIOB->BSRR = GPIO_BSRR_BR_1; // WR = 0
GPIOB->BSRR = GPIO_BSRR_BS_1; // WR = 1
GPIOB->BSRR = 0xFF00'0000 | ((data & 0xFF) << 8);
GPIOB->BSRR = GPIO_BSRR_BR_1; // WR = 0
GPIOB->BSRR = GPIO_BSRR_BS_1; // WR = 1И когда покажешь реализацию методов C++? Что за шаблонная либа и что за группировки пинов такие автоматические?
Последний раз редактировалось Oxford Пт окт 09, 2020 02:06:10, всего редактировалось 4 раза.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Reflector, бесполезно. Тут пример с clear одного бита то не понимают, а списки пинов это из другой вселенной. Припоминаю то обсуждение записи в LCD, где пришли к возможности совместить wr=0 и установку data. А у вас это в библиотеке учтено и делается автоматом при появлении такой возможности.
Добавлено after 6 minutes 4 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3903801#p3903801"]И когда покажешь реализацию методов C++?8)[/uquote]Не думаю, что вы готовы это увидеть. Там реально сложный код.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903801#p3903801"]a5021 ща мы этих калокуберов на чистую воду выведем
[/uquote]Смешно
учитывая что на последних страницах кое-кто уже дважды проблемы с этого самого "калокуба" сюда вытаскивал. 
Добавлено after 6 minutes 4 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3903801#p3903801"]И когда покажешь реализацию методов C++?8)[/uquote]Не думаю, что вы готовы это увидеть. Там реально сложный код.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903801#p3903801"]a5021 ща мы этих калокуберов на чистую воду выведем
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Я что-то не понял, вы собираетесь объяснять немыслимую пользу BRR в случае с
Или уже, все, переобулись и нигде не жмет?
Код: Выделить всё
GPIOA->BSRR = (0xFF<<(2+16)) | (x<<2);- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3903801#p3903801"]Я не понял а где у тебя ODR? что это вообще за говнокод с битами? Можешь написать алгоритм словами типо 1. записать в регистр байт 2. сбросить 6 бит 3. установить 6 бит? Да еще и параллельный интерфейс программируешь программно.[/uquote]
Шина 8-ми битная, в половинку ODR можно писать только если пины точно в эти половинки попадают и если речь не идет об F1, а ты как раз фанат F1
Программирую программно, потому что разговор про порты, а вообще либа работает и с FMC/SPI.

[uquote="VladislavS",url="/forum/viewtopic.php?p=3903822#p3903822"]Припоминаю то обсуждение записи в LCD, где пришли к возможности совместить wr=0 и установку data. А у вас это в библиотеке учтено и делается автоматом при появленти такой возможности.[/uquote]
Я это и предложил, только там была запись данных с одновременным сбросом WR и RS. Не помню сишных либ где бы такое было реализовано...
Шина 8-ми битная, в половинку ODR можно писать только если пины точно в эти половинки попадают и если речь не идет об F1, а ты как раз фанат F1
На ПК многие пишут на C++, но там нет особой необходимости выполнять ради оптимизации код на этапе компиляции, потому такие программисты в либе написанной с активным применением именно такого подхода мало что поймут, а если писать на С, то нечего и пытатьсяИ когда покажешь реализацию методов C++?
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903822#p3903822"]Припоминаю то обсуждение записи в LCD, где пришли к возможности совместить wr=0 и установку data. А у вас это в библиотеке учтено и делается автоматом при появленти такой возможности.[/uquote]
Я это и предложил, только там была запись данных с одновременным сбросом WR и RS. Не помню сишных либ где бы такое было реализовано...
ну так че там на счет либушек святых с автоматической обработкой групп каких то? 
Последний раз редактировалось Oxford Пт окт 09, 2020 02:06:45, всего редактировалось 7 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3903828#p3903828"]Я что-то не понял, вы собираетесь объяснять немыслимую пользу BRR в случае с
Или уже, все, переобулись и нигде не жмет?[/uquote]А почему должна быть польза от BRR в операции, для которой он не оптимален? В одном месте BRR оптимально, в другом BSRR, а где-то вообще ODR. Думайте головой.
Код: Выделить всё
GPIOA->BSRR = (0xFF<<(2+16)) | (x<<2);- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]Я так и не понял как работает этот код почему два раза данные пишутся?[/uquote]
Пишется два раза, потому что шина 8-ми битная, цвета 16-ти битные. И оно точно работает, я менюшку запускал.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]ну так че там на счет либушек святых с автоматической обработкой групп каких то?
Поделишься может, вдруг ноухау какое ускоряющее работу реально.[/uquote]
Да ладно, из-за какой-то либы перейдешь на C++? Наверняка же просто поковыряешься и продолжишь писать на С
Пишется два раза, потому что шина 8-ми битная, цвета 16-ти битные. И оно точно работает, я менюшку запускал.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]ну так че там на счет либушек святых с автоматической обработкой групп каких то?
Поделишься может, вдруг ноухау какое ускоряющее работу реально.[/uquote]
Да ладно, из-за какой-то либы перейдешь на C++? Наверняка же просто поковыряешься и продолжишь писать на С
Последний раз редактировалось Reflector Чт окт 08, 2020 21:36:02, всего редактировалось 1 раз.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]Поделишься может, вдруг ноухау какое ускоряющее работу реально.[/uquote]Во-первых, когда просят, как минимум не хамят, а ещё и "пожалуйста" говорят. Во-вторых, по разведданным, твой Keil код Reflector не возьмёт. Ну не умеет он С++20.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]Т.е. стыдно показывать говнокод, что на Си стряпается в несколько строк. )))
[/uquote] На Си это в принципе невозможно написать. Нет там такого инструмантария.
[uquote="Oxford",url="/forum/viewtopic.php?p=3903833#p3903833"]Т.е. стыдно показывать говнокод, что на Си стряпается в несколько строк. )))
VladislavS какого инструментария?
Последний раз редактировалось Oxford Пт окт 09, 2020 02:08:04, всего редактировалось 2 раза.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3903835#p3903835"]А почему должна быть польза от BRR в операции, для которой он не оптимален?[/uquote]
По странному стечению обстоятельств, оптимален он оказался в абсолютно безжизненном примере про BS0/BR0. Узнаю ваш почерк.
По странному стечению обстоятельств, оптимален он оказался в абсолютно безжизненном примере про BS0/BR0. Узнаю ваш почерк.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3903844#p3903844"]Я так и не понял как работает этот код почему два раза данные пишутся если у тебя 8 бит шина и WR в 1 бите? 6 операций.
[/uquote]Вот об этом и речь! У вас 6 записей в регистры, а у Reflector четыре.
Код: Выделить всё
GPIOB->BSRR = 0xFF00'0000 | (data & 0xFF00);
GPIOB->BSRR = GPIO_BSRR_BR_1; // WR = 0
GPIOB->BSRR = GPIO_BSRR_BS_1; // WR = 1
GPIOB->BSRR = 0xFF00'0000 | ((data & 0xFF) << 8);
GPIOB->BSRR = GPIO_BSRR_BR_1; // WR = 0
GPIOB->BSRR = GPIO_BSRR_BS_1; // WR = 1Во первых это не мой код, а его. Я не программировал это. Поэтому не надо мне тут приписывать что у меня 6 инструкций понятно? Он сам с собой разговаривал там чет, сам себе примеры генерировал.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3903844#p3903844"]Вы даже на С++ не осилили правильно параллельный интерфейс, а все потому что базовые понятия не понимаете.[/uquote]Ну пока что, по ходу дискуссии, это вы показываете полное непонимание во что компилируется ваш код и как он работает. Это именно вашим доводом было: "да кого эти лишние байты волнуют". Да ещё и скорость от них не зависела почему-то. Так что, не перекладывайте с больной головы на здоровую.
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Вообще-то это вы вышли на сцену со словами, "если бессмысленно трясти одной ногой, то так можно сэкономить один или два байта". Потом правда выяснилось, что бывают еще и неблагоприятные случаи.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Это не небоагоприятные случаи, а случаи, в которых оптимально другое решение. Они не исключают друг друга, а дополняют.
Короче понятно все с вами.
Последний раз редактировалось Oxford Пт окт 09, 2020 02:08:38, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford


