Ассемблер KEIL

Кто любит RISC в жизни, заходим, не стесняемся.
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

ну и на самом деле в вопросе, надо или нет разбираться с ассемблером, мне видится важным то, что спорить о том, нужно или нет писать на ассемблере, когда ты это умеешь делать - это совсем не то, чем спорить об этом, когда писать на ассемблере ты не можешь.. :)

Добавлено after 48 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=3794529#p3794529"][uquote="Кислородный",url="/forum/viewtopic.php?p=3794504#p3794504"]Cortex M7 - полторы тыщщи инструкций[/uquote]
Это не так уж и много, если помнить о том, что они делятся на группы по функционалу, а суффиксы ортогональны самим инструкциям. То есть все это создает реальные возможности решать задачу освоения по частям.[/uquote]

ну да
Реклама
Кислородный
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт фев 13, 2020 07:41:02

Re: Ассемблер KEIL

Сообщение Кислородный »

Сколько-сколько насчитали регистров? 8? А давайте вместе еще раз заглянем в мануал и посчитаем. Ну-с, раааааз, двааааа, трии... r0 - r12 - это 13 штук выходит. И три - специализированных - счетчик программ, указатель стека вызовов для Си, регистр возврата для Си. Однако, доступ к тем, что r8 и выше - только через 32-битный вариант инструкции. Помните, что я раньше писал? Забыли? Надобно вернуться и ликвидировать пробел на ранних этапах, чтоб потом не ага.

Конечно, набаловавшись вдоволь с ассемблером, у вас начнет уходить эйфория, по мере освоения стмок. А когда дойдете до USB, то и еще быстрее растает она.

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

Выигрыша ассемблер по сравнению с Си не шибко то дает, а иногда и вообще не дает, поскольку у Си есть 7 настраиваемых уровней оптимизации при генерации кода.
Последний раз редактировалось Кислородный Пт фев 21, 2020 16:25:16, всего редактировалось 1 раз.
еавс!
Реклама
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

>> Однако, доступ к тем, что r8 и выше - только через 32-битный вариант инструкции.

Так а какие 32-х битные варианты инструкций? Реально на Cortex M0 пользоваться этими регистрами могу команда B, ADD, и ldr r, [pc, #Disp]
Если не ошибаюсь, все. То есть регистры есть, но всерьез их использовать С программе будет точно затруднительно ( программисту, впрочем, тоже не разгуляться...).
Даже банальная mov и то с ними не работает.
Последний раз редактировалось protoder Пт фев 21, 2020 20:17:19, всего редактировалось 1 раз.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Ассемблер KEIL

Сообщение Мурик »

protoder писал(а):Например, для пользователей бесплатного Keil с его ограничением на 32 кБ. это наверняка может оказаться полезным.
Можно взять бесплатный GCC и бесплатную IDE для него и забыть об ограничениях.
Вот к примеру пошаговое выполнение асма в одной из бесплатных IDE.
СпойлерИзображение
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25219
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Ассемблер KEIL

Сообщение КРАМ »

[uquote="Кислородный",url="/forum/viewtopic.php?p=3794540#p3794540"]когда дойдете до USB[/uquote]
USB даже на Си самому накалякать довольно сложно. А если брать готовый открытый стек, то в качестве занимательного ребуса можно его переписать на АСМе. Чиста по приколу. :)
Реклама
Кислородный
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт фев 13, 2020 07:41:02

Re: Ассемблер KEIL

Сообщение Кислородный »

