制御プログラムの作成
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[RTAIの使い方]]
+ サンプルプログラム(showroom)のインストールと実行&br;
本来,CVS を使ってコマンドラインで
# cvs -d:pserver:anonymous@cvs.gna.org:/cvs/rtai co show...
としてインストールするが,proxy サーバ経由では CVS が使え...
そこで,スナップショット http://cvs.gna.org/daily/rtai-sn...
++ /usr/src に rtai-snapshot.tar.gz を展開.
# cd /usr/src
# tar zxvf rtai-snapshot.tar.gz
++ shared memory のサンプルプログラムを編集する(そのまま...
# cd rtai/showroom/v3.x/kern/shm
--- モジュール(カーネル空間のプログラム) shm.c: [[編集前>...
--- アプリケーション(ユーザ空間のプログラム) display.c: [...
++ コンパイル・実行(事前に .cshrc 等で PATH に /usr/realt...
# make
gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/inc...
make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules
make[1]: Entering directory `/usr/src/linux-2.6.20.21'
CC [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm.o
LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: vmlinux - Section mismatch: reference to .init....
(略)
WARNING: "rt_busy_sleep" [/usr/src/rtai/showroom/v3.x/ke...
WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern...
WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/...
CC /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.mo...
LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko
make[1]: Leaving directory `/usr/src/linux-2.6.20.21'
undefined! とたくさん出るのは無視
# ../ldmod
# insmod shm_rt.ko
# ./display
(ctrl-C で止める)
数字が変化する様子が表示されればOK.(カーネル空間のモジュ...
# rmmod shm_rt
# ../remod
ERROR: Module rtai_lxrt does not exist in /proc/modules
ERROR: Module rtai_smp does not exist in /proc/modules
ERROR: Module rtai_mup does not exist in /proc/modules
ERROR: Module rtai_up does not exist in /proc/modules
ERROR: Module rtai_hal is in use by rtai_sched
何故かエラー.
# lsmod
Module Size Used by
rtai_sched 80424 0
rtai_hal 32340 1 rtai_sched
(略)
手動で外す:
# rmmod rtai_sched
# rmmod rtai_hal
+ 実験用プログラム period の作成&br;
shm をベースにして,実行周期を記録するプログラム(period*)...
# cd /usr/src/rtai/showroom/v3.x/kern
# cp -a shm period (とりあえずコピーしてから編集する)
# cd period
# mv display.c period_app.c
# mv shm.c period_module.c
Makefile, GNUmakefile 中,shm → period_module,display → ...
period_module.c, period_app.c を適宜編集,ヘッダファイル ...
参考(編集,コンパイル・実行を一通り行った後のディレクトリ...
実行例:
# make
gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/inc...
make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules
make[1]: Entering directory `/usr/src/linux-2.6.20.21'
CC [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
Building modules, stage 2.
MODPOST 1 modules
WARNING: vmlinux - Section mismatch: reference to .init....
WARNING: vmlinux - Section mismatch: reference to .init....
(略)
[/usr/src/rtai/showroom/v3.x/kern/period/period_module_r...
WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern...
WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/...
CC /usr/src/rtai/showroom/v3.x/kern/period/period...
LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
make[1]: Leaving directory `/usr/src/linux-2.6.20.21'
# ../ldmod
# insmod period_module_rt.ko
# ./period_app > foo.dat
# rmmod period_module_rt
# ../remod
# rmmod rtai_sched
# rmmod rtai_hal
[[foo.datをグラフ表示した結果>/:RTAI/period/foo.png]]
時間が経過するに従いジッタが生じている.余分なモジュール...
+ 矩形波を出力するプログラム period_da* (period* に D/A ...
-- モジュールのプログラム period_module.c に D/A 出力を追...
--- D/A 出力を追加するために,adc.c, adc.h を追加する.使...
--- Makefile に,adc.o をリンクするように記述
--- adc.h にはボードの I/O ベースアドレスを記載する.調査...
# lspci -v
(略)
03:01.0 Multimedia controller: Contec Co., Ltd Unknown d...
Subsystem: Contec Co., Ltd Unknown device 8183
Flags: medium devsel, IRQ 10
I/O ports at ece0 [size=32]
03:02.0 Multimedia controller: Contec Co., Ltd Unknown d...
Subsystem: Contec Co., Ltd Unknown device 8153
Flags: medium devsel, IRQ 6
I/O ports at ecc0 [size=32]
id=8183 は D/A12-4(PCI), id=8153 は AD12-16(PCI).&br;
上記の場合,I/Oポートアドレスはそれぞれ 0xece0 と 0xecc0 ...
--- 作業後のディレクトリ: [[/usr/src/rtai/showroom/v3.x/k...
実行方法は上記 period* の場合と同様.&br;
実行時,D/A 変換ボードの出力 0ch をオシロで見ると, 50μse...
+ 周波数応答実験用プログラム freqresp
-- 作業後のディレクトリ: [[/usr/src/rtai/showroom/v3.x/ke...
-- sin 等数学関数を使っていて,libm を static リンクする...
-- 予め,FFTを計算するライブラリ [[librealfft.a>/:RTAI/fr...
-- D/A の 0ch と A/D の 0ch を直結しておく.(ゲイン1,位...
&br;
++ コンパイル
# cd /usr/src/rtai/showroom/v3.x/kern/freqresp
# mkdir data
# make clean
# make
++ 実行
# ../ldmod
# /sbin/insmod freqresp_module_rt.ko
# ./freqresp_app
(2ch 分の周波数応答が出力されるが,一方がゲインがほぼ1, ...
# rmmod _freqresp_module_rt
# ../remod
ERROR: Module rtai_mq does not exist in /proc/modules
ERROR: Module rtai_lxrt does not exist in /proc/modules
ERROR: Module rtai_smp does not exist in /proc/modules
ERROR: Module rtai_mup does not exist in /proc/modules
ERROR: Module rtai_up does not exist in /proc/modules
(insmod していない module を rmmod しようとしてエラーに...
# rmmod rtai_sched
# rmmod rtai_hal
- RTLinux版とRTAI版の比較
&br;
| |RTLinux 版|RTAI版|
|period(実行周期を記録する)|[[period.h>/:RTAI/period.h]]|...
||[[period_module.c>/:RTAI/period_module.c]]|[[period_mod...
||[[period_app.c>/:RTAI/period_app.c]]|[[period_app.c>/:R...
|period_da(DAボードから矩形波を出力する)|period.h(同上)|p...
||[[period_da_module.c>/:RTAI/period_da_module.c]]|[[peri...
||period_app.c(同上)|period_app.c(同上)|
||[[adc.h>/:RTAI/adc.h]]|[[adc.h>/:RTAI/period_da/adc.h]]|
||[[adc.c>/:RTAI/adc.c]]|[[adc.c>/:RTAI/period_da/adc.c]]|
|freqresp(周波数応答実験)|[[freqresp.h>/:RTAI/freqresp.h]...
||[[freqresp_module.c>/:RTAI/freqresp_module.c]]|[[freqre...
||[[freqresp_app.c>/:RTAI/freqresp_app.c]]|[[freqresp_app...
- プログラム作成の参考資料:
-- [[RTAI3.4 User Manual rev 0.3>https://www.rtai.org/ind...
-- [[RTAI API Documentation>https://www.rtai.org/document...
終了行:
[[RTAIの使い方]]
+ サンプルプログラム(showroom)のインストールと実行&br;
本来,CVS を使ってコマンドラインで
# cvs -d:pserver:anonymous@cvs.gna.org:/cvs/rtai co show...
としてインストールするが,proxy サーバ経由では CVS が使え...
そこで,スナップショット http://cvs.gna.org/daily/rtai-sn...
++ /usr/src に rtai-snapshot.tar.gz を展開.
# cd /usr/src
# tar zxvf rtai-snapshot.tar.gz
++ shared memory のサンプルプログラムを編集する(そのまま...
# cd rtai/showroom/v3.x/kern/shm
--- モジュール(カーネル空間のプログラム) shm.c: [[編集前>...
--- アプリケーション(ユーザ空間のプログラム) display.c: [...
++ コンパイル・実行(事前に .cshrc 等で PATH に /usr/realt...
# make
gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/inc...
make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules
make[1]: Entering directory `/usr/src/linux-2.6.20.21'
CC [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm.o
LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: vmlinux - Section mismatch: reference to .init....
(略)
WARNING: "rt_busy_sleep" [/usr/src/rtai/showroom/v3.x/ke...
WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern...
WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/...
CC /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.mo...
LD [M] /usr/src/rtai/showroom/v3.x/kern/shm/shm_rt.ko
make[1]: Leaving directory `/usr/src/linux-2.6.20.21'
undefined! とたくさん出るのは無視
# ../ldmod
# insmod shm_rt.ko
# ./display
(ctrl-C で止める)
数字が変化する様子が表示されればOK.(カーネル空間のモジュ...
# rmmod shm_rt
# ../remod
ERROR: Module rtai_lxrt does not exist in /proc/modules
ERROR: Module rtai_smp does not exist in /proc/modules
ERROR: Module rtai_mup does not exist in /proc/modules
ERROR: Module rtai_up does not exist in /proc/modules
ERROR: Module rtai_hal is in use by rtai_sched
何故かエラー.
# lsmod
Module Size Used by
rtai_sched 80424 0
rtai_hal 32340 1 rtai_sched
(略)
手動で外す:
# rmmod rtai_sched
# rmmod rtai_hal
+ 実験用プログラム period の作成&br;
shm をベースにして,実行周期を記録するプログラム(period*)...
# cd /usr/src/rtai/showroom/v3.x/kern
# cp -a shm period (とりあえずコピーしてから編集する)
# cd period
# mv display.c period_app.c
# mv shm.c period_module.c
Makefile, GNUmakefile 中,shm → period_module,display → ...
period_module.c, period_app.c を適宜編集,ヘッダファイル ...
参考(編集,コンパイル・実行を一通り行った後のディレクトリ...
実行例:
# make
gcc -I. -I/usr/realtime/include -O2 -I/usr/src/linux/inc...
make -C /usr/src/linux CC=gcc SUBDIRS=$PWD V= modules
make[1]: Entering directory `/usr/src/linux-2.6.20.21'
CC [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
/usr/src/rtai/showroom/v3.x/kern/period/period_module.c:...
LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
Building modules, stage 2.
MODPOST 1 modules
WARNING: vmlinux - Section mismatch: reference to .init....
WARNING: vmlinux - Section mismatch: reference to .init....
(略)
[/usr/src/rtai/showroom/v3.x/kern/period/period_module_r...
WARNING: "rt_get_time" [/usr/src/rtai/showroom/v3.x/kern...
WARNING: "nano2count" [/usr/src/rtai/showroom/v3.x/kern/...
CC /usr/src/rtai/showroom/v3.x/kern/period/period...
LD [M] /usr/src/rtai/showroom/v3.x/kern/period/period...
make[1]: Leaving directory `/usr/src/linux-2.6.20.21'
# ../ldmod
# insmod period_module_rt.ko
# ./period_app > foo.dat
# rmmod period_module_rt
# ../remod
# rmmod rtai_sched
# rmmod rtai_hal
[[foo.datをグラフ表示した結果>/:RTAI/period/foo.png]]
時間が経過するに従いジッタが生じている.余分なモジュール...
+ 矩形波を出力するプログラム period_da* (period* に D/A ...
-- モジュールのプログラム period_module.c に D/A 出力を追...
--- D/A 出力を追加するために,adc.c, adc.h を追加する.使...
--- Makefile に,adc.o をリンクするように記述
--- adc.h にはボードの I/O ベースアドレスを記載する.調査...
# lspci -v
(略)
03:01.0 Multimedia controller: Contec Co., Ltd Unknown d...
Subsystem: Contec Co., Ltd Unknown device 8183
Flags: medium devsel, IRQ 10
I/O ports at ece0 [size=32]
03:02.0 Multimedia controller: Contec Co., Ltd Unknown d...
Subsystem: Contec Co., Ltd Unknown device 8153
Flags: medium devsel, IRQ 6
I/O ports at ecc0 [size=32]
id=8183 は D/A12-4(PCI), id=8153 は AD12-16(PCI).&br;
上記の場合,I/Oポートアドレスはそれぞれ 0xece0 と 0xecc0 ...
--- 作業後のディレクトリ: [[/usr/src/rtai/showroom/v3.x/k...
実行方法は上記 period* の場合と同様.&br;
実行時,D/A 変換ボードの出力 0ch をオシロで見ると, 50μse...
+ 周波数応答実験用プログラム freqresp
-- 作業後のディレクトリ: [[/usr/src/rtai/showroom/v3.x/ke...
-- sin 等数学関数を使っていて,libm を static リンクする...
-- 予め,FFTを計算するライブラリ [[librealfft.a>/:RTAI/fr...
-- D/A の 0ch と A/D の 0ch を直結しておく.(ゲイン1,位...
&br;
++ コンパイル
# cd /usr/src/rtai/showroom/v3.x/kern/freqresp
# mkdir data
# make clean
# make
++ 実行
# ../ldmod
# /sbin/insmod freqresp_module_rt.ko
# ./freqresp_app
(2ch 分の周波数応答が出力されるが,一方がゲインがほぼ1, ...
# rmmod _freqresp_module_rt
# ../remod
ERROR: Module rtai_mq does not exist in /proc/modules
ERROR: Module rtai_lxrt does not exist in /proc/modules
ERROR: Module rtai_smp does not exist in /proc/modules
ERROR: Module rtai_mup does not exist in /proc/modules
ERROR: Module rtai_up does not exist in /proc/modules
(insmod していない module を rmmod しようとしてエラーに...
# rmmod rtai_sched
# rmmod rtai_hal
- RTLinux版とRTAI版の比較
&br;
| |RTLinux 版|RTAI版|
|period(実行周期を記録する)|[[period.h>/:RTAI/period.h]]|...
||[[period_module.c>/:RTAI/period_module.c]]|[[period_mod...
||[[period_app.c>/:RTAI/period_app.c]]|[[period_app.c>/:R...
|period_da(DAボードから矩形波を出力する)|period.h(同上)|p...
||[[period_da_module.c>/:RTAI/period_da_module.c]]|[[peri...
||period_app.c(同上)|period_app.c(同上)|
||[[adc.h>/:RTAI/adc.h]]|[[adc.h>/:RTAI/period_da/adc.h]]|
||[[adc.c>/:RTAI/adc.c]]|[[adc.c>/:RTAI/period_da/adc.c]]|
|freqresp(周波数応答実験)|[[freqresp.h>/:RTAI/freqresp.h]...
||[[freqresp_module.c>/:RTAI/freqresp_module.c]]|[[freqre...
||[[freqresp_app.c>/:RTAI/freqresp_app.c]]|[[freqresp_app...
- プログラム作成の参考資料:
-- [[RTAI3.4 User Manual rev 0.3>https://www.rtai.org/ind...
-- [[RTAI API Documentation>https://www.rtai.org/document...
ページ名: