Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер KEIL
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт дек 18, 2025 13:07:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 102 ]    , , , , 5,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:15:21 
Грызет канифоль

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Вс сен 05, 2010 15:35:50
Сообщений: 285
Рейтинг сообщения: 0
ну и на самом деле в вопросе, надо или нет разбираться с ассемблером, мне видится важным то, что спорить о том, нужно или нет писать на ассемблере, когда ты это умеешь делать - это совсем не то, чем спорить об этом, когда писать на ассемблере ты не можешь.. :)

Добавлено after 48 seconds:
Cortex M7 - полторы тыщщи инструкций

Это не так уж и много, если помнить о том, что они делятся на группы по функционалу, а суффиксы ортогональны самим инструкциям. То есть все это создает реальные возможности решать задачу освоения по частям.


ну да


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:17:54 
Первый раз сказал Мяу!

Карма: -18
Рейтинг сообщений: 3
Зарегистрирован: Чт фев 13, 2020 07:41:02
Сообщений: 27
Рейтинг сообщения: 0
Сколько-сколько насчитали регистров? 8? А давайте вместе еще раз заглянем в мануал и посчитаем. Ну-с, раааааз, двааааа, трии... r0 - r12 - это 13 штук выходит. И три - специализированных - счетчик программ, указатель стека вызовов для Си, регистр возврата для Си. Однако, доступ к тем, что r8 и выше - только через 32-битный вариант инструкции. Помните, что я раньше писал? Забыли? Надобно вернуться и ликвидировать пробел на ранних этапах, чтоб потом не ага.

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

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

Выигрыша ассемблер по сравнению с Си не шибко то дает, а иногда и вообще не дает, поскольку у Си есть 7 настраиваемых уровней оптимизации при генерации кода.

_________________
еавс!


Последний раз редактировалось Кислородный Пт фев 21, 2020 16:25:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:22:29 
Грызет канифоль

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Вс сен 05, 2010 15:35:50
Сообщений: 285
Рейтинг сообщения: 0
>> Однако, доступ к тем, что r8 и выше - только через 32-битный вариант инструкции.

Так а какие 32-х битные варианты инструкций? Реально на Cortex M0 пользоваться этими регистрами могу команда B, ADD, и ldr r, [pc, #Disp]
Если не ошибаюсь, все. То есть регистры есть, но всерьез их использовать С программе будет точно затруднительно ( программисту, впрочем, тоже не разгуляться...).
Даже банальная mov и то с ними не работает.


Последний раз редактировалось protoder Пт фев 21, 2020 20:17:19, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:34:51 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 179
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3382
Рейтинг сообщения: 0
protoder писал(а):
Например, для пользователей бесплатного Keil с его ограничением на 32 кБ. это наверняка может оказаться полезным.
Можно взять бесплатный GCC и бесплатную IDE для него и забыть об ограничениях.
Вот к примеру пошаговое выполнение асма в одной из бесплатных IDE.
СпойлерИзображение


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:36:34 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24611
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
когда дойдете до USB

USB даже на Си самому накалякать довольно сложно. А если брать готовый открытый стек, то в качестве занимательного ребуса можно его переписать на АСМе. Чиста по приколу. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 16:38:15 
Первый раз сказал Мяу!

Карма: -18
Рейтинг сообщений: 3
Зарегистрирован: Чт фев 13, 2020 07:41:02
Сообщений: 27
Рейтинг сообщения: 2
Цитата:
Даже банальная mov и то с ними не работает.

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

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

_________________
еавс!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 19:42:53 
Грызет канифоль

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Вс сен 05, 2010 15:35:50
Сообщений: 285
Рейтинг сообщения: 0
>> Чой-то не работает? Работает. Помните, я давал документ с описанием побитовой структуры команд? Ну воооот.

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

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

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 19:55:50 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 179
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3382
Рейтинг сообщения: 0
protoder писал(а):
И кстати почему именно HID?
Потому что с дровами нет проблем. Используются системные и устройство работает начиная с Win95 (с пакетом обновления) до текущей версии Win10.
В большинстве случаев скорости 64 КБ/с хватает, а если нет но очень нужно, в дескриптор конфигурации добавляем требуемое число интерфейсов, с которыми связываем свою конечную точку и получаем 64 КБ/с на каждый интерфейс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 21, 2020 20:13:16 
Грызет канифоль

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


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

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

Справедливости ради, ЛУФУ перепелить на ассемблер я не одолел :) Но там и мотивации меньше было. Все таки LUFA - качественная штука и на С вполне годится, если причесать немного под себя.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Ср фев 26, 2020 15:58:17 
Грызет канифоль

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт фев 28, 2020 05:44:54 
Грызет канифоль

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Вс сен 05, 2010 15:35:50
Сообщений: 285
Рейтинг сообщения: 0
Сегодня не поленился к ассемблерной процедурке накидать сишный аналог. Погонял с разными настройками.
Ну что тут сказать. Компилятор откровенно странный. Он потрясающе хорошо исправляет ошибки программиста в плане оптимизации. ТО есть он очень тщательно анализирует контексты, учитывает константы (так что забывать про const не стоит!). Например, при оптимизации О3 единожды вызываемая ассемблерная функция, получающая параметром массив констант, оказалась даже больше, чем сгенерированная компилятором. При этом половину вычислений компилятор произвел во время компиляции, анализируя значения параметров. Функция, понятно, была развернута inline.
Увы, такое возможно лишь при однократном вызове функции. При вызове ее несколько раз с разными параметрами результат, понятно, оказался иным. Как и при использовании не константного, а обычного массива.
Вобщем, местами компилятор просто великолепен... Что только увеличивает досаду из-за совершенно не понятных допускаемых им ляпов. Так, он крайне плохо работает с адресной арифметикой. Иногда в пустую гоняет данные между регистрами или выполняет иные, ни чем не объяснимые действия. В итоге - откомпилированный код в полтора - три раза больше, чем ассемблерный аналог. Если не поленюсь, я завтра скину результаты и листинги.
Да, еще одно сильное свойство этого компилятора - при объявлении классов без данных и без виртуальных методов, компилятор не создает переменных для их экземпляров. Что при написании библиотек для работы с железом может быть очень ценно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт мар 13, 2020 01:26:54 
Открыл глаза
Аватар пользователя

