добрый день
вот и встал вопрос, если писать свои функции, с некоторой долей универсальности, встает вопрос о том как организовать лучше всего обмен между ними, по каким то одним правилам, учитывающим саму специфику архитектуры мк.
то есть, я так думаю что необходимо прежде чем что либо писать принять некие правила, каким образом в функцию передавать значения переменных, к примеру. и вообще нужно ли придерживаться этих правил или нет, нужны ли они? вот как все это организовано в компиляторах, того же Си?
На мой взгляд, правила нужны, позволяют сильно упростить разработку программы.
Для АВР считаю оптимальным следующее правило вызова функции.
Все переменные в функции объявлять, по возможности, в регистрах РОН – функция будет короче и быстрее. В случае использования АБ будет доступно, большей частью, 30 регистров – вполне достаточно.
В начале функции поставить макрокоманду записи в стек используемых в функции регистров, в конце программы – команду возврата из стека в эти регистры.
Таким образом, можно, не опасаясь последствий, вызывать любую функцию, после выхода из функции будут свободны все регистры. Несколько увеличивает объём кода, но упрощает программирование.
Конечно, никаких «боковых» выходов из подпрограмм и т.д.
Писать надо на макроассемблере. Получается гибкость как у ассемблера, а упрощает написание раз в 5. Я использую АБ, легкий в изучении, бесплатный, русский, хотя устарел.
Необходим дебаггер – отыскание ошибок, в большинстве случаев, становится банальным.
При соблюдении таких несложных правил можно без проблем писать программы в десятки килобайт.