avr-gccを使用してグローバル変数を未使用のI/Oレジスタ(PORTBなど)にバインドして、コードサイズを削減したいとします。私はこのトリックをAVRのアプリケーションノートAVR035(14ページ)で学びました。アプリケーションノートでavr-gccを使用して、未使用のAVR I/Oレジスタに変数をバインドする方法はありますか?
、彼らはIARコンパイラを使用し、I/Oのようにレジスタに変数をバインド:AVR-GCCで
__no_init volatile uint8_t [email protected];
、私は標準レジスタ(R3に変数をバインドすることができますこの場合は次の行を使用します)。
register uint8_t counter asm("r3");
これはI/Oレジスタでは機能しません。 I/Oレジスタに対してこれを行う方法はありますか?
whoaこれは素晴らしいトリックです。しかし、1つの質問:STSとLDSの代わりにINとOUTを使用することで*コードサイズを増やすことを考えているとき、最初に組み立て全体をコーディングしないのはなぜですか? –
アセンブリーはおそらくこのレベルのコードを微調整するのには良い考えです:-)私は一部のグローバル変数をI/Oレジスタに移動するだけで "速い"ゲインを期待していました。それは簡単ではないことが分かった。 – henning77