φ(. . )めもめも

技術関連の個人的な備忘録

RaspberryPi - C言語でPWM制御。からの、Ruby用ライブラリ作成(つづき)

前回のつづき。

Rubyライブラリの作成

前回のプログラムの関数をRubyで使用できるようにライブラリ化

Swigのインストール

$ sudo apt-get install swig

定義ファイルを書く

ライブラリに登録する関数をpwm.iというファイルに記述する

登録する関数
set_range
set_duty
hw_initialize
pwm.iの内容
%module pwmlib
%{
extern volatile unsigned * io_mapping(int base_addr);
extern void hw_initialize();
extern void set_range(int range);
extern void set_duty(int duty);

%}
%init
%{
hw_initialize();
%}

extern void set_range(int range);
extern void set_duty(int duty);

ラッパー関数作成

siwgを使用し、ruby用のラッパー関数を作成する。

$ swig -ruby pwm.i

pwm_wrap.cが生成される

Makefileの生成

extconf.rbを作成して実行する

extconf.rbの内容
require 'mkmf'
create_makefile('pwmlib')
実行
$ ruby extconf.rb

Makefileが生成される

ビルドとインストール

$ make
$ sudo make install ← 生成された.soファイルをRubyのライブラリディレクトリへコピー

Rubyからの利用

C言語版と同様、Rangeを1000固定で、Dutyを0~1000まで100単位で変化させるサンプル。

実行
$ sudo ruby pwm.rb