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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Не, не преувеличивайте. "Нельзя" никто не говорит. Говорят "глупо".
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3904199#p3904199"]Раст то тебе что плохого сделал???[/uquote]
Мне одного этого ублюдства с вики:

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

match x {
    1 | 2 => println!("один или два"),
    3 => println!("три"),
    _ => println!("что угодно"),
}
Хватило, чтобы понять, какое говно этот ваш педеRust!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Родился
Сообщения: 7
Зарегистрирован: Сб сен 26, 2020 14:21:35
Откуда: Казань

Сообщение u-vovchika »

Блин, парни срач устроили.
У меня вопрос
К кому можно обратится за помощью ( Платной ) в обучении. F4
с нуля.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Погоди немного, скоро помощника совсем отпустит - всему научит. Вон уже зарок потёр :)
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="Reflector",url="/forum/viewtopic.php?p=3903927#p3903927"]И т.д., там много всего. С виду код высокоуровневый, но он практически весь выполняется на этапе компиляции.[/uquote]

Ниче не понял. Как он может разбивать шину данных с разбросанными пинами по разным ножкам в регистр bsrr ведь, управляющие понятно как, но данные на этапе компиляции не делаются же, только в рантайме можно анализировать байты и собирать маску. Либо код ассемблера не весь был показан и нас держут за лохов, либо такой функции нет и шина данных может быть только кратно байту, а управляющие пины любые. Потому что не складывается код в логику.

Должен быть код который будет собирать маску. Во вторых должен быть код который добавит запись в другие порты .A B C и так далее.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904356#p3904356"]Должен быть код который будет собирать маску. Во вторых должен быть код который добавит запись в другие порты .A B C и так далее.[/uquote]
Не боись, код есть. Но "они скрывают"!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

С управляющими любыми на этапе компиляции я могу препроцессор запрограммировать, но если и данные надо то это нужно 8 бит анализировать в какие порты и какие биты записывать. Это дополнительный код будет в рантайме. Потому что данные неизвестны на этапе компиляции.
Поэтому нужно разобраться с шиной данных чтобы я смог правильно код написать на си
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904356#p3904356"]но данные на этапе компиляции не делаются же, только в рантайме.[/uquote]
Берем 8 пинов в старшей половине порта, получаем запись в половину ODR:

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

PinList<PB15, PB14, PB13, PB12, PB11, PB10, PB9, PB8> pins;
pins.write(GPIOA->IDR);

// ldr r3, [r3, #16] 
// ldr r2, [pc, #700]
// uxtb r3, r3 
// strb r3, [r2, #0]
Сдвигаем пины в середину и указываем в обратном порядке, компилятор автоматические добавит сдвиг и RBIT, а запись теперь будет выполняться в BSRR:

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

PinList<PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10> pins;
pins.write(GPIOA->IDR & 0xFF);

// ldr r3, [r3, #16] 
// uxtb r3, r3 
// rbit r3, r3 
// lsrs r3, r3, #21 
// ldr r6, [pc, #708]
// and.w r3, r3, #0x7f8 
// orr.w r3, r3, #0x7f80000 
// str r3, [r6, #24]
Теперь возьмем пины с двух портов:

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

PinList<PC13, PB11, PC11, PC10, PB8, PC8, PB6, PB5> pins;
pins.write(GPIOA->IDR & 0xFF);

// ldr r3, [r3, #16] 
// ldr r1, [pc, #508]
// ldr r6, [pc, #508]
// uxtb r3, r3 
// lsls r2, r3, #6 
// lsls r3, r3, #5 
// and.w r2, r2, #0x2d00 
// and.w r3, r3, #0x960 
// orr.w r2, r2, #0x2d000000 
// orr.w r3, r3, #0x9600000 
// str r2, [r1, #24] 
// str r3, [r6, #24] 
Далеко не для всех это очевидно, но данный список пинов удобен для обработки, т.к. на PB5 проецируется 0-й бит входных данных, на PB6 - первый, на PB8 - 3-й и т.д., т.е. разница между номером пина и номером бита везде равна пяти и это означает, что можно одной маской выделить сразу 4 бита для PB, а другой - сразу 4 бита для PC, затем полученные значения сдвигают и накладываются на посчитанные маски для BSRR, которые по 4 бита очищают. Это обобщенный алгоритм, даже для первого случая, когда писался байт в ODR, все рассчитывалось именно так, но на заключительной стадии записи в регистр выполняется дополнительная оптимизация в результате которой компилятор решает сохранять данные именно как байт, следовательно не нужно дополнительно ничего очищать и сдвигать.
Далее можно взять этот список и добавить к нему парочку управляющих сигналов:

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

