アカウント名:
パスワード:
AVRの8ピンで電子工作始めました。使いこなすとか以前に、gcc(AVR-GCC)使わないとプログラムできない自分に絶望した。
AVRはアーキテクチャが素直だし、gccは最適化で結構良いコード吐くので、Cでも全然問題ないですよ。
あとは、C言語でマイコンプログラミングする時に一番注意しないといけないのは、割り込みでのvolatile キーワード使いこなしとかじゃないかなぁ。
ブログとかで「gccで最適化を有効にすると正しく動作しないので、仕方ないから最適化は切ってる。でもそうするとコードサイズがすごく大きくなる」なんていうgccの最適化がバグってると主張しているような記事を見かけたりすると、「gccは悪くない。ちゃんとvolatile使え」とツッコミを入れたくなる…
volatile指定していない変数は、割り込みとかで値を書き変えても、(最適化でレジスタに割り当てられたりするなどによって)メインルーチン側では反映されません。
かといってvolatileを付けだだけだと、変数参照で毎回メモリ読み出しが発生するので効率が悪い。効率を重視するなら、一旦ローカル変数にコピーしてから、最後にvolatile変数に書き戻すようなコードが一番いいです。
そういった一手間をかければ、かなりコンパクトなコードをコンパイラに吐き出させることができます。ATtiny13Aとかだと、プログラム1KBよりも、メモリ(SRAM)64バイトの方が制限きつい…
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
電子工作始めました (スコア:1)
AVRの8ピンで電子工作始めました。
使いこなすとか以前に、gcc(AVR-GCC)使わないとプログラムできない自分に絶望した。
#壮大なストーリ。空転するアイディア。
Re:電子工作始めました (スコア:3, 興味深い)
AVRはアーキテクチャが素直だし、gccは最適化で結構良いコード吐くので、Cでも全然問題ないですよ。
あとは、C言語でマイコンプログラミングする時に一番注意しないといけないのは、
割り込みでのvolatile キーワード使いこなしとかじゃないかなぁ。
ブログとかで「gccで最適化を有効にすると正しく動作しないので、仕方ないから最適化は切ってる。でもそうするとコードサイズがすごく大きくなる」なんていうgccの最適化がバグってると主張しているような記事を見かけたりすると、「gccは悪くない。ちゃんとvolatile使え」とツッコミを入れたくなる…
volatile指定していない変数は、割り込みとかで値を書き変えても、
(最適化でレジスタに割り当てられたりするなどによって)メインルーチン側では反映されません。
かといってvolatileを付けだだけだと、変数参照で毎回メモリ読み出しが発生するので効率が悪い。
効率を重視するなら、一旦ローカル変数にコピーしてから、最後にvolatile変数に書き戻すようなコードが一番いいです。
そういった一手間をかければ、かなりコンパクトなコードをコンパイラに吐き出させることができます。
ATtiny13Aとかだと、プログラム1KBよりも、メモリ(SRAM)64バイトの方が制限きつい…