|
Кроссассемблер 51>AVR, Существует? |
|
|
|
Mar 31 2006, 13:19
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата Но процессор(и ассемблер) то их отличает ну и что? архитектуры отличаются очень очень сильно. Вот основные отличия 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 и проблем с портированием не должно быть вообще.
|
|
|
|
|
Apr 2 2006, 08:58
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(Harbinger @ Apr 1 2006, 09:04)  Интересно, есть ли у кого опыт ручного "перевода" ассемблерного кода с 51 на AVR? Моего маловато - но есть подозрение, что объем занимаемой памяти возрастет. Если с 8 К (ровно!:)) до 16 - еще куда ни шло... С 51-м не знаком, но в своё время перевёл около 60 кБ кода с MCS196 на AVR (mega103). Правда автором прототипа был я же, поэтому знал алгоритм и именно это и было главным. На перевод потратил около месяца. Потом, когда возникла необходимость расширять, добавлять, исправлять, улучшать, всё-таки переписал проект на С. И вовремя, т. к. возможностей AVR уже не хватило и пришлось портировать всё на ARM. На этот раз портирование прошло за пару недель.
|
|
|
|
|
Apr 3 2006, 06:14
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(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 ...и т.д. Думаю все решаемо .Вопрос в том :Ано надо?
|
|
|
|
|
Apr 3 2006, 16:34
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(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. А о чем говорите Вы?
|
|
|
|
|
Apr 4 2006, 07:26
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(muravei @ Apr 4 2006, 11:07)  Кросс-ассемблер, поддерживает много архитектур; но, насколько я могу судить, в этой ветке обсуждаются немного другие вещи.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Apr 5 2006, 06:54
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(muravei @ Apr 5 2006, 10:12)  Тогда, кто такой Кросс-ассемблер? Кросс-ассемблер - всего лишь программа-ассемблер, запускаемая на другой архитектуре (скажем, PC), отличной от той, под которую транслируется код. В сущности, любой ассемблер, которым мы пользуемся в разработке софта для м/к, есть кросс-ассемблер (если, конечно, это не м/к, совместимый с i386).
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|