Как показывает практика, написать максимально эффективный код под микроконтроллеры AVR можно только на ассемблере. Примеры плохой оптимизации кода AVR GCC приводились тут. Писать же код на ассемблере - сложно, а зачастую очень сложно (некоторые мысли о причинах этой сложности приведены там же. И сложность эта усугубляется примитивностью компиляторов ассемблера, дающие слишком мало возможностей программисту по написанию легко читаемого кода. При написании ассемблерного кода возникает желание иметь более удобный синтаксис, похожий на синтаксис Си, где вместо мнемоник ассемблера можно использовать привычные и более читаемые конструкции. Подобно тому, как это делается в языке C--. Это желание и побудило на создания компилятора C-- - подобного языка для AVR, позволяющего писать компактный и шустрый код, и названного Rat.
Синтаксис языка
Компилятор Rat можно рассматривать как обыкновенный компилятор ассемблера с препроцессором C. Весь код можно писать на практически "обыкновенном" ассемблере. При этом, есть несколько особенностей:
Весь код обязательно должен быть помещён в процедуры (proc)
Тип процессора должен быть задан директивой #define CPU