« 梨とワインと | トップページ | 電波な電波時計~その5 »

2008年10月 6日 (月)

WinAVRの32bit長演算で謎

MEDIO write:

 師匠の頼みで、電波系電波時計の改良版の開発中。

 改良といっても、選択出来る音声の種類を8種にして、音量を大きくする、というだけなんだけど。

 音量に関しては、Tiny2313のドライブ能力(20mA)から見て、これ以上はアンプが必要、という事でClass-Dのアンプを検討。手元のANALOG DEVICES製SSM2301でも使ってみようと思う。

 音声の選択は、単純に「ROM上にアドレステーブルを持たせて、それを読んでから処理」で良いのだけど、ここで不具合が発生した。

 使用しているコンパイラはWinAVR20070525なんだけど、32bit長の減算で、結果が不可思議な値をとる。

 具体的には

uint32_t    count,

               start_address = 0x0000d012,

               end_address = 0x00011112;

count = end_address - start_address;

 とすると、count0x4100にならない。(他の値での組み合わせでは正常に動く....

 プログラム自体も切り詰めて、最適化して2kByteいっぱいなので、デバッグのしようが無く。

 動作的に見ると、とんでもなく大きな値になっている様子。

 プログラム的には、アドレスは2byte単位で最大128kByte、かつcountも64kByteを超えることは無いだろうと(日和見主義とも言う)割り切って、それぞれを半分の値(定義はuint16_tで収まる)として処理する事にした。ら、何故だか、というかやっぱり、それだと動くんだよね....

 こんなちっこいマイコンで32bit長の演算をさせようとするのが間違いなのかも知れない。

|

« 梨とワインと | トップページ | 電波な電波時計~その5 »

パソコン・インターネット」カテゴリの記事

趣味」カテゴリの記事

電子回路」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 梨とワインと | トップページ | 電波な電波時計~その5 »