Knowledge
   

なんでだろう?H8/3664のcharって『うんしぐねど』?

不定期TOPIC 2003/11/01より

本日は、H8/3664側のプログラミングのお話です。GDL(Version 1.5.0.18です)でC言語にてプログラムを組んでいるわけですが、ようやくプログラムの方も、多少は算術的な部分に入ってきて、マイナスを使い出しました。そしたらはまりましたよ〜。なんかcharってほかのと違うようですね…。

あ、タイトルの「うんしぐねど」は、SISOがunsinged(あんさいんど)を入力するときに頭の中でつぶやいている言葉です。ただし呼び方ではないので、決して間違えて覚えないようにしてくださいね。

サンプルプログラム
さてさて、次のようなソースコードがあります。これは、char型でcData01を、short型でsData02を宣言し、それぞれに-1を代入しています。これを、printfで表示させて、どのようなデータが入ったかを見ようというものです。printfは、エミュレータで動かすならこのまま、マイコン側で走らせるのなら、適当なものに変えてください。

    char cData01;
    short sData02;

    cData01 = -1;
    sData02 = -1;
    
    printf( "cData01代入の答え=%d\n", cData01 );
    printf( "sData01代入の答え=%d\n", sData02 );
    

まずは、心の予定からお話します。心の予定では、「すべてsignedのデータであるのだから、結果の表示は、2行とも「-1」になるというものです。実際そう思ってプログラムを組んでいたのですが…

実行結果
「なんでだろう〜」という結果になりました。まずH8/3664ではcData01は「255」になってしまいました。意外〜。そ〜してぇ、H8/3664とSH7047Fでは、結果が異なる…ということもわかってしまいました。SH7047Fは期待どおりなんですが、H8/3664はちょっとちが〜う。まあ、仕様で、きっと「char型がunsigned型の1バイトデータになっている」ということなんでしょう…。と書いているうちに、そういえば、ネットでいつか、同じようなフレーズを読んだような記憶が…。どこだっけ???

■H8/3664で実行

    cData01代入の答え=255
    sData01代入の答え=-1
      
■SH7047Fで実行
    cData01代入の答え=-1
    sData01代入の答え=-1

このプログラムで結果を見ると、見つけることは非常に簡単なんですが、これを実プログラムの中で見つけるのは大変でした(@_@)。えぇい、今日はプログラムやめやめ。というわけで、本日、ようやく角度指示(パルス数指示じゃなくて)でサーボが動くようになりました。めでたしめでたし。

 


SISO-LAB Knowledge