Raspberrypi割り込み処理 wiringPiISR関数を使って割り込み処理をする 例題で作成するが現状のままではエラーが出てコンパイルできない。 (最下段に最終的な例題掲載) wiringPiISR関数が見つからない。==>wiringpi.cを新しくする ==>wiringPiISR関数が含まれている。 他にpiThread.c、piHiPri.cが必要である。 また”-pthread”オプションを付けないとコンパイルができない。 結果、以下の操作でコンパイルができた。 gcc -pthread int_test.c wiringPi.o piHiPri.o -o int_test 実行すると、今度は ”gpio: unable to open gpio edge interface for pin・・・・” と表示される。 これはgpio.c内で出力している。 wiringpi.c内のwiringPiISR関数内にプリント分を入れてdebugすると pid=0の時(子プロセス)に表示される。 結果、sysytemのupdateが必要だとわかった。 (https://projects.drogon.net/raspberry-pi/wiringpi/functions/) 以下の処理を行った。 # sudo apt-get update # sudo apt-get upgrade # sudo apt-get install git-core # sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update # sudo rpi-update # reboot ★webのサンプルでは、”setup = wiringPiSetupSys();”となっているが、 これだと、wiringPiのconnector Pinが「BCM GPIO」Pinのアサインになってしまう為、 「wiringPiSetup();」を使用した。 ★また、”wiringPiISR(pin_n,INT_EDGE_FALLING, &int_signal);”では ”edge: Invalid mode: fallin. Should be none, rising, falling or both” のエラーが出た。 ”wiringPi.c”"の /**/ if (mode == INT_EDGE_FALLING) modeS = "fallin" ; を modeS = "falling" ; に修正することでOKとなった。 // ############################################### make コマンド gcc -c wiringPi.c -o wiringPi.o gcc -pthread int_test.c wiringPi.o piHiPri.o -o int_test int_test.c ソースファイル // ############################################### #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include "wiringPi.h" #include "pi_gpio.h" #define pin_03 8 // rsp board pin:03 #define pin_05 9 // rsp board pin:05 #define pin_07 7 // rsp board pin:07 #define pin_08 15 // rsp board pin:08 #define pin_10 16 // rsp board pin:10 #define pin_11 0 // rsp board pin:11 #define pin_12 1 // rsp board pin:12 #define pin_13 2 // rsp board pin:13 #define pin_15 3 // rsp board pin:15 #define pin_16 4 // rsp board pin:16 #define pin_18 5 // rsp board pin:18 #define pin_19 12 // rsp board pin:19 #define pin_21 13 // rsp board pin:21 #define pin_22 6 // rsp board pin:22 #define pin_23 14 // rsp board pin:23 #define pin_24 10 // rsp board pin:24 #define pin_26 11 // rsp board pin:26 // ############################################### void int_signal(void){ printf("Signal-A\n"); } // ############################################### void int_noise(void){ printf("Signal-B\n"); } // ############################################### int main(void){ int i; printf("pi interrupt test start !!\n"); if (wiringPiSetup() == -1){ printf("wiringPiSetup init error\n"); return(1); } pinMode(pin_22, INPUT); // pinMode(pin_26, INPUT); // pullUpDnControl(pin_22, PUD_UP); pullUpDnControl(pin_26, PUD_UP); wiringPiISR(pin_22,INT_EDGE_FALLING, &int_signal ); wiringPiISR(pin_26,INT_EDGE_RISING, &int_noise ); // wiringPiISR(pin_26,INT_EDGE_BOTH, &int_noise ); i=0; while(1){ sleep(2); printf("%d\n",i++); } return 0; } // ############################################################################