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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

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

Сообщение Rimsky »

ARV писал(а):
GP1 писал(а):Вот только мозги ужо шибко ржавые, не воспринимают Си ну ни как... :dont_know:
это преодолимо :)))

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

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

Сообщение ARV »

значит, надо тренироваться ДО начала работы по заказу, чисто в плане обучения/освоения.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Я вот тоже на асме катаю, хотя судя по последним задачам, которые стоит мне в дальнейшем предстоит решить, то придётся переходить на Си. С++ для ПК более-менее знаю, а Си для AVR (GCC, WinAVR) не сильно отличаются от Си для ПК. Разве что в Си AVR нет никаких API функций, но есть что-то наподобие при использовании различных библиотек. Но это не значит что я полностью слезу с АСМа. В зависимости от поставленной задачи, программы будут писаться или на АСМе или на Си.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

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

Логично, что если памяти всего 2 кб, то компактней АСМа не придумать =)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

А я как раз и кручусь на 2х килобайтах с АСМом.
Я даже делал сравнения:
Цикл на Си:

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

for(int a = 4; a>0; a--){PORTB=0x00; PORTB=0xFF;}

Тоже самое на АСМе:

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

ldi r17, 0x04
LOOP:
clr r16
out PortB, r16
ser r16
out PortB, r16
dec r17
brne LOOP
/////
///

Код на Си отнял больше памяти, но не намного. Где-то на 2 байта разница.
Но это ещё и от компоновщика Си зависит. Хороший компоновщик откомпилировал бы с минимальной затратой памяти.
Компилил Си в GCC(AVR Studio+WinAVR) и АСМ в AVRASMе2(AVR Studio).
Но если взглянуть на код Си и на код АСМа, то на Си проще решать сложные задачи, так как выглядит код нагляднее и с минимумом писанины.
У обоих языков есть свои грабли и свои преимущества. Знать советую оба языка.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

DX168B писал(а):

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

ldi r17, 0x04
LOOP:
clr r16
out PortB, r16
ser r16
out PortB, r16
dec r17
brne LOOP

Если использовать три регистра, то получится быстрее:

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

ldi r17, 0x04
clr r16
ser r18
LOOP:
out PortB, r16
out PortB, r18
dec r17
brne LOOP

Или ещё извратиться:

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

ldi r17, 0x08
clr r16
ser r18
LOOP:
out PortB, r16
eor r16, r18
dec r17
brne LOOP
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Ну за скорость я ничего не говорил, хоть и быстрее у Вас, но памяти меньше не занимает.
К тому-же иногда бывает, что нехватает регистров. У меня такое частенько бывает, когда ОЗУ в 128 байт забито почти полностью (5-10 байтов остаются под стек)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

DX168B писал(а):когда ОЗУ в 128 байт забито почти полностью

В качестве ОЗУ можно использовать некоторые неиспользуемые РВВ :idea: Например, OCR**, TCNT**, EE**, USIDR, UDR, UBRR* :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

А если и они заняты? Например используются все таймеры, UART, SPI. Например на Тини2313.
У меня был такой случай. Нужно было собрать девайс, который сначала принимает с ПК данные по UART в буфер. А потом обрабатывает чтением с помощью регистровой пары Y. Потом рузит адреса меток парой Z и потом этой же парой переходит по метке через команду icall. Пара X нужна в выполняемых подпрограммах, в которых используется и таймеры и уарт и внешние внешние прерывания и всё, что только можно. Вон, мне удалось разработать устройство на тн2313, которое умеет работать с базой данных, CRC суммами и ещё управлять внешними устройствами. Толко вот внешней периферии на логике пришлось навешать много, но оно стоило того.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

DX168B писал(а):А если и они заняты?

Я ж говорю, неиспользуемые :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Ну нет. Я лучше буду делать как положено, чтобы оно отвечало надёжности. А если чего-то не хватает, то проще взять контроллер по мощнее.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Gudd-Head писал(а):Логично, что если памяти всего 2 кб, то компактней АСМа не придумать =)

я вот с тини13 на Си работаю - всего 1 килобайт памяти! и знаете, пока все задуманное влезает :) где действительно без ассемблера не обойтись, так это НЕ В МАЛЕНЬКИХ программах, но В ОЧЕНЬ БЫСТРЫХ.
например, синтез звука или его обработка, то же самое FFT - куда там чистому Си! но в итоге все равно нужен гибрид - функции на Си и функции на ассемблере, так получается проще и удобнее.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

