반응형

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




http://seungwan76.blog.me/140109794967



반응형

+ Recent posts