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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

А, ну если в курсе, это хорошо.
У меня ассемблер avra.
Реклама
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

ChipKiller писал(а):... по поводу Вашего кода экономии при таком стиле записи точно не будет. Все можно описать так

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

sbi PORTC,5
cbi PORTC,5
sbi PORTC,5
О!! спасибо, я почему то решил что битовые операции на порты не распространяются.
Реклама
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

ploop писал(а):Да ладно, не кипятитесь. Просто 64к кода - это реально много.
С SREG разобрались? Глюки не исчезли?
К сожалению сейчас на работе... пробовать буду вечером... надеюсь что мои проблемы именно из за SREG так как в lcd.asm есть участки кода в которых потеря Z флага между например DEC temp и командой условного перехода будет приводить к каким угодно последствиям...

какой эмулятор можно использовать ? в принципе железка есть - и работу кода проверяю непосредственно на ней.. но вот такие вещи как отловить запись в определенную область памяти на железке не могу...
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

когда то очень давно использовал короткую процедуру печати десятичного числа на асме..
никто не подскажет ?

алгоритм был простой какой то.. с командой десятичной коррекции (DAA в i8080)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

На счет эмуляторов: всяким протеусам я не доверяю (хотя народ успешно отлаживает), код пишу в удобном текстовом редакторе с возможностью запуска компиляции и прошивки, а проблемные места отлаживаю либо в студии, либо в железе.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

ВитГо писал(а):когда то очень давно использовал короткую процедуру печати десятичного числа на асме..
никто не подскажет ?

алгоритм был простой какой то.. с командой десятичной коррекции (DAA в i8080)
Не это?

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

DigitConvert:
   clr      Hundreds
   clr      Tens
   clr      ones
FindHundreds:
   subi   lowerbyte,100
   sbci   upperbyte,0
   brcs   FindTens
   inc      Hundreds

   rjmp   FindHundreds
FindTens:
   subi   lowerbyte,-100
   subi   lowerbyte,10
   brcs   FindOnes

   inc      Tens
   rjmp   FindTens+1
FindOnes:
   subi   lowerbyte,-10
   mov      Ones,lowerbyte
   ret
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

2 ВитГо ... все же думаю, что если пройтись по Вашему С-коду, то оптимизировать по размеру можно и там. Я так понимаю, что строки

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

PORTC |= 0x20;
PORTC &= ~0x20;
PORTC |= 0x20;
именно из исходника
перепишите их

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

PORTC.5=1;
PORTC.5=0;
PORTC.5=1;
и получите экономию :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18649
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

ChipKiller писал(а):2 ВитГо ... все же думаю, что если пройтись по Вашему С-коду, то оптимизировать по размеру можно и там. Я так понимаю, что строки

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

PORTC |= 0x20;
PORTC &= ~0x20;
PORTC |= 0x20;
именно из исходника
перепишите их

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

PORTC.5=1;
PORTC.5=0;
PORTC.5=1;
и получите экономию :)
это с какого ж хрена экономия выйдет?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

ARV писал(а):это с какого ж хрена экономия выйдет?!
... ну вообще-то строки

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

PORTC |= 0x20;
.// и
PORTC.5=1;
одно и то же :) , но просматривая листинг

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

			IN	temp	,	PORTC		;  PORTC |= 0x02;
			ORI	temp	,	0x20
			OUT	PORTC	, 	temp
подумал, что может у ВитГо какой-то "хитрый" С-компилятор и строку PORTC.5=1 он все-же "правильно" переведет в sbi PORTC,5
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18649
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

судя по тому, что у автора код может не влезть в 64К - он большой знаток Си... в 64К люди впихивают целые системы с формированием цветного видеоизображения, многоканальным звуком и т.п. - игровая приставка UzeBox... и там от 60 до 80% кода написано на Си... а тут какое-то радиоупралвение - и не влезает! думаю, ассемблер тут вряд ли поможет :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

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

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

Сообщение ARV »

ChipKiller писал(а):при "нормальном" программировании на ассемблере, код в большом проекте вряд-ли удастся оптимизировать по размеру более чем на 30-40%, а вот нахватать ошибок проще простого
я бы сказал "наоборот" - при нормальном программировании на Си код вряд ли будет на 30% больше ассемблерного :))) а вообще в 64К даже на Си впихнуть можно столько всего, что я просто не представляю, какие же задачи автор решить не смог бы... по его блогу лично мне не понятно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

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

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

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

