Rhapsody 中不兼容的 OSAL 接口

Incompatible OSAL interfaces in Rhapsody

我正在尝试为 FreeRTOS 创建 OSAL(操作系统抽象层)适配器,但与提供的接口混淆。

例如RiCOSTask的init函数在文档中定义如下:

RiCBoolean RiCOSTask_init (RiCOSTask *const me,
    RiCOSTaskEndCallBack tfunc, void *param,
    const char *name, const long stackSize);

https://www.ibm.com/support/knowledgecenter/SSB2MU_8.1.3/com.ibm.rhp.reference.doc/topics/rhp_r_fw_init_ricostask.html

但是 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。

另一个问题是,我的测试 class 的初始化函数调用 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);
    .......
}

但是如果我设置 class 的 属性,例如。 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)

文档是为 OXF 编写的,而不是为 SMXF 框架编写的。据我所知,没有关于调整 SMXF 的真实文档,但是……SMXF 作为模型存在(检查您的 /LangC/smxf 目录) 这应该可以更容易地创建适配器。 您真的需要 SMXF 还是 OXF 就足够了(甚至是 RXF 之类的其他框架?

沃尔特