我正在尝试为 FreeRTOS 创建 OSAL(操作系统抽象层)适配器,但与提供的接口混淆。
例如,RiCOSTask 的 init 函数在文档中定义如下:
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)
- 怎么了 ?我使用的 Rhapsody 版本和 SMXF 模型是否不匹配?
- 如果我设置我的类的属性,为什么以不同的方式调用 RiCTaskEM_init 方法?第二个版本似乎是正确的,但提供的 RiCTaskEM_init 方法与它不兼容。
- 我是否必须以某种方式修改 RiCTaskEM 的功能?我猜不,因为它属于框架,而不是适配器和 OSAL 适配器指南没有提到任何关于它的内容。但是当前的实现根本不适合。