Даже банальная mov и то с ними не работает.
Чой-то не работает? Работает. Помните, я давал документ с описанием побитовой структуры команд? Ну воооот.
К тому же, а знаете ли вы, что есть вариант загрузки полного 32-битного слова через вот такую операцию: ldr r3, [pc, #12] , то есть через счетчик программ (значение, записанное в нем) и смещение от него получается адрес, по которому находится 32-битное значение, которое и будет загружено в указанный регистр целиком как есть за один раз.

Да, в качестве кайфового развлечения предлагаю запилить на правоверном ассемблере USB HID. Если получится, вы наверно будете первым в мире, кто это сделал.
еавс!
Реклама
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

>> Чой-то не работает? Работает. Помните, я давал документ с описанием побитовой структуры команд? Ну воооот.

А вот помню. Только я еще и тогда не очень понял, что вы имели ввиду. Вы, помнится, утверждали, что Cortex M0 умеет выполнять, например, условные префиксы. Я ни какого намека на это ни в какой документации не нашел. Так что если вы объясните, что имеете ввиду, будет здорово.
В частности , на счет той же mov по отношению к старшим регистрам в Cortex M0. По моим данным, нет такой команды.

>> К тому же, а знаете ли вы, что есть вариант загрузки полного 32-битного слова через вот такую операцию: ldr r3, [pc, #12]
Есть, но это ни чего не дает. Мы грузим в регистры константы. А как ее использовать-то потом? Только для косвенных переходов, что не так часто применяется. Да еще в операциях сложения. Все. На этом функционал старших регистров исчерпан.

>> Да, в качестве кайфового развлечения предлагаю запилить на правоверном ассемблере USB HID. Если получится, вы наверно будете первым в мире, кто это сделал.

Хотел ответить что-то вроде того, что нет, я все таки сумасшедший не на столько... Но потом вспомнил, что для атмелов была библиотека, позволяющая подключать к USB контроллеры без USB модуля. Так вот, я ее на ассемблер как раз переписал. И это был как раз один из примеров обоснованного применения ассемблера. 3-х кратный выигрыш по объему ( для огромной библиотеки это важно), 2-х кратный рост скорости обмена.

И кстати почему именно HID? Нет, все режимы. У меня в BULK работала ( хотя это и не совсем по стандарту). И нет, я первым не был. Первым была сама атмел. Но мне ее вариант по ряду причин не подошел (они под мелкий 8-милапый камень сделали. А мне нужен был взрослый контроллер. И тут как раз сработал главный минус ассемблера. Переделать на ассемблер С- библиотеку оказалось проще, чем переделать ассемблерный код для одного камня на код для другого). Пришлось лепить самому.
Сейчас эта библиотека уже не актуальна, контроллеры с USB стали широко доступными. а несколько лет назад оно было очень круто.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Ассемблер KEIL

Сообщение Мурик »

protoder писал(а):И кстати почему именно HID?
Потому что с дровами нет проблем. Используются системные и устройство работает начиная с Win95 (с пакетом обновления) до текущей версии Win10.
В большинстве случаев скорости 64 КБ/с хватает, а если нет но очень нужно, в дескриптор конфигурации добавляем требуемое число интерфейсов, с которыми связываем свою конечную точку и получаем 64 КБ/с на каждый интерфейс.
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

[uquote="Мурик",url="/forum/viewtopic.php?p=3794664#p3794664"]
protoder писал(а):И кстати почему именно HID?
Потому что с дровами нет проблем. Используются системные и устройство работает начиная с Win95 (с пакетом обновления) до текущей версии Win10.
В большинстве случаев скорости 64 КБ/с хватает, а если нет но очень нужно, в дескриптор конфигурации добавляем требуемое число интерфейсов, с которыми связываем свою конечную точку и получаем 64 КБ/с на каждый интерфейс.[/uquote]

Ну, в плане драйверов всегда можно организовать COM-порт. Да и lib-usb с пакетом драйвером поставляется. Так что да - если скорости хватает, HID ни вопрос. А если нет - свет клином на ней не сошелся.

Но с... э-э-э... товарищем Кислородным контекст немного иной был. Про то, что не только HID, но и вообще весь обмен по USB, включая аппаратную его часть, писали люди на ассемблере... Правда USB был низкоскоростным...

Справедливости ради, ЛУФУ перепелить на ассемблер я не одолел :) Но там и мотивации меньше было. Все таки LUFA - качественная штука и на С вполне годится, если причесать немного под себя.
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

KEIL таки поддерживает ассемблер GCC формата! Только в 6-м компиляторе. Надо установить галку Assemble by using ARMCLang V6 в Опциях - Асм.
Только это надо не на весь проект вешать, а только на свои файлы. А то не откомпилируется стартап файл.
protoder
Грызет канифоль
Сообщения: 285
Зарегистрирован: Вс сен 05, 2010 15:35:50

Re: Ассемблер KEIL

Сообщение protoder »

Сегодня не поленился к ассемблерной процедурке накидать сишный аналог. Погонял с разными настройками.
Ну что тут сказать. Компилятор откровенно странный. Он потрясающе хорошо исправляет ошибки программиста в плане оптимизации. ТО есть он очень тщательно анализирует контексты, учитывает константы (так что забывать про const не стоит!). Например, при оптимизации О3 единожды вызываемая ассемблерная функция, получающая параметром массив констант, оказалась даже больше, чем сгенерированная компилятором. При этом половину вычислений компилятор произвел во время компиляции, анализируя значения параметров. Функция, понятно, была развернута inline.
Увы, такое возможно лишь при однократном вызове функции. При вызове ее несколько раз с разными параметрами результат, понятно, оказался иным. Как и при использовании не константного, а обычного массива.
Вобщем, местами компилятор просто великолепен... Что только увеличивает досаду из-за совершенно не понятных допускаемых им ляпов. Так, он крайне плохо работает с адресной арифметикой. Иногда в пустую гоняет данные между регистрами или выполняет иные, ни чем не объяснимые действия. В итоге - откомпилированный код в полтора - три раза больше, чем ассемблерный аналог. Если не поленюсь, я завтра скину результаты и листинги.
Да, еще одно сильное свойство этого компилятора - при объявлении классов без данных и без виртуальных методов, компилятор не создает переменных для их экземпляров. Что при написании библиотек для работы с железом может быть очень ценно.
Аватара пользователя
Мяукните!
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн апр 20, 2015 14:00:32
Контактная информация:

Re: Ассемблер KEIL

Сообщение Мяукните! »

protoder

Мур, если что! Возможно я не знаю всей истории. Но понял так, что вы пытаетесь писать на чистом ассемблере для ARM? Но тогда зачем вам Кейл? Переходите на binutils.

Заодно, получите скорость компиляции, предельную компактность среды разработки и полную русификацию - переменные и имена меток можно объявлять на русском языке!

Понадобится только блокнот с раскраской :beer:
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: Ассемблер KEIL

Сообщение SII »

[uquote="Мяукните!",url="/forum/viewtopic.php?p=3806264#p3806264"]protoder

Но тогда зачем вам Кейл? Переходите на [url=http://stm32asm.ru/407/new_clear_gcc.htm]binutils[/uquote]

Ну, как минимум, в Кейле (и в IARе) есть достаточно удобная отладка и т.д. и т.п., причём доступная "из коробки" -- а чтобы победить GDB, нужно приложить довольно большие усилия, если раньше с ним дел не имел.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Ассемблер KEIL

Сообщение jcxz »

[uquote="protoder",url="/forum/viewtopic.php?p=3794671#p3794671"]Все таки LUFA - качественная штука и на С вполне годится, если причесать немного под себя.[/uquote]Что там качественного? Вещь кривая, со многими багами. На днях запускал USB-device на XMC4500. За основу взял LUFA и перепиливал её под себя. В процессе этого наткнулся на несколько багов. И это при том, что я не так уж и много чего использовал из функционала USB (никаких профилей, только базовый обмен через эндпоинты; и только FS USB-device).
khamai
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт апр 30, 2015 15:36:18
Откуда: ЯНАО

Re: Ассемблер KEIL

Сообщение khamai »

Здравствуйте товарищи!
Помогите завести SPI2 на STM32F100RBT
В общем то суть проблемы в том, что данные в регистр SPI2_DR не записываются в режиме отладки (да даже и не в режиме отладки), хотя при работе в симуляторе регистр обновляется! Не могу понять в чем проблема. Пробовал зацикливать передачу данных, но на осциллографе не вижу ничего на ножках SCK и MOSI...
Мой код
Спойлер

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

				
				
				
				GET_BBand_Addr_To TMP2, RCC_APB1ENR, SPI2_EN
				STR _1, [TMP2]

				GET_Addr_To TMP1, SPI2_CR1
				MOV TMP2, #(0<<BR_0 | 0<<BR_1 | 1<<BR_2 | 1<<CPOL | 1<<CPHA | 1<<DFF | 0<<LSBFIRST | 1<<SSM | 1<<SSI | 1<<MSTR)
				STR TMP2, [TMP1]

				GET_BBand_Addr_To TMP2, SPI2_CR1, SPE
				STR _1, [TMP2]
				
				
				GET_Addr_To TMP1, SPI2_DR
				
				GET_BBand_Addr_To TMP2, SPI2_SR, BSY
				
				MOV TMP3, #0x01				
loop			
				export loop
				LDR TMP4, [TMP2]
				CMP _1, TMP4
				STREQ TMP3, [TMP1]
				ADDEQ TMP3, #1
				
				B loop
Команды GET_... это макросы, которые просто записывают адреса регистров и т.п. в регистры ЦПУ. В общем биты требуемого режима SPI2 (в режиме Master) выставляются правильно. Но именно в регистр DR ничего не пишется :oops:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Ассемблер KEIL

Сообщение oleg110592 »

[uquote="khamai",url="/forum/viewtopic.php?p=3844684#p3844684"]Команды GET_... это макросы[/uquote]
а STREQ, ADDEQ? Вроде команд таких нету:
http://infocenter.arm.com/help/index.js ... DIGAC.html
На всякий:
Флаг TXE автоматически устанавливается при записи в регистр данных - SPI_DR, и сбрасывается когда значение из регистра данных уходит в сдвиговый регистр. Флаг BSY устанавливается в "1", когда сдвиговый регистр не пуст, т.е. идет передача на линию.
На С приблизительно так:

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

    SPI2->DR=(value);
    while (!(SPI2->SR & SPI_I2S_FLAG_TXE) || (SPI2->SR & SPI_I2S_FLAG_BSY));
khamai
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт апр 30, 2015 15:36:18
Откуда: ЯНАО

Re: Ассемблер KEIL

Сообщение khamai »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3844792#p3844792"][uquote="khamai",url="/forum/viewtopic.php?p=3844684#p3844684"]Команды GET_... это макросы[/uquote]
а STREQ, ADDEQ? Вроде команд таких нету:
http://infocenter.arm.com/help/index.js ... DIGAC.html
На всякий:
Флаг TXE автоматически устанавливается при записи в регистр данных - SPI_DR, и сбрасывается когда значение из регистра данных уходит в сдвиговый регистр. Флаг BSY устанавливается в "1", когда сдвиговый регистр не пуст, т.е. идет передача на линию.
На С приблизительно так:

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

    SPI2->DR=(value);
    while (!(SPI2->SR & SPI_I2S_FLAG_TXE) || (SPI2->SR & SPI_I2S_FLAG_BSY));
[/uquote]

Вы с assembler на ARM поверхностно наверное знакомы? (не в обиду сказано, я и сам недавно начал по книге, но что-то уже понял :)) )
На асме для армов есть корень команды, всякие суффиксы, гибкие операнды и тд и тп.
STR - команда записи (корень), а за счёт суффикса EQ (equal) выполняется команда только если результат сравнения (CMP) "положительный", иначе они пропускаются.
Это получается псевдокоманда, компилятор кейла создает блоки If-Then автоматически.

