trol73 / the-rat-avr

The Rat language compiler for AVR
GNU General Public License v2.0
5 stars 0 forks source link

Сколько минимально требуется команд ассемблера AVR для C--? #20

Open Vadimatorik opened 1 year ago

Vadimatorik commented 1 year ago

Возник такой вопрос. Ввиду строгих ограничений на количество конструкций в языке, сколько действительно команд ассемблера (без ассемблерных вставок) используется компилятором? Я тут в домашних целях просто делаю клон AVR на реле. И мне вот интересно, сколько команд я могу выкинуть, чтобы при этом мочь писать на C-- свободно под это поделье. Просто у AVR ведь 100500 команд ветвления. Но используется из С-- наверняка минимум. Можно где-то посмотреть на этот минимум?

Vadimatorik commented 1 year ago

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

trol73 commented 1 year ago

Почти все команды используются компилятором :) А те, что не используются им, используются явно, как ассемблерные инструкции. Например, ret ) Те же команды ветвления AVR (которых 24 штуки), имеют не самые понятные и читаемые/запоминающиеся мнемоники. И для всех них в языке есть "человеческие" аналоги с if (...)

Vadimatorik commented 1 year ago

Насколько помню, if (...) использовал всего две команды ветвления. Но может не всматривался.

Так, стоп. Как все, если должна быть компиляция под Attiny4? А там у нас совсем мало команд. Или вот attiny которая без стека вообще (забыл название). Ну то есть без стека, а там 1 или 3 слова есть стека...

Я просто думаю, что можно взять минимальный набор AVR инструкций, минимальный набор ветвлений, выкинуть push/pop, прерывания и получить вполне себе реализуемую штуку в 2-3к вентелей) Ну и регистров порезать, конечно же, да.

Vadimatorik commented 1 year ago

Кстати сюда же вопрос. Рас уж attiny много и есть те, у которых набор команд отличается, есть ли возможность прописать свой target?) Типа relayvr1: и какие регистры есть, какие команды есть. Оно же где-то прописано)

trol73 commented 1 year ago

В тестах можно посмотреть часть команд (но тут они не все) https://github.com/trol73/the-rat-avr/tree/main/compiler/test/ru/trolsoft/therat/avr/compiler А если и регистры порезать, да ещё и стек выкинуть, то совсем тяжко будет под это писать ) С-- реализует человеко-читаемую форму для большинства команд, чтобы можно было писать человек-читаемый код. А сколько из них было бы достаточно для минимального программирования - это другой вопрос )

trol73 commented 1 year ago

Кстати сюда же вопрос. Рас уж attiny много и есть те, у которых набор команд отличается, есть ли возможность прописать свой target?) Типа relayvr1: и какие регистры есть, какие команды есть. Оно же где-то прописано)

нет такого ) лично я не планировал использовать урезанные ядра (с прагматической точки зрения это очень странно, т.к. такие урезанные чипы и найти сложнее, и стоят они дороже, чем условная atmega8), и, соответственно, не заморачивался пока поддержкой их ограничений )

Vadimatorik commented 1 year ago

Ну вообще да. Но тянуть за собой даже минимальные 54 инструкции (ну минус работу с GPIO и по мелочи, 45).

Vadimatorik commented 1 year ago

А. То есть attiny4 не поддерживается?

trol73 commented 1 year ago

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

Vadimatorik commented 1 year ago

А. Вот оно как. Понял. Я думал, что компилятор смотрит на список доступных команд в рамках ядра. А то отстрелить себе ногу очень просто)))