Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/160: Рейтинг темы: голосов - 160, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 59
1

Начал изучать STM32, я в лёгком недоумении )

28.02.2014, 14:08. Показов 30249. Ответов 85
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане!
Долгое время сидел на 51м ядре, включая его продвинутые версии и вот решил с нуля изучить кортекс. Пишу я свои программы на hexе... шучу, на асме). Ибо в затылок никто не дышит со сроками, а подход у меня всегда творческий и фундаментальный. Ну речь не об этом.
Много уже говорено-переговорено про это ядро, конечно никто не ставит под сомнение его продвинутость, периферию и что немаловажно стоимость. Мне другое интересно, процентов 90-95 сейчас пишут на си и порой даже не вдумываются что там творится на самом деле.
А меня смутило следующее.
Неужели в STM32 чтобы банально сконфигурировать регистр или дернуть пином нужно как минимум 3 команды (или 5 тактов)

Пример конфигурации

8051 - конфигурируем таймер
mov TMOD, #25h

STM32 - включаем тактирование порта
MOV32 R0, RCC_APB2ENR
MOV32 R1, 0x00000010
STR R1, [R0]

ну ладно, конфигурация - это такое, вначале настроил и забыл.
Но когда банально доходит до вывода информации, например подергать пином, неужели всё те же 3 команды? Другими словами там, где я мог запустить вывод в порт на силабе х51 допустим на 24 МГц, с STM32 мне для уверенности нужно будет МГц 50?
Может я чего-то недопонял и в кортексе есть прямая установка регистров, а не через косвенное обращение?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2014, 14:08
Ответы с готовыми решениями:

Начал изучать С++
Я решил изучить С++ для этого значит скачал VS2010. Но я не могу понять эта реда позволяет...

Начал изучать JS
прочитал в книге спецификации CSS и вспомнил молодость, скроллер в стиле Amiga: <!DOCTYPE html>...

начал изучать с++
начал учить с++, мне порекомендовали купить "Полный справочник по С++" Герберта Шилдта , купил, но...

Начал изучать javascript
В этой теме хотел бы получить советы и поддержку, заранее благодарю всех кто мне поможет!!! и вот...

Начал изучать ООП
Условие задачи: 1 Заполнить массив нулями, кроме первого и последнего элементов, которые должны...

85
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
02.03.2014, 05:49 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Prismokf
У малознающих какое то пренебрежительное отношение к прикладному "ногодрыгу" :)
даффай... пионэр-отличник... песши ысчо!!! Башорг тэбэ уже заждался... ))))
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
02.03.2014, 05:53 42
Цитата Сообщение от _pv
Цитата Сообщение от OtyxPM
FSMC + DMA (ещё одна незамеченная "ахинея" в STM32)- и целый полноэкранный кадр улетает в дисплей с рекордной скоростью и вообще без участия процессора. Ноль команд. Ноль регистров.
даже без FSMC,
DMA в GPIO + таймер, пожалуй, могут отправить кусок данных в дисплей без участия процессора. было бы только откуда улетать.
Если я правильно понял... у ТСа STM32F100... и походу он от него много хочет... В его случае ногодрыгом с оптимизацией кода будет быстрее... как не странно... У 100-ок ДМА тормозной... да и тактовая низкая...
0
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 26
02.03.2014, 06:34 43
Я не знаю кто как, но я лично не понимаю смысла написания чего-либо на ассемблере в данный момент кроме очень специфичных случаев. То есть знать ассемблер, конечно, нужно, но вообще компиляторы сейчас все переводят из языка высокого уровня так хорошо, что никакой особой разницы между ручным набором и через высокий язык по сути нет. Ну разве что нужно работать с чем-то, где нужна максимальная скорость и точность до наносекунд.

Неужели в STM32 чтобы банально сконфигурировать регистр или дернуть пином нужно как минимум 3 команды (или 5 тактов)

Пример конфигурации

8051 - конфигурируем таймер
mov TMOD, #25h