По поводу проверки BSY это я только для теста сделал. Пускай новые данные пишутся после передачи данных... Да хоть как-нибудь пускай это заработает)) Даже если неверное значение будет передаваться, с этим разберемся.
А вот с записью в регистр SPI_DR ума не приложу, в чём проблема...
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Ассемблер KEIL

Сообщение Reflector »

[uquote="khamai",url="/forum/viewtopic.php?p=3844818#p3844818"]А вот с записью в регистр SPI_DR ума не приложу, в чём проблема...[/uquote]
Может в DR и пишет, а режимы для пинов неправильно настроены...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Ассемблер KEIL

Сообщение oleg110592 »

[uquote="khamai",url="/forum/viewtopic.php?p=3844818#p3844818"]Вы с assembler на ARM поверхностно наверное знакомы?[/uquote]
Немного тренировался (делал несложный проектик), но на другом хорошем (имхо) ассемблере Fasmarm - там без суфиксов все прекрасно и понятно. Тут примерчик с единственным и понятным макросом "movlit", все остальное стандартно:
http://openefi.blogspot.com/2012/05/arm ... rrupt.html
ELF, сделаный Fasmarm прекрасно дебажит и симулирует...Keil и Протеус. В Fasmarm есть всяких прекрасных фишек, которых нет у других ассемблеров - например структуры, а метки можно везде по тексту одинаковые типа "@@" и т.д..
khamai
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Чт апр 30, 2015 15:36:18
Откуда: ЯНАО

Re: Ассемблер KEIL

Сообщение khamai »

Reflector, ставлю по RM0041, страница 546. Да и сверялся с различными источниками, например теми, кто писал на C настройку режима.
oleg110592, Может быть и хороший, может быть тоже попробую, но пока что зашел кейловский, т.к. есть хорошая и единственная методичка на русском чисто по асму :))
Ответить

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