이 주제에서 설명하는 문제는 이전 버전의 IBM® Rational® Rhapsody®에서
작성된 프로젝트를 열 때 발생하는 문제일 수 있습니다.
코드 생성
- C, C++
- 이전 버전의 Rational Rhapsody에서는
생성된 코드의 함수 선언 뒤에 글로벌 변수 선언이 나타났습니다.
이제 글로벌 변수 선언이 함수 선언 앞에 나타납니다.
- Embeddable 특성이 이제 코드 생성에
영향을 줍니다. 이전에는 관련 코드가 구현 파일에 생성될
예정이었더라도 스펙 파일에 생성되었습니다.
- 경우에 따라 코드 변경사항을 라운드트립한 후, 생성된
코드에서 전방 선언의 위치가 이전 버전의 Rational Rhapsody에서
생성된 코드와 다를 수 있습니다.
- C
- 생성된 코드에서 이전에 초기화되지 않은 변수의 인스턴스가 초기화됨을
확인할 수 있습니다.
- 애니메이션
- 현재 버전의 Rational Rhapsody에서
애니메이션 코드를 생성할 경우, 보통 애니메이션 코드를 둘러싸고 있는
_OMINSTRUMENT ifdef가 이전에 없었던 여러 위치에 나타납니다.
- 애니메이션 코드로 생성된 OMADD_OMSER 함수의 경우
애니메이션 시퀀스 다이어그램을 보다 읽기 쉽도록 하기 위해 이제
이전 버전의 Rational Rhapsody에서
생성된 단일 인수 이외에 또 다른 인수를 사용합니다.
- 코드 중심
- CodeCentric 설정을 사용하는 경우 이제 리버스 엔지니어링 중에
지정한 포함 경로가 이제 make 파일에도 추가됩니다.
- SDL_Suite 프로파일
- 프로젝트에 SDL_Suite 프로파일을 사용하는 경우, 이 프로파일에 대해
이전에 생성된 코드와 비교하여 Rational Rhapsody에서
생성된 코드가 변경되었음을 확인할 수 있습니다.
- MicroC 프로파일
- MicroC 프로파일을 사용하는 경우, RiCTaskEM_init
함수에 이제 뮤텍스에 대한 포인터를 제공하는 데 사용되는 추가 매개변수가
포함됩니다.
프레임워크
Microsoft 환경의 경우
RiCOSNT.h 및 RiCOSNT.c에서
RiCOSMutex 구현이 이제 CriticalSection 사용을 기반으로
합니다. C++의 경우 이미 이와 같이 구현되었습니다.
Ada의 경우에는 여전히 이전 메커니즘을 사용합니다.
C++ OXF에서는
MISRA 호환성을 높이기 위해 OMReactive.cpp의 여러
상수 선언이 수정되었습니다.
대상 모니터링 기능 향상의 일환으로
C OXF가 다음과 같이 변경되었습니다.
- RiCOxf.c 파일에서 애니메이션 연결이 종료된
경우에 애플리케이션을 종료할지 여부를 나타내는 부울 플래그가 init
함수에 추가되었습니다. 사용자 코드로 호출된 함수 RiCOXFInit에
대해서는 변경사항이 없습니다.
- RiCOxf.c 파일에서 RiCOXFInit_NoExitOnDisconnect라는
새 함수가 추가되었습니다.
MXF에서 다음과 같은 유형 정의가
RiCTypes.h에 추가되었습니다.
- typedef
signed char RiC_CHAR8; /* character ASCII128 */
- typedef
unsigned long int RiCUnLgInt;
- typedef const
void* RiCVtbl;
이 버전의 Rational Rhapsody에서는
이벤트를 표시하기 위해 코드가 생성되는 방식 및 RiCEvent가
MXF에서 변경되었습니다. 이러한 변경은 MISRA 호환성을
높이기 위한 것입니다.
- 이전에는 RiCEvent 구조체가 포함된 구조체 및 개별
이벤트 인수를 나타내는 개별 멤버로 이벤트가 표시되었습니다. 이제
이벤트는 RiCEvent 구조체로 표시되며, 이벤트 인수를
포함하는 구조체에 대한 포인터를 포함합니다.
- RiCTimeout 및 제한시간을 나타내기 위해 생성된 코드가
유사하게 변경되었습니다. 이전에는 RiCTimeout에
RiCEvent 구조체와 제한시간 관련 데이터가 포함되어
있었습니다. 이제 제한시간은 RiCEvent 구조체로 표시됩니다.
이 경우 이벤트 데이터에 대한 포인터는 제한시간 관련 데이터가 저장되어 있는
RiCTimeout 구조체를 가리킵니다.
RiCEvent
관련 변경사항과 관련하여 생성된 코드에서 이벤트에 대한 메모리 관리가
변경되었습니다. 이전 버전에서처럼 RiCMemoryManager를 사용하는 대신
풀에서 각 RiCEvent에 메모리가 할당됩니다. 이때 풀의 크기는
C_CG::Configuration::FrameworkEventsPoolSize 특성 값에 따라 결정됩니다.
이벤트에 인수가 있는 경우 풀에서 메모리가 할당됩니다. 이때 풀의 크기는
CPP_CG::Event::BaseNumberOfInstances 특성 값에 따라
결정됩니다.
OSEK 어댑터 개선사항 - OSEK 애플리케이션에서
RES_SCHEDULER를 단일 뮤텍스로 사용하는 대신, 모델 및 MXF에 정의된
OSEK 태스크 각각에 대해 전용 뮤텍스가 사용됩니다.
MXF Mainloop
어댑터 파일이 이전에는 $OMROOT\LangC\mxf\Adaptors\MainLoop\S12\Freescale에
있었지만, 이제는 $OMROOT\LangC\mxf\Adaptors\MainLoop\Freescale\S12에
있습니다.
여러 프레임워크에서 typedef
const char* Rhp_const_char_pt라는 새 유형이 추가되었습니다.
이 새 유형은 프레임워크에서 자주 사용됩니다.
버전 7.5에서
도입되었던 OXF 타이머의 멀티미디어 타이머 기반 구현이 이제 기본적으로
사용됩니다. 이 타이머 구현을 사용하지 않으려면 해당 매크로 정의를
주석 처리하십시오.
- C++의 경우, ..\Share\LangCpp\osconfig\WIN32\omosconfig.h에서
#define OM_USE_MULTIMEDIA_TIMER를 주석 처리하십시오.
- C의 경우, ..\Share\LangC\osconfig\WIN32\ricosconfig.h에서
#define RIC_USE_MULTIMEDIA_TIMER를 주석 처리하십시오.
C++용 OXF에서 일부 ID 이름이 MISRA 호환성을 위해 필요한 31자
제한을 충족하기 위해 잘렸습니다.
특정 버그 수정 및 개선사항을
구현하기 위해 다음과 같은 프레임워크 메소드가 변경되었습니다.
- C
- RiCOSMessageQueue_get
- RiCDefaultReactiveOutbound_gen
- C++
- ~LinuxThread(소멸자)
- getThreadEndClbk
- NTOSMessageQueue::get(ntos.cpp에 있음)
- OMOS::endApplication(VxOS.cpp 및 linuxos.cpp에 있음)
- OMThread::execute
- OXF::end
- AOM 라이브러리
- MXF에서 변경된 RiCEvent의 구조 및 이벤트에 대한
메모리 할당을 처리하기 위해 AOM이 다음과 같이 변경되었습니다. 모든 변경사항은
컴파일 플래그 #ifdef MICROC_OXF로 구별됩니다.
- RICE, OM_INSTRUMENT_EVENT,
OM_INSTRUMENT_EVENT_INSTANCE, NOTIFY_TAKE_EVENT 매크로가 변경되었습니다.
- 이벤트의 RiCEvent 멤버에 대한 참조 제거 등
약간의 코드 변경사항이 있습니다.
- TOM 라이브러리
- tomTrimCarriageReturn() 메소드가
toxf.cpp에 추가되었습니다.
- 특정 개선사항을 구현하기 위해 TOMInstance::notifyFlowDataReceive
메소드가 변경되었습니다.
MXF 어댑터
MXF 어댑터(RiCOSOsek, RiCOSMainloop 및
RiCOSAutosarRte)에 대한 API에 여러 메소드가 추가되었습니다.
빌드된 기존 어댑터가 있는 경우 컴파일 문제점을 방지하기 위해
이 새 메소드도 구현해야 합니다.
새 메소드는 다음과 같은 카테고리에 속합니다.
- AUTOSAR 호환성을 높이기 위해, 일반적인 RiCOSMutex_lock/free 메소드가 아닌 타이머 관리자가 사용하는 뮤텍스를
잠그거나 해제하는 데 사용되는 메소드가 추가되었습니다.
- RhpBoolean RiCOSTimerManagerMutex_lock(const
RiCOSMutex
*me)
- RhpBoolean RiCOSTimerManagerMutex_free(const
RiCOSMutex
*me)
- 정적 이벤트 풀 액세스와 관련하여 상호 배제를 보장하는 데 사용되는
뮤텍스를 잠그거나 해제하기 위한 여러 메소드가 추가되었습니다. 이러한 메소드는
MISRA 호환성을 높이기 위해 도입된 이벤트 관련 변경사항의 일부로 추가되었습니다.
- RhpVoid
RiCOSEventsPoolMutex_init(RhpVoid)
- RhpVoid
RiCOSEventsPoolMutex_lock(RhpVoid)
- RhpVoid
RiCOSEventsPoolMutex_free(RhpVoid)
XMI
XMI 데이터를 Rational Rhapsody로
가져오거나 모델을 XMI로 내보내는 경우, 이제 외부 콘솔 창 대신
Rational Rhapsody
출력 창에 경고와 오류가 표시됩니다.