FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PIC Printf(PIC C Lite) その2 PIC 自作printf»

コメント

コメントの投稿













管理者にだけ表示を許可する

PIC Printf(PIC C Lite) その1


ふと、元々本で紹介されていた方法をもう一度試してみようと思い
再度挑戦。

ここで、一つミスを犯している事に気がつきました。
今まで自作したLCD用関数をヘッダファイルに記述していました。

しかし、これだと複数のファイルから参照された場合、関数を重複定義してしまうことになりエラーとなってしまうようです。
こんな初歩的なことも気がつきませんでした。

ってなわけで、解決法としてはプリプロセッサを使うか、関数の中身をCファイルに記述してヘッダの中には関数の宣言(?)だけを記述する方法があると思います。

とりあえずプリプロセッサで解決しようと思います。
#ifndef _PICLCD_H
#define _PICLCD_H

   今までのヘッダのコード

#endif

#ifndef は指定した値が#defineで定義されていなければ#endifまでの間の文章を有効にします。
初めて呼び出された時はまだその値(ここでは_PICLCD_H)は存在しないので、
そのまま次の文章をコンパイルしていきます。が、次の行に#define _PICLCD_Hとあるので
ここで初めてこの値が定義されました。
したがって、次からは値が定義されていることになるため、2度目以降は#endifまでの文章を読み飛ばしてしまいます。
よって重複定義を防ぐことが出来るようです。


これで、この問題は解決。
と、思ったんですが

なぜか、重複定義のエラーがww

Error   [237] C:\PIC_project\test\lcd.h; 25. function "_lcd_out" redefined
Error   [237] C:\PIC_project\test\lcd.h; 42. function "_lcd_data" redefined
Error   [237] C:\PIC_project\test\lcd.h; 51. function "_lcd_cmd" redefined
Error   [237] C:\PIC_project\test\lcd.h; 59. function "_lcd_clear" redefined
Error   [237] C:\PIC_project\test\lcd.h; 66. function "_lcd_init" redefined
Error   [237] C:\PIC_project\test\lcd.h; 90. function "_lcd_pos" redefined
Error   [237] C:\PIC_project\test\lcd.h; 104. function "_lcd_printf" redefined

ちくしょう、なんでだ。
きっとなんか勘違いしてるんだろうなぁ、ムムム

仕方がないから、ヘッダとCのファイルを分けることでひとまずしのぎます。
まず今までのヘッダファイルをCファイルとして保存します。
さらに、ヘッダファイルに関数の名前の宣言文だけを記入しておきます。
lcd.c  lcd.h

lcd.hの中身


void lcd_out(char code, int flag);
void lcd_data(char asci);
void lcd_cmd(char cmd);
void lcd_clear();
void lcd_init();
void lcd_pos(char line,char col);
void lcd_printf(char *data,...);


これでプロジェクトにlcd.cとlcd.hを組み込んで、それぞれのファイルからlcd.hをインクルードすれば問題ないはずです。 にしても何でさっきの方法でだめなんだろう。勉強不足だなぁ・・・

少し長くなったのでここら辺で。




ポチットクリックお願いします。
スポンサーサイト

PIC Printf(PIC C Lite) その2 PIC 自作printf»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。