• 締切済み

++が使えない

最近マイコンを使うことにって今勉強中ですが わからないことがあるので教えて頂きたいです。 使用しているマイコン:H8 300シリーズ 開発環境:HEN //プロトタイプ宣言 void test (void); //グローバル宣言 unsigend int x; void main (void) { init(); ⇦略します while(1){ test(); } } void test (void) { x++; lcdprintf("%d",x); ⇦LCDに表示するプログラムです } で、ほかにも1msごとにlcdに表示するための割り込みをかけています。 このとき全く数値が加算されないで困っています。 変数もグローバル変数ではなくローカル変数だとちゃんと加算されるます。 一体なにがげんいんなのでしょうか? わかる方宜しくお願いします )

みんなの回答

回答No.4

> 変数もグローバル変数ではなくローカル変数だとちゃんと加算されるます。 既に回答されていますが、グローバル変数はRAM領域へ取られているのでしょうか。 ROM領域へ取られてしまっていれば書き換えできません。 書き込みが必要な変数はRAM上に取るよう設定するか書き換えれる部分に書き込むように工夫しましょう。

回答No.3

H8は使ったことがないので、間違っていたら、すみませんが… static変数とauto変数で挙動が違う場合には、リンク・ロケートがちゃんと出来ているかどうか、確認する必要があります。 リンカに、コード領域のアドレス指定、RAM領域の指定、スタック領域の指定をしている部分があるはずですが、そのへんは、ちゃんと指定できていますか? ちなみに、xを関数の外ではなく、test関数の中で、 static unsigned x; とすると、どうなりますか?

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.2

H8は使った事ないのでわかりませんが、 グローバル変数が使えるのでしょうか? 全て推測ですが、 恐らく、マイコン制御用のヘッダーか何かインクルード していると思うのですが、 グローバル変数を呼ぶための関数が別途定義されて いたりしませんか? 後は、init()は、マイコンを初期化するための 関数だと思いますが、 whileループや、インクリメントを無しにして、 変数に何か値を代入して、lcdprintfで出力 するなどの極力シンプルにした形での出力は 試されましたか?

  • akr
  • ベストアンサー率18% (32/173)
回答No.1

++が使えないとありますが、そこは検証されましたか? test関数に入った直後のxの値と、x++実行後のxの値に変化が無いのであれば、処理系がおかしいですよね。 そうなるとアセンブラレベルでデバッグしてみないと分からない気がします。 また、ここに書かれているコードは、質問用に抜粋もしくは改変した物ですよね。 実は、xに対してクリア処理やデクリメントしているコードは無いですか。 もしくは、変数領域を破壊しちゃってるバグはないですか。 チョット思いついたことを書いてみました。

関連するQ&A