STM32 - включаем тактирование порта
MOV32 R0, RCC_APB2ENR
MOV32 R1, 0x00000010
STR R1, [R0]
Я не знаю точно что там быстрее, конечно, но число команд никоем образом не говорит о производительности. Вполне возможно что одна команда 8051 исполняется больше времени, чем 3 команды ARM Sortix. Даже если изменение состояния пина занимает дольше времени, чем на 8051, я думаю что в целом внутренние команды типа вычислительных должны быть быстрее на ARM. В целом команды ARM более простые и атомарные, чем команды 8051, поэтому первые должны исполняться быстрее, чем вторые, по крайней мере в теории.
0
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 59
02.03.2014, 12:44 44
Цитата Сообщение от dork_usir
Если я правильно понял... у ТСа STM32F100... и походу он от него много хочет... В его случае ногодрыгом с оптимизацией кода будет быстрее... как не странно... У 100-ок ДМА тормозной... да и тактовая низкая...
Ц ТСа STM32F100RBT6B, т.е. именно тот чип, который находится непосредственно в демо-плате VL.
И что многого я от него хочу? Запустить виндоус 95? Или может архивирование? Или конвертация видео в mpeg?
Я хочу банально выводить инфу на дисплей в параллельном потоке. Это под силу даже Tiny, если бы у неё было 23 пина.

Цитата Сообщение от Domyit5555
Я не знаю кто как, но я лично не понимаю смысла написания чего-либо на ассемблере в данный момент кроме очень специфичных случаев.
Я и не говорю, что планирую всё писать на асме. Асм нужен для освоения архитектуры, сложные программы только си.

Я не знаю точно что там быстрее, конечно, но число команд никоем образом не говорит о производительности. Вполне возможно что одна команда 8051 исполняется больше времени, чем 3 команды ARM Sortix.
Одна команда x51 у силаба исполняется в среднем 2 такта, то же самое ARM делает 5 тактов. При одинаковой частоте.
Естественно при хорошей периферии это всё упрощается, но даже в таком навороченном контроллере я не вижу таких возможностей.
0
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 241
02.03.2014, 14:17 45
На вкус и цвет товарища нет. Не нравится STM, по своему ногодрыгательству, берите силаб, берите AVR. Вас никто насильно не заставляет применять STM. Причины которые могут повлиять на выбор STM могут быть вовсе крайне отдалённые, к примеру стоимость, совместимость по ногам, наличие 2-х или 3-х uart в недорогих камнях, и многое, многое, другое, никак не связанное с ногодрыгательством.
Получив "шаровый" дискавери по акции, я его закинул в дальний угол более чем на год, по той же причине, на тему которой тут ведётся разговор. Увидев что для ногодрыгательства нужно 3 команды я возмутился и закинул его, а теперь жалею про столь опрометчивый шаг. Потеряв более года.
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
02.03.2014, 14:30 46
Цитата Сообщение от imkymiir83
Одна команда x51 у силаба исполняется в среднем 2 такта, то же самое ARM делает 5 тактов. При одинаковой частоте.
Приведите конкретный прммер таких асмовых команд, которые в х51 выполняются за 2 такта, а в АРМе аж за 5. АРМ архитектура - это по определению все команды выполняются за один такт, но есть исключение, к примеру перемножение, которое может выполнятся не за один такт.
0
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 59
02.03.2014, 15:16 47
Цитата Сообщение от Vottdymor
Приведите конкретный прммер таких асмовых команд, которые в х51 выполняются за 2 такта, а в АРМе аж за 5. АРМ архитектура - это по определению все команды выполняются за один такт, но есть исключение, к примеру перемножение, которое может выполнятся не за один такт.
Вы наверное невнимательно читаете тему
Я же проводил команду установить пин, 2 такта
setb P2.4

Да и 5 тактов не одна команда выполняется, а три команды которые устанавливают пин. Это я тоже приводил. Не знаю как в реале, но кейл четко показывает 5 тактов
mov32 R0, GPIOC_BSRR
mov32 R1, 0x00000100
str R1, [R0]
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
02.03.2014, 16:23 48
Похоже ни кто не заметил, что:
Код
mov32 R0, GPIOC_BSRR
mov32 R1, 0x00000100
str R1, [R0]
это не три команды, а пять!
Первая это макрос, подставляющий 2 команды.
Все команды занимают 1 такт 32бит.
Это все идеология RISC.
Если коротко: простые фиксированного размера инструкции, требующие мало тактов, мало элементов и соответственно мало энергии. CISC - сложные с переменным размером длины команды, с разным числом тактов и требующие много вспомогательных блоков жрущие энергию.
На нынешний момент:
ARM (RISC) дешевые экономные, но слегка медленные.
x86(CISC) быстрые, но сложные и не экономные.
i51 прародитель 8бит 32разрядных x86, не думаю, что бы вы хотели в контроллере это ядро.
0
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
02.03.2014, 16:35 49
По моим наблюдениям большинство команд на asm выполняются за 1 такт. Кажется по 2 такта тратится на команды загрузки/сохранения в ОЗУ. Команды умножения за несколько тактов выполняются, от 1 до 5 в зависимости от команды (32х или 64 битный результат, с накоплением или без и т.п. нюансов). Деление за 7 тактов. Команды условного перехода тактов за 5 выполняются. Из приведенного примера команда mov32 - псевдокоманда состоящая из 2х команд mov и movt и выполняется за 2 такта. Причем это для cortex-m3.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
02.03.2014, 20:03 50
Не возбраняется!
Купить 100 Мгц 80с120 от силабс (51 архитектура ) за 23 бакса за штуку и побивать им все на свете!
А я тихонечко в уголочечке, на своем стм32ф103 на 72 Мгц за 2 (sic!)доллара со всеми накрутками, зарабатываю свою денежку + 21 бакс разницы в цене кладу себе в карман...
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 222
02.03.2014, 20:37 51
i51 прародитель 8бит 32разрядных x86, не думаю, что бы вы хотели в контроллере это ядро
x80 прародитель 16-ти разрядных x86
x86 прародитель 32-ти разрядных x386

