前回のつづき。
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単位で変化させるサンプル。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'pwmlib' | |
pwm = Pwmlib | |
pwm.set_range(1000) | |
0.step(1000, 100) do |i| | |
sleep(1) | |
puts "d=#{i}" | |
pwm.set_duty(i) | |
end |
実行
$ sudo ruby pwm.rb