一体何のコードCのこの間違ったと???

D

david90

Guest
コード:

#は<avr/io.h>含まれてボイド遅延(ボイド);

int型、b;メイン(ボイド)が無効



TCCR0 = 0x03に。

DDRB = 0xFFまで。

DDRD = 0x3です。

1 = 0x3です。

b = 0x1に。スイッチ()



ケース0:= 0x40の;

休憩;

ケース1:= 0x79;

休憩;

ケース2:= 0x24が。

休憩;

ケース3:= 0x30を。

休憩;

ケース4:= 0x19;

休憩;

ケース5:= 0x12;

休憩;

ケース6:= 0x2に。

休憩;

ケース7:= 0x78;

休憩;

ケース8:= 0;

休憩;

ケース9:= 0x10を。

休憩;



スイッチ(b)



ケース0:b = 0x40の;

休憩;

ケース1:b = 0x79;

休憩;

ケース2:b = 0x24が。

休憩;

ケース3:b = 0x30を。

休憩;

ケース4:b = 0x19;

休憩;

ケース5:b = 0x12;

休憩;

ケース6:b = 0x2に。

休憩;

ケース7:b = 0x78;

休憩;

ケース8:b = 0;

休憩;

ケース9:b = 0x10を。

休憩;

)(1)中



ポートB =;

PORTD = 0x1に。

遅延();ポートB = b;

PORTD = 0x2に。

遅延();

))ボイドの遅延は(ボイド)/ / MHzの4の65ミリ秒の遅延をプロデュース



TCNT0 = 0x7Fの;

(中!(TIFR&0x02)は);

/ /タイマー0オーバーフローフラグを設定するのを待つ

TIFR = 0x02の/ /クリアオーバフローフラグ


 
サラム、

提案が良いようにするコードは、。

1 -関数をConvertTo7Seg(スイッチ)の代わりにあなたが書く使用して、すなわち関数を呼び出した2倍!

2 -それらを呼び出すかはbの変数と使用して、グローバルそれらを使用する代わりに、varのように使用するローカル変数varにポインタ

関数を呼び出すすなわちコード:

はx = ConvertTo7Seg(&)
 
します。

しかし、それでもまだ、なぜ習慣は"実行スイッチ()"???をそれはちょうど切り替える"ジャンプする(b)。"

私のプログラムにはされていない効率が"されずに実行理由はない、それはなぜ"スイッチ()。

理由はポインタであることを使用するより?
コード:

#は<avr/io.h>含まれて

int型、bは、ABB。無効のmain()

(ABB社= 3;

b = 1;スイッチ(b)



ケース0:= 0x40の;

休憩;

ケース1:= 0x79;

休憩;

ケース2:= 0x24が。

休憩;

ケース3:= 0x30を。

休憩;

ケース4:= 0x19;

休憩;

ケース5:= 0x12;

休憩;

ケース6:= 0x2に。

休憩;

ケース7:= 0x78;

休憩;

ケース8:= 0;

休憩;

ケース9:= 0x10を。

休憩;)



 
たぶんこのことができます:

コード:#は<avr/io.h>含まれて

ボイド遅延(ボイド);const char型segment_table [10] =



0x40の、0x79、0x24が、0x30を、0x19、0x12、0x2に、0x78、0、0x10の。

)int型、b;メイン(ボイド)が無効



TCCR0 = 0x03に。

DDRB = 0xFFまで。

DDRD = 0x3です。

1 = 0x3です。

b = 0x1に。(の;;)



ポートB = segment_table []を;

PORTD = 0x1に。

遅延();

ポートB = segment_table ;

PORTD = 0x2に。

遅延();



)ボイドの遅延は(ボイド)/ / MHzの4の65ミリ秒の遅延をプロデュース



TCNT0 = 0x7Fの;

/ /タイマー0オーバーフローのフラグを待ちます(中!(TIFR&0x02)は);設定する

TIFR = 0x02の/ /クリアオーバフローフラグ



 
おかげで、私はコードを最適化だしない探し。私は動作しませんでした探してステートメントの理由私の答えスイッチでコードが。トンの仕事をも'なぜそれがわしのも知ってほしいそれが悪いコード私は。

私はウルコードを試してみました

のavr - gccの- cを- mmcu = at90s2313 -私。は- g - Oは- funsigned -文字- funsigned -ビットフィールド- fpack - test.exe.program.cプロトタイプ-府は、- adhlns = test.exe.program.lst -スタンダード= gnu99構¥造- fshort -列挙- Wstrict壁-の- o test.exe.program.o
test.exe.program.c:6:エラー:構¥文解析エラーの前に';'トークン
test.exe.program.c:12:警告:型の戻り値の'は'main'intです`しない
test.exe.program.c:関数`'メイン:
:エラー:`'宣言(最初にこの使用の関数16 test.exe.program.c:)
test.exe.program.c:16:エラー:(各宣言の識別子は1回だけ報告さ
test.exe.program.c:16:エラー:ログインが表¥示されるの関数は、各)
test.exe.program.c:17:エラー:`b')申¥告この関数の最初の使用(
test.exe.program.c:34:40:警告:ファイルのファイル末尾に改行がない
test.exe.program.c:'で、関数`遅延:
test.exe.program.c:34:エラー:構¥文エラー入力の終わりに
make.exe:*** [test.exe.program.o]エラー1

 
どのような"か一緒にbをを意味し、追加で"?

(もし動作するプログラムの出力を与える場合に必要)し、シミュレータを参照してください実行動作を行うについては心配する。最適化された距離を初期化するには以来、彼らは不必要があるの私のコンパイラは、これらのswitch文のためと定数b。スマート最適化コンパイラはポートBにあります定数も排除し、b、単に書かれている。

....する場合の問題のようですが私はコンパイラをあなたがしない)ので、io.h / avrのできないコンパイルしてプログラムを(行方不明私は。ヘッダーは、おそらくにある場合、われわれをあなたが見る、より人々はあなたをできるかもしれない。特に、どのようにさポートBは定義されて?

Cのマンのコードセミコロンを持って見当違い:
コード:

const char型segment_table [10] =



0x40の、0x79、0x24が、0x30を、0x19、0x12、0x2に、0x78、0、0x10の

);
 
感謝します。一件落着。/問題は解決した。

 

Welcome to EDABoard.com

Sponsor

Back
Top