質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

3228閲覧

ラズパイでのgccコマンド

syo000

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2017/01/19 01:25

c

1/* 2 * scanir.c 3 */ 4 5#include <wiringPi.h> 6#include <stdio.h> 7#include <stdlib.h> 8#include <string.h> 9#include <signal.h> 10#include <sys/time.h> 11#include <lcd.h> 12 13int readable = 1; // 非同期でイベントが発生した場合、コールバックにより0に設定される 14int read_pin = 7; // 入力ピン番号(wiringpiの番号) 15int interval = 10; // 継続時間判定の間隔(us) 16int max_wait = 5000;// 最大継続時間(us) 17int hp = 101; //HP 18int fd; 19char *GameOver = "aplay GameOver.wav"; 20 21void signalCallBackHandler(int sig) 22{ 23 readable = 0; 24} 25 26double getMoment() 27{ 28 struct timeval tv; 29 gettimeofday(&tv, NULL); 30 return ((double)(tv.tv_sec) * 1000000 + (double)(tv.tv_usec)); 31} 32 33int main(int argc, char *argv[]) 34{ 35 int result; 36 37 38 39 fd = lcdInit(2,16,4,4,5,0,1,2,3,0,0,0,0); 40 41 // スキャンデータを書きだすファイルのポインタを取得 42 FILE *fp; 43 char *fileName = "ir.data"; 44 if(argc >= 2){ fileName = argv[1]; } 45 if((fp = fopen(fileName, "w")) == NULL){ 46 printf("can't open file : %s\n", fileName); 47 exit(1); 48 } 49 printf("write file: %s\n", fileName); 50 51 52 // signal関数は、シグナル(非同期イベント)が発生したときに、 53 // そのシグナルを受信して、シグナル特有の処理を行うシグナル処理関数(シグナルハンドラ)を登録します。 54 if(signal(SIGINT, signalCallBackHandler) == SIG_ERR){ 55 printf("can't set signal\n"); 56 exit(1); 57 } 58 59 // wiringpiのセットアップ 60 if(wiringPiSetup() == -1){ 61 printf("error wiringPi setup\n"); 62 exit(1); 63 } 64 65 66 max_hp(); 67 68 69 70 // 読み取りピン番号 71 if(argc >= 3){ 72 read_pin = atoi(argv[2]); 73 } 74 pinMode(read_pin, INPUT); 75 printf("scaning pin: %d (wiringpi)\n", read_pin); 76 77 78 // 最大継続時間 79 if(argc >= 4){ 80 max_wait = atoi(argv[3]) * 1000; 81 } 82 printf("max keep time: %d(ms)\n", max_wait/1000); 83 84 85 // 準備完了argcarg 86 printf("Infrared LED scanning start.\n"); 87 printf("Pressed Ctrl+C, this program will exit.\n"); 88 89 while(1){ 90 // スキャン開始 91 result = scan(fp); 92 93 fclose(fp); 94 if(result || !readable){ 95 printf("\n\n!!! could not scanning. quit.\n\n"); 96 } else { 97 printf("\nScanning has been done.\n\n"); 98 } 99 100 if(hp == 0){break;} 101 102 103 } 104 105 106 return 0; 107} 108 109int scan(FILE *fp) 110{ 111 112 113 system(GameOver); 114 115 116 117 118 // 受光モジュールは受光するとLOWになる 119 if(!digitalRead(read_pin)){ return 1; } 120 121 int on, off; 122 int p = 0; 123 124 while(hp >= 1){ 125 126 // 送信が開始されるまで待機 127 while( readable && digitalRead(read_pin) ){} 128 129 // 解析開始 130 while( readable ){ 131 on = getTime(0); 132 off = getTime(1); 133 fprintf(fp, "%6d %6d\n", on, off); 134 printf("%d\n",on); 135 //printf("%s\n", off); 136 137 138 lcddisplay(); 139 140 break; 141 } 142 143 } 144 //最大継時間同じ状態が続いたら送信は終了していると判断 145 //if(off > max_wait){ break; } 146 147 148 149 150 return 0; 151} 152 153int getTime(int status) 154{ 155 int count = 0; 156 int max = max_wait / interval; 157 double start, end; 158 159 start = getMoment(); 160 while( digitalRead(read_pin) == status ) 161 { 162 delayMicroseconds(interval); 163 count++; 164 //最大継続時間同じ状態が続いたら送信は終了していると判断 165 if(count > max){ break; } 166 } 167 end = getMoment(); 168 169 return getInterval(start, end); 170} 171 172int getInterval(double t1, double t2) 173{ 174 return (int)(t2-t1); 175} 176 177 178 179int lcddisplay(int fd) { 180 int p; 181 182 lcdClear(fd); 183 lcdPuts(fd,"HP /100"); 184 185 if(hp >= 100){ 186 p = 3; 187 }if(hp >= 11){ 188 p = 4; 189 }else{p = 5;} 190 lcdPosition(fd,p,0); 191 char sNum[100]; 192 hp -= 10; 193 sprintf(sNum,"%d",hp); 194 lcdPuts(fd,sNum); 195 196 lcdPosition(fd,0,1); 197 lcdPuts(fd,"BULLET [ ]"); 198 199 200 201} 202 203 204int max_hp(int fd) { 205 int p; 206 207 208 209 210 lcdClear(fd); 211 lcdPuts(fd,"HP 100/100"); 212 213 214 215 lcdPosition(fd,0,1); 216 lcdPuts(fd,"BULLET [ ]"); 217 218} 219 220

こちらを
sudo gcc scanir.c -o scanir -l wiringPi
というコマンドでコンパイルしようとしたのですが
/tmp/ccSiaCr5.o: 関数 main' 内: scanir.c:(.text+0xec): lcdInit' に対する定義されていない参照です
/tmp/ccSiaCr5.o: 関数 lcddisplay' 内: scanir.c:(.text+0x53c): lcdClear' に対する定義されていない参照です
scanir.c:(.text+0x548): lcdPuts' に対する定義されていない参照です scanir.c:(.text+0x594): lcdPosition' に対する定義されていない参照です
scanir.c:(.text+0x5d4): lcdPuts' に対する定義されていない参照です scanir.c:(.text+0x5e4): lcdPosition' に対する定義されていない参照です
scanir.c:(.text+0x5f0): lcdPuts' に対する定義されていない参照です /tmp/ccSiaCr5.o: 関数 max_hp' 内:
scanir.c:(.text+0x624): lcdClear' に対する定義されていない参照です scanir.c:(.text+0x630): lcdPuts' に対する定義されていない参照です
scanir.c:(.text+0x640): lcdPosition' に対する定義されていない参照です scanir.c:(.text+0x64c): lcdPuts' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

このように表示されてうまくいきません。
何が悪いのかわかりません。。すいません教えていただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ただのリンクエラーに見えますが、lcdInit()などを含むライブラリをリンクし忘れているだけではないでしょうか。

投稿2017/01/19 15:51

....

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問