[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
メモリースティックへアクセ スするプログラムで Warning
久門です。
誰もフォローしないみたいなので、CLIEのSDKの経験は無いけれど、、
yokoi@sakura.email.ne.jp writes:
> 横井です。
> メモリースティックへアクセスするプログラムをgcc を使って
> 作成しようとしています。
> /PalmDev/sdk/include/ExpansionMgr.h:131: warning: possibly bad __callseq__ `moveq #expCardPresent,%%d2; trap #15; dc.w 0xA347'
> 以下同じwarning がたくさん表示されます。
> これって無視をしてもよいのでしょうか?
これは、Sonyが拡張したシステムコールの記述法が、GCCを使った現在の開発
環境に合わないことから起きています。
よって、単なるユーザプログラムの書き方では救うことができません。
具体的な原因と解決方法を書きます。
どの関数で問題を起こしたのか書かれていなかったので、ExpCardPresent()
を例にして説明します。
ExpCardPresent(UInt16 slotRefNumber)
と言う関数は、gccではマクロ展開の後、次の形の定義になります。
__attribute__ ((__callseq__ ( "moveq #" "expCardPresent" ",%%d2; \
" "trap #" "15" "; dc.w " "0xA347" ))) ;
分かりやすく書き直すと、次の通りです。
__attribute__((
__callseq__("moveq #expCardPresent,%%d2; trap #15; dc.w 0xA347" )
));
問題となるのは、#expCardPresentの部分です。
#の後に文字列が来ています。しかし、expCardPresentはアセンブラ的には定
義されておらず、エラーになっているのです。
#ここまではCLIEのSDKをダウンロードし、GCCて確認してみました。
私はほぼ同様問題を、最近TRGProのCF用のファイルシステム関数で経験しまし
た。
私がTRGProで取った解決方法:
「expCardPresentなどのenum定数を、defineした定数に置き換える」
かなり暴力的な方法ですが、gcc用のPalmの標準定義はすべてこうしているよ
うです。
ExpansionMgr.hの中に、expCardPresentなどのenum定数が定義されている場所
があると思います。そこを次のように書き直します。
#ifndef __GNUC__
typedef enum {
expInit = 0,
expSlotDriverInstall,
expSlotDriverRemove,
expSlotLibFind,
expSlotRegister,
expSlotUnregister,
expCardInserted,
expCardRemoved,
expCardPresent,
expCardInfo,
expSlotEnumerate,
expMaxSelector = expSlotEnumerate,
expBigSelector = 0x7FFF // Force ExpansionMgrSelector to be 16 bits.
} ExpansionMgrSelector;
#else
#define expInit 0
#define expSlotDriverInstall 1
#define expSlotDriverRemove 2
#define expSlotLibFind 3
#define expSlotRegister 4
#define expSlotUnregister 5
#define expCardInserted 6
#define expCardRemoved 7
#define expCardPresent 8
#define expCardInfo 9
#define expSlotEnumerate 10
#define expMaxSelector expSlotEnumerate
#define expBigSelector 0x7FFF
#endif
gcc以外使わないなら、#ifdefにしなくても良いでしょう。
ざっと見たところ、enum ExpansionMgrSelector と言う型は使用されて
いないようなので、これで、大丈夫だと思います。
ただし、わたしはsonyのSDKでは全くプログラムを組んだことがありません。
動かなかったら、ごめんなさい。
--
久門耕一@コンピュータシステム研究所
kumon@flab.fujitsu.co.jp
ダイヤルイン 044-754-2665
FAX 044-754-2664
代表 044-777-1111 ex 2-6392