FreeRTOS用のOSAL(Operating System Abstraction Layer)アダプタを作成しようとしていますが、提供されているインターフェイスと混同しています。Rhapsodyの互換性のないOSALインターフェイス
例えば、RiCOSTaskの初期化機能は、ドキュメントに次のように定義されています
RiCBoolean RiCOSTask_init (RiCOSTask *const me,
RiCOSTaskEndCallBack tfunc, void *param,
const char *name, const long stackSize);
しかしRiCTaskEMは以下のようにこの関数を呼び出します。
RiCBoolean RiCTaskEM_init(RiCBoolean wrapTask,RiCThread * const
itsThread,RiCBoolean isThread,const RiCOSTaskEntryCallBack cbkFunc,const
RhpAddress cbkParam,RhpPositive initStaticPeriod)
{
..........
(RhpVoid) RiCOSTask_init(&(itsThread->osTask), cbkFunc, cbkParam, initStaticPeriod);
...........
}
私は何かがあると思います私の設定に間違いがあります。私はRhapsody 8.1.3でSMXFを使用しています。
もう一つの問題は、ある私のテストクラスの初期化機能は、以下のようなRiCTaskEM_initメソッドを呼び出します:
void smxfTestClass_Init(smxfTestClass* const me, RiCTaskEM * p_task) {
RiCTaskEM_init(&(me->ric_task), RiCFALSE, &(me->ric_thread), RiCTRUE,
(RiCOSTaskEntryCallBack)smxfTestClass_doExecute, me, 0U);
.......
}
をしかし、私は私のクラスのプロパティを設定した場合、例えば。 ActiveThreadName、RiCTaskEM_Init関数の呼び出しは次のように変更されます。
void smxfTestClass_Init(smxfTestClass* const me, RiCTaskEM * p_task) {
RiCTaskEM_Init(&(me->ric_task), "Test", RiCOSDefaultThreadPriority,
RiCOSDefaultStackSize, RiCOSDefaultMessageQueueSize, RiCFALSE, NULL);
......
}
そしてRiCTaskEM_Initのプロトタイプは、上記の呼び出しと互換性がないため、コンパイルが失敗します。このように定義されています
RiCBoolean RiCTaskEM_init(RiCBoolean wrapTask,RiCThread * const
itsThread,RiCBoolean isThread,const RiCOSTaskEntryCallBack cbkFunc,const
RhpAddress cbkParam,RhpPositive initStaticPeriod)
- 何が起こっていますか?私はRhapsodyのバージョンと使用しているSMXFのモデルが一致していませんか?
- 私のクラスのプロパティを設定すると、なぜRiCTaskEM_initメソッドが呼び出されるのですか? 2番目のバージョンは正しいと思われますが、RiCTaskEM_initメソッドはそれと互換性がありません。
- どういうわけかRiCTaskEMの機能を変更する必要がありますか?私はそれがフレームワークに属するので、アダプターとOSALアダプターガイドには何も言及していないわけではないと思います。しかし、現在の実装は単に適合しません。
こんにちはウォルター、あなたは正しいでしょう。それは、それは別の枠組みに属していることに気づくのに時間がかかりました。我々 QNXアダプタを模倣して成功裏に実装しました。 –