У меня по этому поводу тоже есть некий психологический барьер. Вот например, если что-то серьезное (на заказчика) писать, всегда думаю, если начну проект на С, а если поплыву, если в срок не успею, пока буду грабли компилятора и языка преодалевать, так на асме и катаю, хотя основные обороты на С знаю, и думаю что не плохо.ARV писал(а):это преодолимоGP1 писал(а):Вот только мозги ужо шибко ржавые, не воспринимают Си ну ни как...
Ассемблер (ASM) для AVR в вопросах и ответах
- Rimsky
- Грызет канифоль
- Сообщения: 299
- Зарегистрирован: Вт июн 15, 2010 07:16:42
- Откуда: Иркутск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18673
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
значит, надо тренироваться ДО начала работы по заказу, чисто в плане обучения/освоения.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я вот тоже на асме катаю, хотя судя по последним задачам, которые стоит мне в дальнейшем предстоит решить, то придётся переходить на Си. С++ для ПК более-менее знаю, а Си для 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 в вопросах и ответах
Логично, что если памяти всего 2 кб, то компактней АСМа не придумать =)DX168B писал(а):В зависимости от поставленной задачи, программы будут писаться или на АСМе или на Си.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А я как раз и кручусь на 2х килобайтах с АСМом.
Я даже делал сравнения:
Цикл на Си:
Тоже самое на АСМе:
Код на Си отнял больше памяти, но не намного. Где-то на 2 байта разница.
Но это ещё и от компоновщика Си зависит. Хороший компоновщик откомпилировал бы с минимальной затратой памяти.
Компилил Си в GCC(AVR Studio+WinAVR) и АСМ в AVRASMе2(AVR Studio).
Но если взглянуть на код Си и на код АСМа, то на Си проще решать сложные задачи, так как выглядит код нагляднее и с минимумом писанины.
У обоих языков есть свои грабли и свои преимущества. Знать советую оба языка.
Я даже делал сравнения:
Цикл на Си:
Код: Выделить всё
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
/////
///
Но это ещё и от компоновщика Си зависит. Хороший компоновщик откомпилировал бы с минимальной затратой памяти.
Компилил Си в 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 в вопросах и ответах
Если использовать три регистра, то получится быстрее: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 в вопросах и ответах
Ну за скорость я ничего не говорил, хоть и быстрее у Вас, но памяти меньше не занимает.
К тому-же иногда бывает, что нехватает регистров. У меня такое частенько бывает, когда ОЗУ в 128 байт забито почти полностью (5-10 байтов остаются под стек)
К тому-же иногда бывает, что нехватает регистров. У меня такое частенько бывает, когда ОЗУ в 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 в вопросах и ответах
В качестве ОЗУ можно использовать некоторые неиспользуемые РВВDX168B писал(а):когда ОЗУ в 128 байт забито почти полностью
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А если и они заняты? Например используются все таймеры, UART, SPI. Например на Тини2313.
У меня был такой случай. Нужно было собрать девайс, который сначала принимает с ПК данные по UART в буфер. А потом обрабатывает чтением с помощью регистровой пары Y. Потом рузит адреса меток парой Z и потом этой же парой переходит по метке через команду icall. Пара X нужна в выполняемых подпрограммах, в которых используется и таймеры и уарт и внешние внешние прерывания и всё, что только можно. Вон, мне удалось разработать устройство на тн2313, которое умеет работать с базой данных, CRC суммами и ещё управлять внешними устройствами. Толко вот внешней периферии на логике пришлось навешать много, но оно стоило того.
У меня был такой случай. Нужно было собрать девайс, который сначала принимает с ПК данные по 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 в вопросах и ответах
Я ж говорю, неиспользуемыеDX168B писал(а):А если и они заняты?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну нет. Я лучше буду делать как положено, чтобы оно отвечало надёжности. А если чего-то не хватает, то проще взять контроллер по мощнее.
I am DX168B and this is my favourite forum on internet!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18673
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
я вот с тини13 на Си работаю - всего 1 килобайт памяти! и знаете, пока все задуманное влезаетGudd-Head писал(а):Логично, что если памяти всего 2 кб, то компактней АСМа не придумать =)
например, синтез звука или его обработка, то же самое FFT - куда там чистому Си! но в итоге все равно нужен гибрид - функции на Си и функции на ассемблере, так получается проще и удобнее.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ARV писал(а): я вот с тини13 на Си работаю - всего 1 килобайт памяти! и знаете, пока все задуманное влезает![]()
В журнале Радио 50-х, когда только входили в моду карманные приемники, был юмористический рисунок : стиляга в пиджаке с широченными плечами и огромными карманами, в одном из них довольно-таки габаритный приемник. "Зачем иметь маленький приемник - можно иметь большой карман!"
Применительно к нашему случаю: зачем иметь большие МК, можно иметь маленькие задумки.
Последний раз редактировалось Jack_A Ср дек 22, 2010 12:01:30, всего редактировалось 1 раз.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Верно, на Си существует такая возможность, как ассемблерные вставки. Вот в них и можно выполнить самую тонкую работу. Я в принципе наштамповал себе макросов и подпрограмм на разные случаи и теперь даже на АСМе у меня всё делается быстро. Но иногда мозги кипят при усложнённых алгоритмах и тогда вступает Си на помощь. 
I am DX168B and this is my favourite forum on internet!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18673
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
да, когда задумки соответствуют МК - значительно меньше разочарованийJack_A писал(а):Применительно к нашему случаю: зачем иметь большие МК, можно иметь маленькие задумки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вот это я замутил
теперь из темы про асм, сделают тему про Си
и негде мне будет по-умничать
и уйду я совсем на свалку истории
теперь из темы про асм, сделают тему про Си
и негде мне будет по-умничать
и уйду я совсем на свалку истории
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да ладно тебе.
Я вот тоже на ассемблере катаю. Но и от Си тоже не отказываюсь.
И даже новичков призываю начинать освоение МК именно с ассемблера, иначе просто не поймут как оно работает.
И даже новичков призываю начинать освоение МК именно с ассемблера, иначе просто не поймут как оно работает.
I am DX168B and this is my favourite forum on internet!
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Начинать нужно определенно с ассемблера, ИМХО. Поскольку, если прога на Си ведет себя не так как нужно (код ты к примеру ПЕРЕоптимизировал.... точнее не ты, а компилятор), тут только дизассемблер поможет, а если не знать Асма, то и отладить ничего не получится. Сейчас у меня всегда при написании генерится асм код, по которому я периодически проверяю ту или иную операцию на Си (так я узнал, например, что в прерывании IAR сам сохраняет в стеке SREG). так что тут палка о двух концах))) хоть и перешел на Си, но ассемблер не забываю. Выбрал компилятор именно IAR, поскольку намечается проектик на STM8 (уж очень шустрое у них АЦП, порой даже два в одном контроллере) и в дальнейшем собираюсь переходить на АРМы. IAR выпускает много модификаций поддерживающих разные семейства, поэтому нет необходимости осваивать новый компилятор при переходе на другое семейство. Вообще не жалею, что на Си перехожу, очень мне он нравится))) И Вам, GP1, как любителю Асма, очень рекомендую! 
Ставим плюсы: )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Пытаюсь организовать задержку в >20мс, т.е. нижний порог - 20мс.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: ; коряво, так нельзя вообще то... (заметка для себя:)
rjmp A
ldi r16, 0b10111011 ; Загрузим в TCNT0 187
out TCNT0, r16
ldi r16, 0b010 ; Запускаем таймер с предделителем 8
out TCCR0, r16 ; Поехали!!!
Когда таймер Т0 Atmega8 переполнился, должно же меня перекинуть на 9 адрес вектора прерывания?
Почему не кидает в студии?
(I=1, прерывание в TIMSK разрешено)
Установил флаг прерывания по опустошению (переполнения) в регистре TIFR - кидает...
Ведь этот же флаг устанавливается автоматически при переполнении регистра... странно...
Последний раз редактировалось Arlleex Вт дек 21, 2010 22:44:12, всего редактировалось 1 раз.
Не умеешь - не берись, но не взявшись не научишься...



