Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кроссассемблер 51>AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
muravei
Собственно всеsmile.gif
Petka
Цитата(muravei @ Mar 30 2006, 15:55) *
Собственно всеsmile.gif


Интересно, а как Вы себе это представляете?
defunct
Цитата(muravei @ Mar 30 2006, 13:55) *
Собственно всеsmile.gif

Архитектуры настолько разные, что imho не стоит и пытаться такое искать.
К примеру если программа C51 интенсивно пользуется переключением регистровых банков, то на AVR такое не реально транслировать... Разные команды, работающие с разнотипными операндами (бит/байт/слово) и имеющие одинаковую мнемонику вообще imho нереально перевести..
muravei
Цитата(defunct @ Mar 30 2006, 19:21) *
Разные команды, работающие с разнотипными операндами (бит/байт/слово) и имеющие одинаковую мнемонику вообще imho нереально перевести..

Но процессор(и ассемблер) то их отличает
defunct
Цитата
Но процессор(и ассемблер) то их отличает

ну и что? архитектуры отличаются очень очень сильно.
Вот основные отличия C51:
1. Все арифметические действия производятся только с регистром Acc (в AVR с любым из 32х регистров).
2. Нет базово-индексной адресации (в AVR есть - Z+Const), только базовая (@DPTR, @R0)
3. Есть множество прямоадресуемых бит и команды проверки конкретного бита (в AVR такого нет)
4. Двух-уровневый приоритетный контроллер прерываний (в AVR одноуровневый)
5. 4-х режимные таймеры, идеология работы которых сильно отличается от таймеров в AVR.
6. Квазидвунаправленные порты (одновременно и ввод и вывод) в AVR такого нет..
7. Невидимая для прямой адресации область RAM, которая пересекается с адресным пространством SFR
8. Скудный набор арифметичеких команд, т.к. C51 задумывался как битовый процессор (нет даже команды сравнения), поэтому трансляция кода на AVR приведет к неоптимальному использованию команд AVR, что в свою очередь в разы раздует код программы.

Короче говоря, написать кросс-ассемблер такой как Вы хотите - реально, но он будет настолько неоптимально использовать возможности AVR, что целесообразность его использования сведется практически к нулю. Для чипов до 16k памяти программ (ПП) проще вручную (зная алгоритм программы) портировать ассемблерный код C51 на AVR, для чипов же с больше 16k ПП программы обычно пишут на C и проблем с портированием не должно быть вообще.
Harbinger
Цитата(defunct @ Mar 31 2006, 16:19) *
Для чипов до 16k памяти программ (ПП) проще вручную (зная алгоритм программы) портировать ассемблерный код C51 на AVR, для чипов же с больше 16k ПП программы обычно пишут на C и проблем с портированием не должно быть вообще.

Интересно, есть ли у кого опыт ручного "перевода" ассемблерного кода с 51 на AVR? Моего маловато - но есть подозрение, что объем занимаемой памяти возрастет. Если с 8 К (ровно!:)) до 16 - еще куда ни шло...
vet
Harbinger
Как ни странно, перенос прошивки одного из выпускаемых нами приборов с 80C552 на mega8535 практически не изменил размер бинарника - чуть меньше 8кБ в обоих случаях. Обе написаны на ассемблере.
defunct
Цитата(Harbinger @ Apr 1 2006, 08:04) *
Интересно, есть ли у кого опыт ручного "перевода" ассемблерного кода с 51 на AVR? Моего маловато - но есть подозрение, что объем занимаемой памяти возрастет. Если с 8 К (ровно!:)) до 16 - еще куда ни шло...

У AVR более гибкая система команд. Да и тонны XCH отпадут. Проверки станут проще.
Так что если переносить с умом, то получается кода меньше чем для C51.. Если же переносить "в лоб" тогда раздуется..
Harbinger
Хмм, там XCH всего в 2 местах используетсяsmile.gif Пересылок из регистров в аккумулятор и обратно - в самом деле более чем. И операций с битами - немерено. Программа не моя - в наследство досталась.
Другое дело, что с квазидвунаправленным портом придется как-то разбиратьсяsad.gif
IgorKossak
Цитата(Harbinger @ Apr 1 2006, 09:04) *
Интересно, есть ли у кого опыт ручного "перевода" ассемблерного кода с 51 на AVR? Моего маловато - но есть подозрение, что объем занимаемой памяти возрастет. Если с 8 К (ровно!:)) до 16 - еще куда ни шло...

