デジタルI/Oの使い方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あすぱら
記事: 12
登録日時: 10年前

デジタルI/Oの使い方について

#1

投稿記事 by あすぱら » 10年前

あすぱらと申します。
現在「ARBOR製 EmCORE-i2501」のデジタルI/Oを使用しいと考えております。
具体的には、Inputに信号が入ってきたら文字を表示させたいと思っています。

マニュアルをダウンロードしC言語でのサンプルコードを見てみましたが、何をしているのか今一ピント来ません。
丸々コピペしたところエラーが出てしまいました。以下に環境とコードの一部、エラー内容を記載します。、コンパイルしたところ以下のようなエラーが出てしまいました。

環境
Ubuntu12.04 GCCコンパイラ

コード:

#include “math.h”
#include “stdio.h”
#include “dos.h”

#define SIO_ID 0x1010
#define SIO_INDEX 0x4E
#define SIO_DATA 0x4F
#define SIO_EN 0x87
#define SIO_DN 0xAA
#define LDN_ADDR 0x07
bool __fastcall TForm1::Check_ID(void)
{
DWORD iData;
SetPortVal(SIO_INDEX,SIO_EN,1); // SIO - Enable
SetPortVal(SIO_INDEX,SIO_EN,1);
SetPortVal(SIO_INDEX,SIO_EN,1);
SetPortVal(SIO_INDEX,0x01,1);
SetPortVal(SIO_INDEX,0x55,1);
SetPortVal(SIO_INDEX,0x55,1);
SetPortVal(SIO_INDEX,LDN_ADDR,1); // LDN - Configure Control
SetPortVal(SIO_DATA,0x04,1);
SetPortVal(SIO_INDEX,0x20,1); // ID Address
GetPortVal(SIO_DATA,&iData,1);
iID = iData;
SetPortVal(SIO_INDEX,0x21,1);
GetPortVal(SIO_DATA,&iData,1);
iID = ( iID << 8 ) + iData;
Label18->Caption = “ID : “ + IntToHex((int)iID,3);
SetPortVal(SIO_INDEX,SIO_DN,1); // SIO - Disable
if( iID == SIO_ID ) return true;
return false;
}
//---------------------------------------------------------------------------
unsigned char __fastcall TForm1::GPIO_Set(unsigned oMode,unsigned char oData)
{
DWORD iData;
// SIO - Enable
SetPortVal(SIO_INDEX,SIO_EN,1);
SetPortVal(SIO_INDEX,SIO_EN,1);
// LDN - GPIO
SetPortVal(SIO_INDEX,LDN_ADDR,1);
SetPortVal(SIO_DATA,0x06,1);
// GPIO5 - Mode
SetPortVal(SIO_INDEX,0xA0,1);
SetPortVal(SIO_DATA,oMode,1);
// GPIO5 - Data
SetPortVal(SIO_INDEX,0xA1,1);
SetPortVal(SIO_DATA,oData,1);
// GPIO5 - Status
SetPortVal(SIO_INDEX,0xA2,1);
GetPortVal(SIO_DATA,&iData,1);
// SIO - Disable
SetPortVal(SIO_INDEX,SIO_DN,1);
return iData;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::DIO_Test(int iPIN)
{
int i = iPIN;
bool bTest = true;
unsigned char InData;
unsigned char oMode[8] = {0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0};
unsigned char oDataL[8] = {0xF7,0xFD,0xFE,0xFB,0xEF,0xDF,0xBF,0x7F};
unsigned char oDataH[8] = {0xF8,0xF2,0xF1,0xF4,0x1F,0x2F,0x4F,0x8F};
unsigned char iData[8] = {0x10,0x20,0x40,0x80,0x08,0x02,0x01,0x04};
InData = GPIO_Set(oMode[i],oDataL[i]) & iData[i]; // Low Test
if( !(InData == 0x00) ) bTest = false;
InData = GPIO_Set(oMode[i],oDataH[i]) & iData[i]; // Hi Test
if( !InData ) bTest = false;
return bTest;
}
//---------------------------------------------------------------------------
エラー文(一部記載)
エラー: ‘DWORD’ was not declared in this scope
エラー: expected ‘;’ before ‘iData’
エラー: ‘SetPortVal’ was not declared in this scope

変数が宣言されていないというエラーだと思うのですが、どのような形で宣言すればいいのかわかりません。
サポートに連絡したところ、技術的な問合せは受けられないという事で困っている状況です。
マニュアルを添付しておきます。何かアドバイス等あればよろしく御教示お願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デジタルI/Oの使い方について

#2

投稿記事 by softya(ソフト屋) » 10年前

すぐに分かることはC言語ではなくC++の様です。C++の文法が使われています。
詳しくないですが開発環境がC++Builder 系の感じがします。
GPIO関係のヘッダとか無いのもありえないですね。
これだけの情報で使いこなすのは、ほぼ無理です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: デジタルI/Oの使い方について

#3

投稿記事 by h2so5 » 10年前

マニュアルを無断でアップロードしちゃダメですよ。ログインしないと見れないようですし。
All rights are reserved. No part of this manual may be reproduced by any
mechanical, electronic, or other means in any form without prior written
permission of the manufacturer.

あすぱら
記事: 12
登録日時: 10年前

Re: デジタルI/Oの使い方について

#4

投稿記事 by あすぱら » 10年前

>>softya

返信ありがとうございます。やはりこれだけの情報では難しいですか。

>>h2so5
申し訳ございません。すぐにマニュアルを削除します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デジタルI/Oの使い方について

#5

投稿記事 by softya(ソフト屋) » 10年前

情報が断片すぎるのとサンプルプロジェクトがない状況だとLinuxドライバが書けるぐらい実力があって時間が取れれば実物が目の前にありさえすれば何とかなるでしょうが、現状のサンプルでSetPortVal()やらGPIO_Set()とか何かライブラリを呼び出してますが、これ何?って状況だと思います。
LinuxやWindowsの標準的なAPIやライブラリにはありませんので、付属しているマニュアルやCD-ROMなどを確認して下さい。

ただ、C言語だと言いながらC++で書かれている時点でマニュアルの信憑性がありませんよね。サポートにも期待できないとすると現状難しいとしか言えません。
何とか出来る実力のある人が周りにいませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: デジタルI/Oの使い方について

#6

投稿記事 by h2so5 » 10年前

SetPortValはWinIoというライブラリの関数のようです。
http://www.internals.com/
http://matrix207.github.io/2012/09/16/winio-sample/

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デジタルI/Oの使い方について

#7

投稿記事 by softya(ソフト屋) » 10年前

h2so5 さんが書きました:SetPortValはWinIoというライブラリの関数のようです。
http://www.internals.com/
http://matrix207.github.io/2012/09/16/winio-sample/
それだとWindows用ですので、これを使えということは、そのボードコンピュータはOSとしてWindows Embedded推奨って事ですかね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あすぱら
記事: 12
登録日時: 10年前

Re: デジタルI/Oの使い方について

#8

投稿記事 by あすぱら » 10年前

>>h2so5

返信ありがとうございます。使っているライブラリが分かっただけでもありがたいです。

>> softya(ソフト屋)

返信ありがとうございます。確かにubuntuでI/Oを動かすのは難しいのかも知れません。


今日1日私自身調べてみますので、何かあればよろしくお願い致します。

あすぱら
記事: 12
登録日時: 10年前

Re: デジタルI/Oの使い方について

#9

投稿記事 by あすぱら » 10年前

色々調べて見まして、仮想ファイルシステムを読み書きしてGPIOを制御するという方法を見つけました。
以下のサイトを参考にしています。

https://tool-lab.com/2013/12/raspi-gpio ... command-1/
このサイトではRaspberry Piを元に説明していました。

試しに私のボードの環境で「/sys/class/gpio」に移動してみると以下のファイルがありました。

-rwxrwxrwx 1 root root 4096 10月 29 11:42 export
-rwxrwxrwx 1 root root 4096 10月 29 08:36 unexport

これに対して仮想ファイルを作成をする為に、「sudo echo 9 > /sys/class/gpio/export」とコマンドを打ち込んだ所、無効な引数と表示されエラーとなりました。

上記を踏まえると、やはり専用のドライバー等が必要となるのでしょうか?
付属のCDを見たところ、Windows用のオーディオ、ビデオ、イーサのドライバしか見つかりませんでした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デジタルI/Oの使い方について

#10

投稿記事 by softya(ソフト屋) » 10年前

ラズベリーパイは専用のLinuxですので、仮想ファイルシステムとしてIOを実装しているんでしょう。

どうしても必要なら、こういう講座を受けられればよいのでは?
「組み込み Linux - デバイスドライバ開発講座 評価ボードへ組み込む実習」
http://www.lineo.co.jp/modules/products ... vice1.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あすぱら
記事: 12
登録日時: 10年前

Re: デジタルI/Oの使い方について

#11

投稿記事 by あすぱら » 10年前

>>softya

アドバイスありがとうございます。やはりこのボードでGPIOを使うには、私の技術力がまだまだ足りそうにありません。

他の方法を探してみますので、この件に関しては解決済みとさせて頂きます。皆さんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る