こんにちは,はじめまして。東京高専の小坂と申します。
時々このMLを見ていたのですが。初めて書き込みます。
H8/3664(AKI-3664フラットマイコンキット)でのことです。
秋月で販売していたCコンパイラ(以下のバージョン)を利用しています。
H8S,H8/300 SERIES C Compiler Ver. 2.0D Evaluation software
H SERIES LINKAGE EDITOR Ver. 5.3B Evaluation software
SCIに出力するための簡易版printf
void SCI_printf(char *format,...)
を作っていたのですが,
#include <stdarg.h>
をインクルードして
void SCI_printf(char *format,...)
{
ここに必要な変数....
va_list arg_ptr;
va_start(arg_ptr,format);
while (*format) {
で書き始めたところ,
void SCI_printf(char *format,...)
{
ここに必要な変数....
va_list arg_ptr;
va_start(arg_ptr,format);
arg_ptr-=2; /*なぜかわからないが,ここで2を引かないと動かない*/
/*たぶんコンパイラがアドレスビット幅について混乱しているらしい*/
while (*format) {
このように2バイトずらさないと動きません。
このルーチンは3048では動作していたものを3664用にそのまま持ってきたものです。
ちなみに3664では
formatのアドレスをみるとFF75,
va_start(arg_ptr,format);直後のarg_ptrの値はFF78
arg_ptr-=2;直後のarg_ptrの値はあたりまえだけれどFF76
になっていました。
コンパイラオプション -cpu=300hn
をつけています。コンパイルリンク時にエラー表示は見えません。
hitachのCコンパイラがアドレスを数え間違えているような気がします。
3048はアドレスが3byte?だったけれど3664は2Byteのようです。
他にコンパイラオプションがあるのでしょうか。
このまま,arg_ptr-=2;で対処するしか手はないのでしょうか。
教材ですので,あまり変なことはしたくありません。
****************************************************
〒193 0997 八王子市椚田町1220-2 東京工業高等専門学校
情報工学科 小坂敏文 phone0426-68-5199 Fax68-5098