using Data= PinList<PC13, PB11, PC11, PC10, PB8, PC8, PB6, PB5>;
PinList<WR, RS, Data>::write(GPIOA->IDR & 0xFF);
Теперь в списке 10 пинов, при записи 8-ми битного значения в управляющие сигналы запишутся нули, если новых портов не добавилось, то получим дополнительно одну инструкцию.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Как я и говорил бестолковое программирование на С++. За это увольнять надо за такой код.
Я такой исход и предполагал. Ничего нового.
Это не обобщенное программирование это бредятина.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

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

Сообщение Oxford »

Так он и есть дополнительный код генерируется. Производительность будет плавать. На этапе компиляции просто создается код для рантайма как будет обрабатываться маска.
На Си мне такое никогда не требовалось, так как все гораздо проще программируется.
Никогда этим голову не забивал, и другим не советую.

Так как максимальная производительность будет когда все 8 пинов в одном байте. Другие варианты я даже не рассматриваю еще на этапе дизайна и выбора МК, потому как разбросанные пины шины не гуд.
Это просто ты себе проблему создал про разные пины и начал ее решать на C++.
DMA тоже гемморой прикрутить будет, особенно с разбросанными пинами.
Поэтому не надо голову всякой дрянью забивать себе и людей баламутить.
А так все понятно теперь. Спасибо С++ мне не надо, я дальше как все на Си буду прогать.

https://habr.com/ru/post/474732/
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904396#p3904396"]https://habr.com/ru/post/474732/[/uquote]
В статье описан полуфабрикат который даже write/read() не умеет, а set/reset() - это простые функции, объединил маску каждого пина и получил общую, даже порядок пинов не важен, не говоря уже о каком-то дополнительном анализе.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Reflector а с DMA будет пример назначения разных пинов. :tea: да еще и строб надо будет пихнуть.
Или только ногодрыг могем?

Блин и все это ради того чтобы не покупать 100 ногий и не юзать FSMC + DMA :))) ну или SPI дисплей просто взять
Есть же специальные интерфейсы

А так в принципе очередная ардуино либа там тоже никто не заморачивался над оптимизацией и обьемом кода, важна была универсальность. :tea:
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Сб сен 26, 2020 14:21:35
Откуда: Казань

Сообщение u-vovchika »

Подскажите пожалуйста, с какой средв разработки надо начинать изучать программирование на STM32FXXX
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="u-vovchika",url="/forum/viewtopic.php?p=3904454#p3904454"]с какой среды[/uquote]С той, в которой удобно работать!
Можно и просто по F4 в mcedit/vim/nano код наколачивать...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Сб сен 26, 2020 14:21:35
Откуда: Казань

Сообщение u-vovchika »

А STM32CubeIDE пойдет ??
И к кому можно обратится с просьбой обучить меня ???
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

Сообщение pavell »

[uquote="u-vovchika",url="/forum/viewtopic.php?p=3904466#p3904466"]А STM32CubeIDE пойдет ??
И к кому можно обратится с просьбой обучить меня ???[/uquote]
Хм, неужто сенсей еще личку не заспамил ))))
А чем открытые источники знаний не устраивают?
Родился
Сообщения: 7
Зарегистрирован: Сб сен 26, 2020 14:21:35
Откуда: Казань

Сообщение u-vovchika »

[uquote="pavell",url="/forum/viewtopic.php?p=3904499#p3904499"][uquote="u-vovchika",url="/forum/viewtopic.php?p=3904466#p3904466"]А STM32CubeIDE пойдет ??
И к кому можно обратится с просьбой обучить меня ???[/uquote]
Хм, неужто сенсей еще личку не заспамил ))))[/uquote]
Это как ??

Добавлено after 1 minute 5 seconds:
[uquote="pavell",url="/forum/viewtopic.php?p=3904499#p3904499"][uquote="u-vovchika",url="/forum/viewtopic.php?p=3904466#p3904466"]А STM32CubeIDE пойдет ??
И к кому можно обратится с просьбой обучить меня ???[/uquote]

А чем открытые источники знаний не устраивают?[/uquote]
Устраивают конечно, чем и занимаюсь. Но от личного общения и учения, не откажусь
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="u-vovchika",url="/forum/viewtopic.php?p=3904466#p3904466"]А STM32CubeIDE пойдет ??[/uquote]
Калокуб - плохая идея...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Сб сен 26, 2020 14:21:35
Откуда: Казань

Сообщение u-vovchika »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904532#p3904532"][uquote="u-vovchika",url="/forum/viewtopic.php?p=3904466#p3904466"]А STM32CubeIDE пойдет ??[/uquote]
Калокуб - плохая идея...[/uquote]
"кокос" ????
Ответить

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