Palm ML for Japanese

Palm ML for Japanese

注意:MLの運営自体は終了しました、現在は、過去ログの公開のみを行っています。

[HOME] [palm-ml一覧] [palm-tech-ml一覧] [pilot-ml一覧] [pilot-tech-ml一覧]

検索式: [検索方法]

表示件数: 表示形式: ソート:

検索対象: palm-ml palm-tech-ml pilot-ml pilot-tech-ml


[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


[PR]WebSylpheed拡張版
[PR]アニメとかゲームとか
[PR]フィギュアの色々
[PR]テレフォンカードの色々
[PR]ペットのこと色々
[PR]ランドセルは天使のはね
[PR]天使のはねランドセルのセイバン

[HOME] [palm-ml一覧] [palm-tech-ml一覧] [pilot-ml一覧] [pilot-tech-ml一覧]