Rhapsody中不兼容的OSAL接口

时间:2017-03-25 20:20:33

标签: freertos rhapsody

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

例如,RiCOSTask的init函数在docs中定义如下:

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);

        ...........
}

我猜我的配置有问题。我使用SMXF和Rhapsody 8.1.3。

另一个问题是,我的测试类的init函数调用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方法?第二个版本似乎是正确的,但提供RiCTaskEM_init方法与此不兼容。
  • 我是否必须以某种方式修改RiCTaskEM的功能?我猜不是因为它属于框架,而不是适配器和OSAL适配器指南并没有提及它的任何内容。但目前的实施情况根本不合适。

1 个答案:

答案 0 :(得分:0)

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

沃尔特