2014-05-11 3 views
-2

컴파일러로 winAVR을 사용하여 ATmega8에서 정확한 지연 라이브러리에 대한 코드를 만들고 싶습니다. 아래 코드를 어셈블리로 변환 할 생각이 있습니까? 어셈블리를 이해할 수 없기 때문에 코드를 변환 할 생각이 없습니다.C 코드를 ATmega8의 어셈블리 코드로 변환

이것은 코드입니다.

static __inline__ void __variable_delay_cycles(unsigned long __count) 
{ 
    if (__count>65535) 
    { 
     __count=(__count-13)/6; 
     DelayCyclesUL(__count); 
    } 
    else 
    { 
     if (!__count) 
      return; 
     if (__count<10) 
      __count=1; 
     else 
      __count=(__count-6)/4; 
     DelayCyclesUI(__count); 
    } 
} 

DelayCyclesUI 및 DelayCyclesUL은 어셈블리 코드로 작성됩니다. 감사합니다. .

+0

atmega8 용 어셈블리로 컴파일 해 보았습니까? – EWit

+1

상위 수준 코드를 어셈블리로 변환하는 것은 컴파일러가 정상적으로 수행하는 작업입니다. atmega8 플랫폼 용 C 컴파일러가 필요합니다. –

+1

StackOverflow는 자습서 또는 단계별 가이드를위한 공간이 아닙니다. 앞에서 제안한대로 C 컴파일러를 사용하거나 대상 CPU에 사용할 수있는 설명서를 다운로드하고 직접 번역을 시작하십시오. 명확하지 않은 번역의 특정 부분이있는 경우 _that_에 대한 질문을 할 수 있습니다 (정확히 무엇을하고 무엇이 문제인지 설명하십시오). – Michael

답변

0

코드를 실행 파일로 컴파일하고 avr-studio에서 디버깅하십시오. 어셈블리 뷰로 전환하면 &을 컴파일하여 자신의 asm 파일에 붙여 넣을 수 있습니다. 지연 시간에 따라 하드웨어 타이머 중 하나를 사용하는 것이 좋습니다.

0

컴파일러는 이미 코드를 기계 수준 명령어로 변환합니다. -S compiler option도 생성 된 코드를 어셈블러 형식으로 출력합니다.

그러나 ATmega8에는 코드와는 별도로주기가 정확한 타이밍을 생성 할 수있는 세 가지 하드웨어 타이머가 있으며 다양한 옵션으로 컴파일러 변환의 변동성이 있습니다. 지연을 구현하려면 "명령 루프"가 아닌 하드웨어 타이머를 사용해야합니다.