i51 отдельное направление - ядро которых до сих пор востребовано (взять тот же логический анализатор USBee SeaLogig на базе 8051-ядра
Чрезвычайно полезной особенностью 8051-ядра является обработка булевых данных, что позволило ввести бинарную логику, оперирующую напрямую с битами внутренней ОЗУ (области из 128 прямо-адресуемых битов) и регистров.
Динная особенность была востребована в приложениях промышленной автоматики.
Еще одна ценная особенность состояла в 4 независимых наборах регистров, которые значительно уменьшали задержки при обработке прерываний, в сравнении с классическим использованием стека, применявшимся ранее.
А я тихонечко в уголочечке, на своем стм32ф103 на 72 Мгц за 2 (sic!)доллара со всеми накрутками, зарабатываю свою денежку + 21 бакс разницы в цене кладу себе в карман...
Какой ты мелочный :(
При продажной цене моей поделки в *** баксов себестоимостью ** - 21 бакс есть ничто :)
Аргумент просто смешной.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
02.03.2014, 20:51 52
Я неоднократно был свидетелем выцарапывания глаз за простой конденсатор или резистор при тираже 10 экземпляров, а ты мне тут тень на плетень наводишь. Я жеж написал: Не возбраняется!
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
02.03.2014, 21:03 53
Кстати, интересный момент: MCS 51 является открытым ядром, что, несмотря на большую конкуренцию, продолжает выпускаться в больших количествах и в ближайшее годы останется на плаву, уже почти 40 лет!
Вполне возможно, что Sortix-m, легко лицензируемый может оказаться таким же в области 32бит. микроконтроллеров, тем более резерва там заложено о-го-го.
0
0 / 0 / 0
Регистрация: 30.12.2012
Сообщений: 222
02.03.2014, 21:11 54
Я к тому что аргументация должна быть другой.
У STM32 из преимуществ достаточно большой объём программной памяти и памяти данных + широкая периферия + 32-х битная арифметика + относительно низкая цена + простота записи и отладки...
поэтому приходится мириться с минусами и переползать на Си.

Кстати, интересный момент: MCS 51 - любимое ядро Сименса для периферийных микросхем устройств промышленной автоматики.

<Изображение удалено>
0
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 59
02.03.2014, 21:58 55
Так, ладно, тема зашла немного в другое русло, никто тут не доказывает превосходство 51х в сравнении с STM32.
Просто хотелось понять чем STM компенсирует сложность обращения к регистрам, ответ получен.
0
TWW
03.04.2014, 05:03 56
Цитата Сообщение от imkymiir83
Ребята, спасибо.
http://stm32asm.ru/index.html
Я там уже был, сайт хороший, но не дописанный. Видать автор сам понял, что асм для STM32 - напрасная трата времени ))
ну.. почему же.. Просто я ничего не писал и не делал нового, программирование на время забросил, поэтому и сайт лежит.. К тому же, я там начинал с кейлов всяких и 103 камней. А теперь соскочил на GCC AS и F4.

Понравилось ядро F4, обвязка понравилась. Периферия легко настраивается. Цена приемлемая. Будет время, доберусь и до сайта. Наработок уже полно...

