問題コンパイルAVR

D

david90

Guest
私はこのコードをコンパイルしようとして
いるコード:

//************************************************ *****************************

/ /ファイル名: rprintftest.c

/ /

/ /タイトル: rprintfライブラリ関数の使用例

/ /リビジョン: 1.0

/ /注意事項:

/ /ターゲットのMCU :アトメルAVRシリーズ

/ /エディタのタブ: 4

/ /

/ /更新履歴:

/ /変化の時に誰が説明

/ / ----------- ----------- -----------------------

/ / 10 - 09 - 2002 pstangは、プログラム作成

//************************************************ *****************************//-----含めるファイル----------------------------------------- ----------------

#含まれ<avr/io.h> / / I / Oの定義(ポート名、ピン名、等)を含める

# <avr/signal.h> / / " "名前の信号などを含む( )名を割り込み

#含まれ<avr/interrupt.h> / /サポート割り込みなど# " global.h " / include /に、当社のグローバル設定が含まれます

# " uart.h " / include /にUARTの関数ライブラリを含む

# " rprintf.h " / include /にprintf関数ライブラリを含む

# " timer.h " / include /に(タイミングは、 PWMなど)タイマー関数ライブラリを含む

# " vt100.h " / include /にVT100端末のサポートなどボイドrprintfTest (ボイド) ;//-----開始コード----------------------------------------- -------------------

INTはメイン(ボイド)



/ /ライブラリの初期化

/ /は、 UART (シリアルポート)を初期化

uartInit ( ) ;

/ /デバッグ用のUARTのボーレートを設定/出力報告

uartSetBaudRate ( 9600 ) ;

/ /タイマーシステムの初期化

timerInit ( ) ;/ / rprintfシステムの初期化

すべてのステートメントの出力としてrprintf / / -使用uartSendByte

/ /これはすべてのrprintfライブラリ関数を直接の原因となりますが

/ /は、 UARTに出力

/ / - rprintfの文字を任意のデバイスに出力することができます。

/ /あなたは、引数としては、符号なし文字にする関数を書く必要があります

/ / rprintfInitし、このように、このパス: ( YOUR_FUNCTION ) rprintfInit ;

rprintfInit ( uartSendByte ) ;/ / vt100ライブラリの初期化

vt100Init ( ) ;/ /オフは、端末の画面

vt100ClearScreen ( ) ;/ /テストを実行

rprintfTest ( ) ;戻り0 ;

)ボイドrprintfTest (ボイド)



u16ヴァル;

u08 mydata ;

u08 mystring [ 10 ] ;

フロートb ;

u08小;

u16媒体;

u32大;作業していることを知っているので、 / /は少しイントロのメッセージを印刷

rprintf ( " ¥¥研究¥¥ nこの私のクールなプログラムです! ¥¥研究¥¥ Ñ " ) ;rprintf ( " ¥¥研究¥¥ rprintfテストするnWelcome ! ¥¥研究¥¥ Ñ " ) ;/ / 1つの文字を印刷

rprintfChar ( ' h 'を) ;

rprintfChar ( 'メール' ) ;

rprintfChar ( 'リットル' ) ;

rprintfChar ( 'リットル' ) ;

rprintfChar ( 'または' ) ;

/ /文字列を一定のフラッシュに保存印刷

rprintfProgStrM ( "世界! " ) ;

/ /ラインフィードの組み合わせは、キャリッジリターンを印刷

rprintfCRLF ( ) ;

/ /注意して使用しrprintfCRLF ( )より多くのメモリをより効率的です

/ /を使用してrprintf ( " ¥¥研究¥¥ Ñ " )は、特にそれを繰り返し行う場合mystring [ 0 ] = ' ' ;

mystring [ 1 ] = ' ' ;

mystring [ 2 ] = ' s 'を;

mystring [ 3 ] = ' t 'を;

mystring [ 4 ] = ' r 'を;

mystring [ 5 ] = ' ' ;

mystring [ 6 ] = ' n 'を;

mystring [ 7 ] = 'グラム' ;

mystring [ 8 ] = ' ! ' ;

mystring [ 9 ] = 0 ; / / nullを終了/ / - RAMからの文字列がnull印刷終了

rprintfStr ( mystring ) ;

rprintfCRLF ( ) ;/ / RAMからは、文字列のセクションを印刷

/インデックス2 / -を開始

/ / -印刷6文字

rprintfStrLen ( mystring 2 、 6 ) ;

rprintfCRLF ( ) ;ヴァル= 24060 ;

mydata = ' l 'の;/ /を10進数を印刷