далее оффтопик:
p.s. если ктото всеже уверен в своих силах то вот ссылки на исходники на СИ, приму результат хотя бы 10-15% экономии на коде (хотя мне этого все равно будет мало)
1. VCoder-source.zip
2. http://forum.rcdesign.ru/attachment.php ... 1270849280
3. http://code.google.com/p/th9x/ (смотрите раздел source)

p.p.s. опять ушли в неконструктив.. :-(
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

ВитГо писал(а):опять ушли в неконструктив..
... просто для начала неплохо понять, за счет чего Вам удастся получить меньший объем занимаемого кода. Простой переход на ассемблер даст немного, но вот отлаживать такую программу и искать в ней ошибки, будет гораздо трудней. Возможно "лучший" результат может быть достигнут другими путями - например вынос констант во внешнюю память и т.д.
ВитГо писал(а):.. но есть еще несколько прошивок на это же устройство, и у всех примерно один размер кода.. (написанного на СИ)..
понятно что скорее всего все написавшие другие варианты прошивок тоже криворукие
... возможно, что в таком варианте исполнения для этого устройства - это предел.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

ploop писал(а):
ВитГо писал(а):когда то очень давно использовал короткую процедуру печати десятичного числа на асме..
никто не подскажет ?

алгоритм был простой какой то.. с командой десятичной коррекции (DAA в i8080)
Не это?

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

DigitConvert:
   clr      Hundreds
   clr      Tens
   clr      ones
...

Прикольный алгоритм.. нет.. не этот... ладно, найду сам выложу.. :-)
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

ChipKiller писал(а):... просто для начала неплохо понять, за счет чего Вам удастся получить меньший объем занимаемого кода. Простой переход на ассемблер даст немного, но вот отлаживать такую программу и искать в ней ошибки, будет гораздо трудней. Возможно "лучший" результат может быть достигнут другими путями - например вынос констант во внешнюю память и т.д.
возможно, что в таком варианте исполнения для этого устройства - это предел.
Я бы рад сделать вынос констант или что еще проще просто поменять мегу64 на мегу128 ! но одно из требований проекта - неизменность железа ! поэтому пляшем от той печки что имеем...

с отладкой конечно беда.. - уже столкнулся.. и пока очень тяжко..
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

ВитГо просто поверьте на слово - для получения экономии хотя бы 20-30% Flash - от существующего C-проекта мало что останется.
с отладкой конечно беда.. - уже столкнулся.. и пока очень тяжко..
... и это только начало. Сам в основном пишу на ассемблере, но переписать 64 Кило - это .......
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

ChipKiller писал(а): ВитГо просто поверьте на слово - для получения экономии хотя бы 20-30% Flash - от существующего C-проекта мало что останется.
с отладкой конечно беда.. - уже столкнулся.. и пока очень тяжко..
... и это только начало. Сам в основном пишу на ассемблере, но переписать 64 Кило - это .......
Ну у меня ситуация немного другая..
проект который на СИ (исходники на который я кидал) - уже закончен.. только исправляю глюки (если находят)...

Но есть задумка на новый функционал - вот и хочу попробовать написать на асме.. :-) пристрелка к этому функционалу на СИ была.. но то что хотел не получилось.. так что на асме можно сказать с чистого листа начал...

p.s. мы не ищем легких путей, это же хобби, а не работа ! а в хобби любой геморрой интересен ! :-)
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

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

Сообщение ВитГо »

с прерываниями разобрался - стал сохранять в стеке SREG и произвольная перезагрузка ушла

с экраном разобрался - артефактов больше нет (нужно было учить матчасть - я адрес в RAM при присваивании на 2 умножал... и зря.. :-)

а есть какая то математическая библиотека ? или где можно посмотреть про умножение и деление 16-32 битных чисел ? интересуют целочисленные алгоритмы.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

ВитГо писал(а):где можно посмотреть про умножение и деление 16-32 битных чисел ? интересуют целочисленные алгоритмы.
Аппнот AVR200: Multiply and Divide Routines. This Application Note lists subroutines for multiplication and division of 8 and 16-bit signed and unsigned numbers.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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