WinCE라는 넘은 간혹 참 당확 스럽게 하는 경우가 있다.
일반 적으로 Release Mode에서는 해당(내가 작업할려는 Driver혹은 Sources가 있는 어떤 거라도) Optimize 가 Enable이 된다.
그런데 간혹 Driver작업이나 좀더 Critical한 Kernel작업을 하다가 보면 문제를 발생 시키기도 한다.
예를 들어 특정 Chips에서 아래와 같은 작업이 반드시 필요하다고 한다면
A = 0;
A = 1;
A = 0;
WinCE Compiler는 워낙 탁월한(?) 넘이라 "어라 결국 A=0 이내" 하고 위의 두 Code를 날려 버리는 경우가 발생한다.
일반 Code라면 뭐 그렇지만 Chip Register라던가 Peri.의 Reset신호라던가 할경우 위의 3 Code가 모두 필요한 상황인데,
간혼 최종 Code만 남는 경우가 발생하게 된다.
이럴 경우 해당 드라이버의 Optimize 를 Disable 할수도 없고 (물론 CONLY_FLAGS=$(CONLY_FLAGS) /Od 으로 할수도 있지만.
Optimize함으로 써 얻는 이익은 모드 포기 해야한다는, 쩝...)
그럴 경우 해당 루틴이있는 Function에 대해서만 Opimize Disable을 할수있는 방법을 WinCE는 제공한다.(방법 을 제공한다는 것은
결국 저런일이 빈번하게 일어날수 있다는 것을 시인하는 것일까? )
방법 : 아래와 같이 하면 끝
#pragma optimize( "g", off )
void example_function(void)
{
.....
A = 0;
A = 1;
A = 0;
}
#pragma optimize( "g", on)
PS : 해당 Code가 정상적으로 생성되어 컴파일 되어 있는지는 해당 파일을 Assembly 파일로 만들어서 해당 Code를 확인하면 된다.
ms-help://MS.WindowsCE.500/wcepbguide5/html/wce50confilealternatives.htm
sources에 추가 : CONLY_FLAGS=$(CONLY_FLAGS) /FA
[출처] [#pragma] Wince Optimize Level 해제하기 |작성자 물푸레
http://seungwan76.blog.me/140109794967
'프로그래밍(Programming) > c++, 11, 14 , 17, 20' 카테고리의 다른 글
[용어] 하드 코딩 (Hard - coding) (0) | 2016.04.28 |
---|---|
#pragma pack 구조체 패킹 (1) | 2016.03.24 |
지연 호출 (Deferred Call) (0) | 2015.11.25 |
가상함수를 생성자와 소멸자에 넣으면 호출이 안된다?! (0) | 2015.11.13 |
멤버 함수는 인스턴스와 상관없이 동일한 주소를 공유한다 (0) | 2015.11.01 |