rprintf ( "これは、 10進数: % d個の¥¥研究¥¥ Ñ " 、ヴァル) ;/ /を16進数を印刷

rprintf ( "これは、 16進コード: % × ¥¥研究¥¥ Ñ " 、 mydata ) ;/ /文字を印刷

rprintf ( "これは、文字: % ç ¥¥研究¥¥ Ñ " 、 mydata ) ;/ /プリントの16進数値

小= 0x12 ; / / 1文字

媒体= 0x1234 ; / /短い

大= 0x12345678 ; / /は長いrprintf ( "これは、 2桁の16進数の番号(文字) : " ) ;

rprintfu08 (小) ;

rprintfCRLF ( ) ;rprintf ( "これは、 4桁の16進コード( )短編: " ) ;

rprintfu16 (中間) ;

rprintfCRLF ( ) ;rprintf ( "これは、 8桁の16進コード(長) : " ) ;

rprintfu32 (大) ;

rprintfCRLF ( ) ;/ / 10進数のフォーマットを印刷

/ / -使用してベース10

/ / -を使用する8文字

/ / -のコード署名されている[真]

' / / -パッド。
期間

rprintf ( "これは、フォーマットの10進数の数字です: " ) ;

rprintfNum ( 10 、 8 、 TRUEを、 ' 。 ' 、ヴァル) ;

rprintfCRLF ( ) ;b = 1.23456 ;/ /浮動小数点数を印刷

/ /を使用する10桁の精度/ /注:使用rprintfFloat ( )を使用しなければならないのENABLE global.hサポートする

/ /あなたのglobal.hで次の使用:定義# RPRINTF_FLOAT/ / rprintf ( "これは、浮動小数点数です: " ) ;

/ / ( 8 、 b )のrprintfFloat ;

/ / rprintfCRLF ( ) ;

 
david90書いた:変更が動作するまで

マイコン= atmega163にマイコン= at90s2313
 