ARV писал(а): я вот с тини13 на Си работаю - всего 1 килобайт памяти! и знаете, пока все задуманное влезает :)



В журнале Радио 50-х, когда только входили в моду карманные приемники, был юмористический рисунок : стиляга в пиджаке с широченными плечами и огромными карманами, в одном из них довольно-таки габаритный приемник. "Зачем иметь маленький приемник - можно иметь большой карман!"

Применительно к нашему случаю: зачем иметь большие МК, можно иметь маленькие задумки.

:-)
Последний раз редактировалось Jack_A Ср дек 22, 2010 12:01:30, всего редактировалось 1 раз.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Верно, на Си существует такая возможность, как ассемблерные вставки. Вот в них и можно выполнить самую тонкую работу. Я в принципе наштамповал себе макросов и подпрограмм на разные случаи и теперь даже на АСМе у меня всё делается быстро. Но иногда мозги кипят при усложнённых алгоритмах и тогда вступает Си на помощь. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Jack_A писал(а):Применительно к нашему случаю: зачем иметь большие МК, можно иметь маленькие задумки.
да, когда задумки соответствуют МК - значительно меньше разочарований :) маленькие МК и придуманы для маленьких задумок - это не повод отказывать себе в Си :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

вот это я замутил :)))
теперь из темы про асм, сделают тему про Си :cry:
и негде мне будет по-умничать :cry:
и уйду я совсем на свалку истории :cry:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Да ладно тебе. :))) Я вот тоже на ассемблере катаю. Но и от Си тоже не отказываюсь. :)
И даже новичков призываю начинать освоение МК именно с ассемблера, иначе просто не поймут как оно работает. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

asm 8)
Успех - императив!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Начинать нужно определенно с ассемблера, ИМХО. Поскольку, если прога на Си ведет себя не так как нужно (код ты к примеру ПЕРЕоптимизировал.... точнее не ты, а компилятор), тут только дизассемблер поможет, а если не знать Асма, то и отладить ничего не получится. Сейчас у меня всегда при написании генерится асм код, по которому я периодически проверяю ту или иную операцию на Си (так я узнал, например, что в прерывании IAR сам сохраняет в стеке SREG). так что тут палка о двух концах))) хоть и перешел на Си, но ассемблер не забываю. Выбрал компилятор именно IAR, поскольку намечается проектик на STM8 (уж очень шустрое у них АЦП, порой даже два в одном контроллере) и в дальнейшем собираюсь переходить на АРМы. IAR выпускает много модификаций поддерживающих разные семейства, поэтому нет необходимости осваивать новый компилятор при переходе на другое семейство. Вообще не жалею, что на Си перехожу, очень мне он нравится))) И Вам, GP1, как любителю Асма, очень рекомендую! :beer:
Ставим плюсы: )
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

delay_20000us:
ldi r16, 0b10000000 ; Загрузим в РОН "I=1 SREG"
out SREG, r16

ldi r16, 0b1 ; Загрузим TOIE0=1 (разрешили прерывания по переполнения T0)
out TIMSK, r16

ldi r16, 0b11101100 ; Загрузим в TCNT0 236
out TCNT0, r16

ldi r16, 0b101 ; Запускаем таймер с предделителем 1024
out TCCR0, r16 ; Поехали!!!

A: ; [color=#FF0000]коряво, так нельзя вообще то... (заметка для себя:)
rjmp A[/color]


ldi r16, 0b10111011 ; Загрузим в TCNT0 187
out TCNT0, r16

ldi r16, 0b010 ; Запускаем таймер с предделителем 8
out TCCR0, r16 ; Поехали!!!


Пытаюсь организовать задержку в >20мс, т.е. нижний порог - 20мс.
Когда таймер Т0 Atmega8 переполнился, должно же меня перекинуть на 9 адрес вектора прерывания?
Почему не кидает в студии?
(I=1, прерывание в TIMSK разрешено)
Установил флаг прерывания по опустошению (переполнения) в регистре TIFR - кидает...
Ведь этот же флаг устанавливается автоматически при переполнении регистра... странно...
Последний раз редактировалось Arlleex Вт дек 21, 2010 22:44:12, всего редактировалось 1 раз.
Не умеешь - не берись, но не взявшись не научишься...
Ответить

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