Карма: 5
Рейтинг сообщений: 20
Зарегистрирован: Пн апр 20, 2015 14:00:32
Сообщений: 63
Рейтинг сообщения: 0
protoder

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

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

Понадобится только блокнот с раскраской :beer:

_________________
NXP i.MX7D на чистом ассемблере


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт мар 13, 2020 14:50:41 
Вымогатель припоя

Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Пт янв 30, 2009 14:50:35
Сообщений: 635
Откуда: Солнечногорск
Рейтинг сообщения: 0
protoder

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


Ну, как минимум, в Кейле (и в IARе) есть достаточно удобная отладка и т.д. и т.п., причём доступная "из коробки" -- а чтобы победить GDB, нужно приложить довольно большие усилия, если раньше с ним дел не имел.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Сб мар 14, 2020 20:02:28 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1651
Рейтинг сообщения: 0
Все таки LUFA - качественная штука и на С вполне годится, если причесать немного под себя.
Что там качественного? Вещь кривая, со многими багами. На днях запускал USB-device на XMC4500. За основу взял LUFA и перепиливал её под себя. В процессе этого наткнулся на несколько багов. И это при том, что я не так уж и много чего использовал из функционала USB (никаких профилей, только базовый обмен через эндпоинты; и только FS USB-device).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 13:53:08 
Первый раз сказал Мяу!

Зарегистрирован: Чт апр 30, 2015 15:36:18
Сообщений: 22
Откуда: ЯНАО
Рейтинг сообщения: 0
Здравствуйте товарищи!
Помогите завести 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:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 19:05:30 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Команды GET_... это макросы

а 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));


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 19:50:10 
Первый раз сказал Мяу!

Зарегистрирован: Чт апр 30, 2015 15:36:18
Сообщений: 22
Откуда: ЯНАО
Рейтинг сообщения: 0
Команды GET_... это макросы

а 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));


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

По поводу проверки BSY это я только для теста сделал. Пускай новые данные пишутся после передачи данных... Да хоть как-нибудь пускай это заработает)) Даже если неверное значение будет передаваться, с этим разберемся.
А вот с записью в регистр SPI_DR ума не приложу, в чём проблема...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 20:17:03 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
А вот с записью в регистр SPI_DR ума не приложу, в чём проблема...

Может в DR и пишет, а режимы для пинов неправильно настроены...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 20:22:26 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Вы с assembler на ARM поверхностно наверное знакомы?

Немного тренировался (делал несложный проектик), но на другом хорошем (имхо) ассемблере Fasmarm - там без суфиксов все прекрасно и понятно. Тут примерчик с единственным и понятным макросом "movlit", все остальное стандартно:
http://openefi.blogspot.com/2012/05/arm ... rrupt.html
ELF, сделаный Fasmarm прекрасно дебажит и симулирует...Keil и Протеус. В Fasmarm есть всяких прекрасных фишек, которых нет у других ассемблеров - например структуры, а метки можно везде по тексту одинаковые типа "@@" и т.д..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер KEIL
СообщениеДобавлено: Пт май 22, 2020 20:26:50 
Первый раз сказал Мяу!

Зарегистрирован: Чт апр 30, 2015 15:36:18
Сообщений: 22
Откуда: ЯНАО
Рейтинг сообщения: 0
Reflector, ставлю по RM0041, страница 546. Да и сверялся с различными источниками, например теми, кто писал на C настройку режима.
oleg110592, Может быть и хороший, может быть тоже попробую, но пока что зашел кейловский, т.к. есть хорошая и единственная методичка на русском чисто по асму :))


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 102 ]    , , , , 5,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y