2017年1月20日金曜日

Raspberry Pi mruby (はじめの一歩)

Raspberry Pi に mruby を導入したので C言語 と連携(と言えるかはまだ不明)、最近の組込みソフトの作成はかなり手抜きで始められます。いきなり、IDE の main() の画面が現れてコードを書き込んで下さいとなる。チョット待って「スタックの設定」はどうなっているのと気になって調べるとデフォルト値が設定されている。これが正しい値でCPUのデータシートを読んだのは何だったのかとなる。  でも、原理は知っておいたほうが役立つ(以前、昨日までは開始で main() から動作していたのに、なにをいじったのか電源ON でmain() から走らない現象に出くわし慌てたことがあった?)  自動で作られるものに Makefile もある。以前は エディターでシコシコ書き込んだけど新しいIDEではファイルを新規追加すると勝手にMakefile に登録してくれる。mruby & C でも IDE があるのかな~?、何年ぶりかで vim でコードを書き、Makefile を作ってみた。タダタダオロオロするばかり

 wiringPi のサンプルを参照して作ってみた。


01: #include <stdio.h>
02: #include <stdlib.h>
03: #include <mruby.h>
04: #include <mruby/compile.h>
05: #include <wiringPi.h>
06: 
07: #define LED 0
08: 
09: int main( void )
10: {
11:  int i ;
12:  char s[32];
13: 
14:  wiringPiSetup() ;
15:  pinMode( LED, OUTPUT ) ;
16: 
17:  mrb_state *mrb ;
18:  mrb = mrb_open() ;
19: 
20:  for ( i = 0 ; i < 10 ; i++ ) {
21:   sprintf( s, "puts \'Hello No.%d\'\n", i );
22: //  printf( s ) ;
23:   mrb_load_string(mrb, s ) ;
24: 
25:   digitalWrite( LED, HIGH ) ; // LED ON
26:   delay (500) ;
27:   digitalWrite( LED, LOW ) ; // LED OFF
28:   delay( 500 ) ;
29:  }
30: 
31:  mrb_close(mrb) ;
32: }

 プログラムはそれなりにすぐ書けたけど、コンパイルが通らず、一苦労、コンパイル時にライブラリをリンクする必要があり、それが何処にあるのか分からずネットを探しまわった。それらしいのを見つけたけど、コンパイル時のエラーメッセージが良く分からず遠まわりしてしまった。

Makiefile を晒します。(ジーッと見つめないで)
01: CC = gcc
02: INCLUDES = -I/home/pi/mruby/include
03: DEBUS =
04: CFLAGS = $(DEBUG) $(INCLUDES)
05: LIBS = /home/pi/mruby/build/host/lib/libmruby.a
06: 
07: LDFLAGS = -L/usr/local/lib
08: LDLIBS = -lwiringPi -lwiringPiDev -lpthread
09: 
10: SRC = mrLED.c
11: 
12: OBJ = $(SRC:.c=.o)
13: BINS = $(SRC:.c=)
14: 
15: mrLED: mrLED.o
16:  $Q echo "Start LED build"
17:  $Q $(CC) $(CFLAGS) -o $@ mrLED.o $(LIBS) $(LDFLAGS)  $(LDLIBS) -lm
18: 
19: clean:
20:  $Q echo "[Clean]"
21:  $Q rm -f $(OBJ) *~ tags $(BINS)


配線は shell でLチカと同様です。



コンパイルと実行の様子。



0 件のコメント:

コメントを投稿