我试图为FreeRTOS创建OSAL(操作系统抽象层)适配器,但与提供的接口混淆。
例如,RiCOSTask的init函数在docs中定义如下:
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);
...........
}
我猜我的配置有问题。我使用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)
答案 0 :(得分:0)
该文档是为OXF编写的,而不是为SMXF Framework编写的。据我所知,没有适合SMXF的真实文档,但SMXF作为模型存在(检查你的/ LangC / smxf目录) 这应该可以更容易地创建适配器。 你真的需要SMXF还是OXF就足够了(甚至是像RXF这样的其他框架?
沃尔特