Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

С IARом имею малое знакомство. STM8 пробовал. Пробовал разок, чтобы почувствовать что за камень, прогал на асме. У STM8 оказался мягко говоря странный синтаксис ассемблера.
Но я не это хотел сказать. Официальное описание синтаксиса асма для IAR под STM8 имеет кучу ошибок, пришлось тыком выяснять где фигурная скобка, а где простая и т.п.. А Chettuser выявил, до кучи, косяк в инклуднике.

Вот не знаю, конечно, как IAR с AVR дружит.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

чтобы создать проект "на ассме" вы должны создать файлик *.S, в котором описать глобальную метку main - вот и все! вместо таблицы векторов - глобальные метки. если кроме ассемблера исходников на Си не будет - это все, что вы должны сделать. и будет вам счастье.


Можно примеры файлика.s и .bat, чтобы странслировать и посмотреть листинг?
У меня большие проблемы с синтаксисом.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

У меня атмел студио 6. Создаете обычный сишный проект. А потом в него добавляете сколько угодно ассемблерных файлов .s. Про батник я тут ничего не знаю.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

Z_h_e писал(а):сколько угодно ассемблерных файлов .s
я не зря писал, что добавлять надо файлы .S - avr-gcc отличает большие и маленькие буквы в именах файлов и по-разному их обрабатывает. в частности, с большой буквой S ассемблер обрабатывает файл препроцессором, а с маленькой - не обрабатывает. так что расширение может приносить проблемы, если задавать его, не заморачиваясь.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Я запускаю
c:\avr\asm\avrasm2 -llst.asm -fI -e%1_ee.hex -fI %1.asm
на выходе имею lst и два .hex
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

trofim2 писал(а):Я запускаю
c:\avr\asm\avrasm2 -llst.asm -fI -e%1_ee.hex -fI %1.asm
и что? как это соотносится с этим:
trofim2 писал(а):Можно примеры файлика.s и .bat, чтобы странслировать и посмотреть листинг?
У меня большие проблемы с синтаксисом.
обращаю ваше внимание, что мои последние посты (на протяжении 2-3 страниц форума) касаются не avrasm2, а avr-as, который стандартно не входит в комплект AVR Studio, а является частью WinAVR. так же он должен быть в комплекте Atmel Toolchain, т.е. в комплекте Atmel Studio 6 и новее.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15543
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Дык... и avr-as и avr32-as еще у 4.19 в комплекте идут
в папке C:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin
:roll:
только снова батники запуска писать и еще один вариант синтаксиса прорабатывать...
мндяаа... :facepalm:
Да и рассчитано сие средство скорее для работы в комплексе AVR Toolchain, чем для автономно-самостоятельного применения...
:dont_know:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

BOB51 писал(а):рассчитано сие средство скорее для работы в комплексе AVR Toolchain, чем для автономно-самостоятельного применен
дык я об этом уже сколько толкую!

и не батники тут нужны, а makefile.

в конце концов можно в командной строке написать вызов avr-gcc с указанием ему исходника на асме и остальными ключиками для окончательной компиляции и линковки (avr-gcc сам разберется, что за исходник ему подсунули и вызовет для компиляции avr-as)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ptr128 »

Я вот тоже все никак не пойму народ. Если использовать GNU avr-as, то зачем тогда вообще писать на ассемблере в *.S файлах, если можно тоже самое написать в *.c, используя оператор asm.
avr-as именно для этого и предназначен вообще то.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Я показал как сейчас транслирую код с помощью avrasm2, но как вы писали, что avr-as имеет больше
возможностей с точки зрения макросов. Хотелось бы попробовать.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

ptr128 писал(а):Я вот тоже все никак не пойму народ.
чего ж тут непонятного? во-первых, внутри asm() нельзя применять макросы - основная плюшка avr-as. во-вторых, синтаксис ассемблерных вставок GCC уж очень сильно отличается от привычного ассемблера...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Чет я тоже не пойму.
В посте от "Вт окт 25, 2016" приведен пример использования макроса в прерывании на asm.

Или я чего то не до понял?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

trofim2 писал(а):Чет я тоже не пойму
во-первых, если ссылаетесь на пост, то делайте это обычным способом - ссылкой. иначе понять, что вы имеете ввиду, затруднительно.
во-вторых, я специально для вас написал несколько сообщений, чтобы разъяснить вам, что avr-as не применяют так, как применяли avrasm2. это хотя бы понятно?
ARV писал(а):и не батники тут нужны, а makefile.

в конце концов можно в командной строке написать вызов avr-gcc с указанием ему исходника на асме и остальными ключиками для окончательной компиляции и линковки (avr-gcc сам разберется, что за исходник ему подсунули и вызовет для компиляции avr-as)
ARV писал(а):обращаю ваше внимание, что мои последние посты (на протяжении 2-3 страниц форума) касаются не avrasm2, а avr-as, который стандартно не входит в комплект AVR Studio, а является частью WinAVR. так же он должен быть в комплекте Atmel Toolchain, т.е. в комплекте Atmel Studio 6 и новее.
ARV писал(а):чтобы создать проект "на ассме" вы должны создать файлик *.S, в котором описать глобальную метку main - вот и все! вместо таблицы векторов - глобальные метки. если кроме ассемблера исходников на Си не будет - это все, что вы должны сделать. и будет вам счастье.

но, я ранее писал, и это наиболее актуально:
ARV писал(а):avr-as предназначен (и наиболее удобен) именно как средство расширения проектов Си/С++, а не как средство разработки проектов на ассемблере целиком (хотя можно и это, разумеется).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Я всё прекрасно понимаю, но похоже придумал себе невесть что.
Я понял так:
1. Создаем простой файл на Си.
2. В этом файле имеем строку "asm()".
3. Включаем файл (инклюдом) с программой, написаной на асм.
4. Транслируем и получаем результат.

Это моя глобальная ошибка?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

trofim2 писал(а):Это моя глобальная ошибка?
вот это - глобальнейшая ошибища:
trofim2 писал(а):Включаем файл (инклюдом) с программой, написаной на асм
никогда никаких инклюдов других файлов с исходными текстами быть не должно! в Си инклюдятся только заголовочные файлы, которые не должны содержать реализаций функций - только описания и определения, да и то с ограничениями!

asm - это "оператор" ассемблерной вставки, он имеет особый формат, сильно отличающийся от привычного ассемблерного исходника.
сравните сами:
ассемблерная вставка
Спойлер

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

asm volatile ( ";                 \n\t \
  ldi   %[status],%[TX_Disable]     \n\t \
  sts   %[UCSRnB_addr], %[status]   \n\t \
  sbi   %[cs_port],%[cs_pin]        \n\t \
  ldi   %[counter], %[delay]  ;1    \n   \
WAIT_LOOP%=:                        \n\t \
  dec   %[counter]            ;1    \n\t \
  brne  WAIT_LOOP%=           ;1/2  \n\t \
  cbi   %[cs_port],%[cs_pin]  ;2    \n\t \
  ldi   %[status],%[TX_Enable]      \n\t \
  sts   %[UCSRnB_addr], %[status]   \n   \
  "
  : [counter] "=d" (counter), [status] "=d" (status)
  : [delay] "I" (_ST7735_SPI_RAMRD_DELAY_CYCLES_/3+1),
    [UCSRnB_addr] "M" (_ST7735_SPI_UCSRnB_ADDRESS_),
    [TX_Enable] "M" ((0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(0<<RXEN0)|(1<<TXEN0)),
    [TX_Disable] "M" ((0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(0<<RXEN0)|(0<<TXEN0)),
    [cs_port] "I" (PIN_TO_PORTn_OFFSET(ST7735_CHIPSELECT_PIN)),
    [cs_pin] "I" (PIN_TO_PINn_BIT(ST7735_CHIPSELECT_PIN))
  : "cc" );
обычный ассемблерный код примерно с тем же функционалом
Спойлер

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

  ldi   r16,TX_Disable
  sts   UCSRnB_addr, r16
  sbi   PORTB, cs_pin
  ldi   r22, delay
WAIT_LOOP:
  dec   r22
  brne  WAIT_LOOP
  cbi   PORTB, cs_pin
  ldi   r16, TX_Enable
  sts   UCSRnB_addr, r16


поэтому правильное использование ассемблерного модуля должно быть таким:
1. создаем проект WinAVR (в AVR Studio 4.xx - как в более новых, не знаю)
2. создаем файл с расширением .S
3. добавляем его в проект
4. задаем опции проекта - тип МК, частоту и т.п.
5. компилируем

в файле .S у вас могут быть описанные по правилам синтаксиса avr-as функции, которые можно использовать в других исходниках (файлы .c или .S), причем сами эти функции тоже могут использовать глобальные переменные, определенные в других файлах проекта... но в самом простейшем случае у вас может быть единственный исходник .S - в этом случае он обязательно должен содержать глобальную метку main - это и будет главная функция. при этом следует знать, что ДО перехода на эту метку автоматически будет настроен указатель стека и проведена очистка памяти под глобальные неинициализированные переменные, а инициализированные будут проинициализированы - все как в Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение dimmer »

Никого не хочу обидеть, но не слишком ли много, скажем так - действий, ради более мощного препроцессора. Или я ошибаюсь, и выигрываешь ещё что-то?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ptr128 »

ARV писал(а):
ptr128 писал(а):Я вот тоже все никак не пойму народ.

внутри asm() нельзя применять макросы - основная плюшка avr-as.

С какого перепугу?

Компилирует и работает:

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

static inline void st7735_spi_tft_read_cs_strobe(void)
{
  uint8_t counter, status;

  asm volatile ( ";                 \n\t \
        .macro SUM  parm              \n\t \
        add   r0, \\parm              \n\t \
        .endm                         \n\t \
  SUM   r1                          \n\t \
  ldi   %[status],%[TX_Disable]     \n\t \
  sts   %[UCSRnB_addr], %[status]   \n\t \
  sbi   %[cs_port],%[cs_pin]        \n\t \
  ldi   %[counter], %[delay]  ;1    \n   \
WAIT_LOOP%=:                        \n\t \
  dec   %[counter]            ;1    \n\t \
  brne  WAIT_LOOP%=           ;1/2  \n\t \
  cbi   %[cs_port],%[cs_pin]  ;2    \n\t \
  ldi   %[status],%[TX_Enable]      \n\t \
  sts   %[UCSRnB_addr], %[status]   \n\t \
  "
  : [counter] "=d" (counter), [status] "=d" (status)
  : [delay] "I" (_ST7735_SPI_RAMRD_DELAY_CYCLES_/3+1),
    [UCSRnB_addr] "M" (_ST7735_SPI_UCSRnB_ADDRESS_),
    [TX_Enable] "M" ((0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(0<<RXEN0)|(1<<TXEN0)),
    [TX_Disable] "M" ((0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(0<<RXEN0)|(0<<TXEN0)),
    [cs_port] "I" (PIN_TO_PORTn_OFFSET(ST7735_CHIPSELECT_PIN)),
    [cs_pin] "I" (PIN_TO_PINn_BIT(ST7735_CHIPSELECT_PIN))
  : "cc" );
}
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение dimmer »

Мда... Однако... Интересную тему затронули. Большое спасибо всем за информацию, самому бы пришлось долго копаться, что-бы получить какое-то внятное представление. Я думаю, что если в будущем понадобится писать что-то больше 8 - 16Кбайт, то одним ассемблером наверно не обойдусь. Но пока хватает avrasm2.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Меня вполне устраивает avrasm2, кроме отсутствия локальных меток.
Надеялся, что можно будет написать макросы для этих целей.
Можно сделать вывод, что для тех кто очень любит ассемблер можно забыть о avr-as.
Какие еще варианты могут быть? Какие еще трансляторы есть?
Ответить

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