FreeRTOS 용 OSAL (Operating System Abstraction Layer) 어댑터를 만들려고했지만 제공된 인터페이스와 혼동했습니다. 예를 들어랩소디에서 호환되지 않는 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);
...........
}
내가 뭔가 것 같다 내 구성에 문제가있다. 나는 랩소디 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)
- ? 랩소디 버전과 사용중인 SMXF 모델이 일치하지 않습니까?
- 내 클래스의 속성을 설정하면 왜 RiCTaskEM_init 메서드가 다른 방식으로 호출됩니까? 두 번째 버전은 올바른 것으로 보이지만 RiCTaskEM_init 메서드가 호환되지 않는 경우 제공됩니다.
- 어떻게 든 RiCTaskEM의 기능을 수정해야합니까? 그것은 프레임 워크에 속해 있기 때문에 아니오, 어댑터 및 OSAL 어댑터 가이드 그것에 대해 아무것도 언급하지 않는 것 같아요. 그러나 현재의 구현은 단순히 적합하지 않습니다.
안녕 월터, 당신 말이 맞아 것입니다. 그것은 다른 프레임 워크에 속한다는 것을주의하는 시간이 걸렸습니다. 우리 QNX 어댑터를 모방하여 성공적으로 구현했습니다. –