ここではコンパイラ
の メッセージが表¥示
されます> "
" すべてのmake.exe
avr - gccの-
cを -
gを -
OSの 壁- Wstrict -プロトタイプ用IC : ¥¥ avrlib -ワ、 ahlms = rprintftest.lst - mmcu = at90s2313 -私。またはrprintftest.c - rprintftest.o
でrprintftest.cから読み込まれるファイル: 19 :
はC : / WinAVR / avr /
include /
に avr / signal.h : 36:2 :警告: "このヘッダファイル
は 時代遅れで
警告# 。 <avr/interrupt.h>を使用する。 "
avr - gccの-
cを -
gを -
OSの 壁- Wstrict -プロトタイプ用IC : ¥¥ avrlib -ワ、 ahlms =はC : ¥¥ avrlib / buffer.lst - mmcu = at90s2313 、私。はC : ¥¥ avrlib / buffer.c NEC
アメリカ : ¥¥ avrlib / buffer.o
avr - gccの-
cを -
gを -
OSの 壁- Wstrict -プロトタイプ用IC : ¥¥ avrlib -ワ、 ahlms =はC : ¥¥ avrlib / uart.lst - mmcu = at90s2313 、私。はC : ¥¥ avrlib / uart.c NEC
アメリカ : ¥¥ avrlib / uart.o
から読み込まれるファイルのC : ¥¥ avrlib / uart.c : 20 :
はC : / WinAVR / avr /
include /
に avr / signal.h : 36:2 :警告: "このヘッダファイル
は 時代遅れで
警告# 。 <avr/interrupt.h>を使用する。 "
avr - gccの-
cを -
gを -
OSの 壁- Wstrict -プロトタイプ用IC : ¥¥ avrlib -ワ、 ahlms =はC : ¥¥ avrlib / rprintf.lst - mmcu = at90s2313 、私。はC : ¥¥ avrlib / rprintf.c NEC
アメリカ : ¥¥ avrlib / rprintf.o
avr - gccの-
cを -
gを -
OSの 壁- Wstrict -プロトタイプ用IC : ¥¥ avrlib -ワ、 ahlms =はC : ¥¥ avrlib / timer.lst - mmcu = at90s2313 、私。はC : ¥¥ avrlib / timer.c NEC
アメリカ : ¥¥ avrlib / timer.o
から読み込まれるファイルのC : ¥¥ avrlib / timer.c : 20 :
はC : / WinAVR / avr /
include /
に avr / signal.h : 36:2 :警告: "このヘッダファイル
は 時代遅れで
警告# 。 <avr/interrupt.h>を使用する。 "
はC : ¥¥ avrlib / timer.c :関数` timer1PWMInit ' :
はC : ¥¥ avrlib / timer.c : 306 :エラー: `
この 関数の中でOCR1BH '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c : 306 :エラー: (各
1 回
だけ 報告されている識別子を申¥告していない
はC : ¥¥ avrlib / timer.c : 306 :エラー:
それインチ 表¥示される各機能¥に対応する)
はC : ¥¥ avrlib / timer.c : 307 :エラー: `
この 関数の中でOCR1BL '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c :関数` timer1PWMBOn ' :
はC : ¥¥ avrlib / timer.c : 354 :エラー: `
この 関数の中でCOM1B1 '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c : 355 :エラー: `
この 関数の中でCOM1B0 '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c :関数` timer1PWMBOff ' :
はC : ¥¥ avrlib / timer.c : 370 :エラー: `
この 関数の中でCOM1B1 '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c : 371 :エラー:
この 関数でCOM1B0 ` '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c :関数` timer1PWMBSet ' :
はC : ¥¥ avrlib / timer.c : 395 :エラー: `
この 関数の中でOCR1B '申¥告していない(最初の使用)
はC : ¥¥ avrlib / timer.c :トップレベル
では :
はC : ¥¥ avrlib / timer.c : 451 :警告: ` SIG_OUTPUT_COMPARE1B 'は
、 スペルの誤ったシグナルハンドラが
適用されないはC : ¥¥ avrlib / timer.c : 467 :警告: ` SIG_OUTPUT_COMPARE2 'は
、 スペルの誤ったシグナルハンドラが
適用されないmake.exe : *** [にc : ¥¥ avrlib / timer.o ]エラー1
rmにc : ¥¥ avrlib / uart.oc : ¥¥ avrlib / buffer.oc : ¥¥ avrlib / rprintf.o

>プロセス終了コード: 2
>撮影時間: 00:04

Atmegaもし私at90s2313の代わりに使用すると、上記のエラーが発生しなかった。

 
さて、私が、コンパイラWinAVRに熱心ではない
場合 は無言のコンパイラ
ではない (私は確認
) を確実にマイコン= atmega163マイコン= at90s2313には十¥分
で はないのではなくmentioneされていません。
これは
、 コンパイラは
、 内部に" timerInit ( ) ; " timer.cファイルは
、 OCR1B 、 COM1B呼び出す別の宣言を通知するために初期化されてはならない
、 または使用
され ていないからAT90S2313に存在する必要があります。
他の警告時代遅れsignal.hヘッダとinterrupt.hそれについて
の 愚かなコンパイラの警告を使用してより良いのでそれを利用
している が
、 後に宣言signal.h

したがって、 Cに
行く : ¥¥ avrlib ¥¥ timer.cとOCR1B 、 COM1Bにも使用されていないのMCU = AT90S2313は
、 ヘッダがcorespondingの定義を含むファイルを削除するために宣言への参照をコメントアウトする。これは良い解決策はないが
、 最低でも試している場合はエラーまだユーティリティ
が 提起しているmakefileを参照してください。

 
これは
、 2313年にコンパイルされません理由は
、 必要なリソ¥ースを
、 その部分
で は使用できませんタイマです。io.hのMMCU属性は
、 ヘッダファイルを取り出し
、 適切なデバイスのヘッダーファイルが含まれています。IO163.hときに選択してくださいMEGA163含まれています。このヘッダに必要なタイマーの変数を定義している。これは
、 リソ¥ースファイルのIO2313.hその部分では使用できませんが
、 これらの定義を持っていません。

いずれかの2313でこのコードを使用するには、タイマーを書き換えるもの
、 または排除することができますように要件を削減する必要があります。

---スティーブ

 
やあ、

IAR Cコンパイラを使用することができますが
、 やってみても
、それ は正常に
動作については
、 ファイルを作成して世話をする必要はありません

火災は
、 ワイヤ

<img src=¥"http://www.edaboard.com/images/smiles/icon_idea.gif¥" alt=¥"アイデア¥" border=¥"0¥" />
 
バンジョー右at902313の登録名と周辺のatmega163と同じではありません。しかし、ときにフィットすることはできませんat902313このコードをコンパイルするには完了します。私はあなたより多くのavrlibを使用する
とき に使用することをお勧めatmega8

 
signal.hファイルとは
、 実際にはマイコンの割り込みベクタinterrupt.hに対処されている同じものを参照されています。# には
、 行を削除してみてください<avr/signal.h>をコンパイルしてから
、 もう一度試してください。

 

Welcome to EDABoard.com

Sponsor

Back
Top