С 51-м не знаком, но в своё время перевёл около 60 кБ кода с MCS196 на AVR (mega103).
Правда автором прототипа был я же, поэтому знал алгоритм и именно это и было главным.
На перевод потратил около месяца. Потом, когда возникла необходимость расширять, добавлять, исправлять, улучшать, всё-таки переписал проект на С. И вовремя, т. к. возможностей AVR уже не хватило и пришлось портировать всё на ARM.
На этот раз портирование прошло за пару недель.
muravei
Цитата(defunct @ Mar 31 2006, 16:19) *
Цитата
Но процессор(и ассемблер) то их отличает

ну и что? архитектуры отличаются очень очень сильно.
Вот основные отличия C51:
1. Все арифметические действия производятся только с регистром Acc (в AVR с любым из 32х регистров).
2. Нет базово-индексной адресации (в AVR есть - Z+Const), только базовая (@DPTR, @R0)
3. Есть множество прямоадресуемых бит и команды проверки конкретного бита (в AVR такого нет)
4. Двух-уровневый приоритетный контроллер прерываний (в AVR одноуровневый)
5. 4-х режимные таймеры, идеология работы которых сильно отличается от таймеров в AVR.
6. Квазидвунаправленные порты (одновременно и ввод и вывод) в AVR такого нет..
7. Невидимая для прямой адресации область RAM, которая пересекается с адресным пространством SFR
8. Скудный набор арифметичеких команд, т.к. C51 задумывался как битовый процессор (нет даже команды сравнения), поэтому трансляция кода на AVR приведет к неоптимальному использованию команд AVR, что в свою очередь в разы раздует код программы.


Ну если так рассуждать, то и портирование с 51 одного производителя на 51 др. тоже неразрешимая задача.
1. Помоему это достоинство , хуже было бы наоборот.Можно решать двумя способами : в лоб -назначить один регистр акум. и плясать вокруг него , или с умом использовать все 32.
3.Что-то я не понял, а SBRC,SBRS,SBIC ...и т.д.
Думаю все решаемо .Вопрос в том :Ано надо?
defunct
Цитата(muravei @ Apr 3 2006, 08:14) *
Ну если так рассуждать, то и портирование с 51 одного производителя на 51 др. тоже неразрешимая задача.

Вы всегда читаете только половину ответа?

Цитата
1. Помоему это достоинство , хуже было бы наоборот.Можно решать двумя способами : в лоб -назначить один регистр акум. и плясать вокруг него , или с умом использовать все 32.
3.Что-то я не понял, а SBRC,SBRS,SBIC ...и т.д.
Думаю все решаемо .Вопрос в том :Ано надо?

1. Это недостаток 51-го.
3. Совсем не то. Речь о JB/JNB, MOV C, P1.0 и т.п.

Я вообще-то говорил об особенностях архитектуры C51, которые создают сложности (лучше сказать - проблемы) для написания автоматического транслятора C51->AVR. А о чем говорите Вы?
muravei
Я что-то нашел
http://john.ccac.rwth-aachen.de:8000/as/
vet
Цитата(muravei @ Apr 4 2006, 11:07) *

Кросс-ассемблер, поддерживает много архитектур;
но, насколько я могу судить, в этой ветке обсуждаются немного другие вещи.
muravei
Цитата(vet @ Apr 4 2006, 10:26) *
Кросс-ассемблер, поддерживает много архитектур;
но, насколько я могу судить, в этой ветке обсуждаются немного другие вещи.

Тогда, кто такой Кросс-ассемблер?
vet
Цитата(muravei @ Apr 5 2006, 10:12) *
Тогда, кто такой Кросс-ассемблер?

Кросс-ассемблер - всего лишь программа-ассемблер, запускаемая на другой архитектуре (скажем, PC), отличной от той, под которую транслируется код. В сущности, любой ассемблер, которым мы пользуемся в разработке софта для м/к, есть кросс-ассемблер (если, конечно, это не м/к, совместимый с i386).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.