Цитата(aesok @ Jan 26 2008, 23:22)

Используя код:
Код
register unsigned char counter asm("r3");
Вы
заставляете компилятор разместить переменную
counter в регистре
r3 контроллера. И всю ответственность за этот поступок берете на себя.
В GCC полностью безопасно использовать регистры r2..r7 для объявления переменных. (С точки зрения компилятора, если только Вы сами не будете их изменять в ассемблерных вставках.)
Вот этим-то я и интересовался, ещё когда порт scmRTOS 1.x на avr-gcc обсуждался. И результат - в
общем случае в avr-gcc лучше обойтись без -ffixed-reg и register ...asm("rX").
В некоторых функциях библиотек эти r2-r7 таки используются (в частности, a/b при uint64_t a, b задействует их все). Да, они их сохраняют и восстанавливают, но
ведь обработчики прерываний об этом не знают.
На этом я и остановился - не стал разбираться, можно ли перекомпилировать библиотеки с запрещёнными к использованию несколькими регистрами (даст ли это что-то, не используются ли они в частях библиотек, кодированных на асме и т.д.). Можно ещё было поразбираться - какие именно функции залазят в эти регистры - возможно, кроме 64-битных целых и, к примеру, плавающей точки, никто туда и не залазит, но я просто решил для себя - если желание разместить глобальные переменные в регистрах возникнет, значит это будет задача под чистый асм :-), "ведь
играл писал же я их в молодости" (С) актёрская шутка.