Сделал устройство, которое в реальном времени обрабатывает входящие импульсы на частоте 1-2мгц и отдаёт в ответ ~10 мгц. Работает жёстко, не пропуская ни одного импульса на входе. Используются прерывания. Одновременно выводится картинка на экран. С 8-битниками о подобной задаче можно забыть..

Возвращаясь к теме, да, нужно смириться с тем, что нельзя напрямую адресовать 32-битные адреса. Их нужно сначала загрузить в регистр. Причём на эту загрузку будет ухлопано 2 цикла, т.к. команда MOV32 является макросом, состоящим из двух команд - MOVW и MOVT. Но если все регистры загружены, ногодрыганье становится одноцикловым на 1/2 частоте процессора.

Из-за использования дешёвых встроенных умножителей частоты, на выходе таких генераторов будет лошадиное биение фронтов. Или работайте на частоте кварца, а это максимум 24 мгц!

Ещё, из-за тормозов флеша, время выполнения некоторых участков кода может варьироваться +/- несколько циклов. Так что, если нужно жёстко привязываться к каждому циклу, то опять же, работайте на частоте кварца без умножения. Выполнять код из ROM не пробовал, возможно это решение...

Регистров всего 13. Всё это огорчает... Я бы сделал 256 регистров. Но уже появился ARM v8, где многие проблемы решены. Ядро наворочено до тошнотиков. И остаётся только подождать, когда он спустится с небес, хоть не в дипы, так в tqfp.

На этом плохие новости заканчиваются. И начинаются только хорошие. Вкусняшек у кортексов во много раз больше, чем у 8-битников. Просто мало у кого они укладываются в голове... И мало кто всем этим реально пользуется... Камни по производительности достигают уровня Pentium.

Ещё я хочу сказать, что написание программ на чём либо, кроме ассемблера, это напрасная трата машинного времени. Переходите на Xeon.
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
03.04.2014, 07:10 57
TWW, спасибо за сайт, будем ждать...
Несколько моментов:
Максимальная частота кварца 25Мгц.
Джиттер PLL не очень большой, но в некоторых случаях не приемлем.
Т.к. шина команд из флеш отдельная, то идет параллельный процесс выборок команд и данных из ROM,
если и команды в ROM то понятное дело будут задержки конвейера.
А вот вопрос про задержки флеш при высоких частотах интересный, по моим наблюдениям очень слабо влияют.
1-3% на сложном алгоритме. То же самое скажу и про работу DMA. Похоже ARM не плохо поработало по оптимизации ядра М.
0
TWW
03.04.2014, 14:02 58
Да, поциклово привязать какой-то код ко времени не получается. Он обязательно нацепляет ошибок. Например, попробуйте читать константы из флеша, непредсказуемый процесс.. Это всё я случайно заметил, когда для экспериментов начал измерять время выполнения разных программ. Измерял счётчиком циклов, который встроен в DWT. Команды перехода то же, не самый предсказуемый участок. Был то же слегка в шоке, когда понял, что время гуляет +/- 3 часа.. Думаю, что это одна из причин, почему линейные 8-битные архитектуры живут. Там хоть мегабайт кода, можно высчитать до цикла. Но к счастью, мне таких задач не попадалось.

Ассемблер в кортексах - всё равно что БМВ и запорожец. ПИКи вспоминаются как кошмар...
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
03.04.2014, 15:14 59
если вы хотите измерять такты на кортексе или любом другом сложном проце - вы что-то делаете неправильно. то бишь, забиваете гвозди микроскопом. вот и весь секрет.
0
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 408
03.04.2014, 23:59 60
Цитата Сообщение от TWW
Ассемблер в кортексах - всё равно что БМВ и запорожец. ПИКи вспоминаются как кошмар...
Как страшно жить! Может просто сразу начать семечками торговать?
0
03.04.2014, 23:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2014, 23:59
Помогаю со студенческими работами здесь

Начал изучать PHP
Здравствуйте, хочу начать изучать Php более менее знаю Delphi(Pascal) т.е основы программирования...

Только начал изучать C++
Здравствуйте.Я только два дня назад начал изучать С++.И вот такой вопрос,я не пойму как узнать...

Начал изучать ассемблер
Я только начал изучать ассемблер и дошел до датчика DS18b20. Хочу получить ответ датчика. ...

Начал изучать javascript по книге
Начал изуать по книге javascripr подробное рукаводство (Дэвид Флэнаган) орелли. Начал изучать...

только начал изучать программирование
Можете объяснить разницу в коде 1. a= print(sum(a)) - вот этот вариант работает правильно 2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru