Ассемблер (ASM) для AVR в вопросах и ответах
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
С IARом имею малое знакомство. STM8 пробовал. Пробовал разок, чтобы почувствовать что за камень, прогал на асме. У STM8 оказался мягко говоря странный синтаксис ассемблера.
Но я не это хотел сказать. Официальное описание синтаксиса асма для IAR под STM8 имеет кучу ошибок, пришлось тыком выяснять где фигурная скобка, а где простая и т.п.. А Chettuser выявил, до кучи, косяк в инклуднике.
Вот не знаю, конечно, как IAR с AVR дружит.
Но я не это хотел сказать. Официальное описание синтаксиса асма для IAR под STM8 имеет кучу ошибок, пришлось тыком выяснять где фигурная скобка, а где простая и т.п.. А Chettuser выявил, до кучи, косяк в инклуднике.
Вот не знаю, конечно, как IAR с AVR дружит.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
чтобы создать проект "на ассме" вы должны создать файлик *.S, в котором описать глобальную метку main - вот и все! вместо таблицы векторов - глобальные метки. если кроме ассемблера исходников на Си не будет - это все, что вы должны сделать. и будет вам счастье.
Можно примеры файлика.s и .bat, чтобы странслировать и посмотреть листинг?
У меня большие проблемы с синтаксисом.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У меня атмел студио 6. Создаете обычный сишный проект. А потом в него добавляете сколько угодно ассемблерных файлов .s. Про батник я тут ничего не знаю.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
я не зря писал, что добавлять надо файлы .S - avr-gcc отличает большие и маленькие буквы в именах файлов и по-разному их обрабатывает. в частности, с большой буквой S ассемблер обрабатывает файл препроцессором, а с маленькой - не обрабатывает. так что расширение может приносить проблемы, если задавать его, не заморачиваясь.Z_h_e писал(а):сколько угодно ассемблерных файлов .s
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я запускаю
c:\avr\asm\avrasm2 -llst.asm -fI -e%1_ee.hex -fI %1.asm
на выходе имею lst и два .hex
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 в вопросах и ответах
и что? как это соотносится с этим:trofim2 писал(а):Я запускаю
c:\avr\asm\avrasm2 -llst.asm -fI -e%1_ee.hex -fI %1.asm
обращаю ваше внимание, что мои последние посты (на протяжении 2-3 страниц форума) касаются не avrasm2, а avr-as, который стандартно не входит в комплект AVR Studio, а является частью WinAVR. так же он должен быть в комплекте Atmel Toolchain, т.е. в комплекте Atmel Studio 6 и новее.trofim2 писал(а):Можно примеры файлика.s и .bat, чтобы странслировать и посмотреть листинг?
У меня большие проблемы с синтаксисом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дык... и avr-as и avr32-as еще у 4.19 в комплекте идут
в папке C:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin
только снова батники запуска писать и еще один вариант синтаксиса прорабатывать...
мндяаа...
Да и рассчитано сие средство скорее для работы в комплексе AVR Toolchain, чем для автономно-самостоятельного применения...

в папке C:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin
только снова батники запуска писать и еще один вариант синтаксиса прорабатывать...
мндяаа...
Да и рассчитано сие средство скорее для работы в комплексе AVR Toolchain, чем для автономно-самостоятельного применения...

- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
дык я об этом уже сколько толкую!BOB51 писал(а):рассчитано сие средство скорее для работы в комплексе AVR Toolchain, чем для автономно-самостоятельного применен
и не батники тут нужны, а makefile.
в конце концов можно в командной строке написать вызов avr-gcc с указанием ему исходника на асме и остальными ключиками для окончательной компиляции и линковки (avr-gcc сам разберется, что за исходник ему подсунули и вызовет для компиляции avr-as)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ptr128
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Чт окт 06, 2016 21:12:07
- Откуда: Южное Бутово
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я вот тоже все никак не пойму народ. Если использовать GNU avr-as, то зачем тогда вообще писать на ассемблере в *.S файлах, если можно тоже самое написать в *.c, используя оператор asm.
avr-as именно для этого и предназначен вообще то.
avr-as именно для этого и предназначен вообще то.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я показал как сейчас транслирую код с помощью avrasm2, но как вы писали, что avr-as имеет больше
возможностей с точки зрения макросов. Хотелось бы попробовать.
возможностей с точки зрения макросов. Хотелось бы попробовать.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
чего ж тут непонятного? во-первых, внутри asm() нельзя применять макросы - основная плюшка avr-as. во-вторых, синтаксис ассемблерных вставок GCC уж очень сильно отличается от привычного ассемблера...ptr128 писал(а):Я вот тоже все никак не пойму народ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Чет я тоже не пойму.
В посте от "Вт окт 25, 2016" приведен пример использования макроса в прерывании на asm.
Или я чего то не до понял?
В посте от "Вт окт 25, 2016" приведен пример использования макроса в прерывании на asm.
Или я чего то не до понял?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
во-первых, если ссылаетесь на пост, то делайте это обычным способом - ссылкой. иначе понять, что вы имеете ввиду, затруднительно.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 предназначен (и наиболее удобен) именно как средство расширения проектов Си/С++, а не как средство разработки проектов на ассемблере целиком (хотя можно и это, разумеется).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я всё прекрасно понимаю, но похоже придумал себе невесть что.
Я понял так:
1. Создаем простой файл на Си.
2. В этом файле имеем строку "asm()".
3. Включаем файл (инклюдом) с программой, написаной на асм.
4. Транслируем и получаем результат.
Это моя глобальная ошибка?
Я понял так:
1. Создаем простой файл на Си.
2. В этом файле имеем строку "asm()".
3. Включаем файл (инклюдом) с программой, написаной на асм.
4. Транслируем и получаем результат.
Это моя глобальная ошибка?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вот это - глобальнейшая ошибища: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 - это и будет главная функция. при этом следует знать, что ДО перехода на эту метку автоматически будет настроен указатель стека и проведена очистка памяти под глобальные неинициализированные переменные, а инициализированные будут проинициализированы - все как в Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Никого не хочу обидеть, но не слишком ли много, скажем так - действий, ради более мощного препроцессора. Или я ошибаюсь, и выигрываешь ещё что-то?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
писать на ассемблере - само по себе уже слишком много действий... однако ж это вас не останавливает...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ptr128
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Чт окт 06, 2016 21:12:07
- Откуда: Южное Бутово
Re: Ассемблер (ASM) для AVR в вопросах и ответах
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" );
}
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мда... Однако... Интересную тему затронули. Большое спасибо всем за информацию, самому бы пришлось долго копаться, что-бы получить какое-то внятное представление. Я думаю, что если в будущем понадобится писать что-то больше 8 - 16Кбайт, то одним ассемблером наверно не обойдусь. Но пока хватает avrasm2.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Меня вполне устраивает avrasm2, кроме отсутствия локальных меток.
Надеялся, что можно будет написать макросы для этих целей.
Можно сделать вывод, что для тех кто очень любит ассемблер можно забыть о avr-as.
Какие еще варианты могут быть? Какие еще трансляторы есть?
Надеялся, что можно будет написать макросы для этих целей.
Можно сделать вывод, что для тех кто очень любит ассемблер можно забыть о avr-as.
Какие еще варианты могут быть? Какие еще трансляторы есть?
