2016-09-25 4 views
1

나는 C로 작은 커널을 만들고 있는데, 기다려야하는 초를 포함하는 매개 변수를 취할 함수가 필요하다.내 자신의 수면 또는 지연 함수를 만드는 방법

for 루프를 사용해 보았지만 작동하지 않았습니다.

나는 C 표준 라이브러리를 사용할 수 없으며 커널에 대기 (C로) 할 수있는 방법이 필요하다. 어떻게해야합니까?

루프 : 루프를 사용

int c = 1, d = 1; 

for (c = 1 ; c <= 32767 ; c++) 
    for (d = 1 ; d <= 32767 ; d++){} 
+0

루프를 사용하여 코드를 공유하십시오. 무엇이 효과가 없었습니까? –

+0

for 루프는 작동하지만 너무 빠르기 때문에 아무런 차이가 없습니다. @ AT-2016 –

+0

이것이 도움이되는지 확신 할 수 없습니다. 하지만 정말 재미있을 것 같습니다 - http://wiki.osdev.org/Inline_Assembly –

답변

2

작동하지만, 걸리는 시간은 CPU의 속도 및 컴파일러 최적화에 크게 의존 할 것이다. 타겟 하드웨어를 알고있을 때 (예 : 특정 마이크로 컨트롤러 용 쓰기) 유용합니다.

루프의 본문에 NOP를 포함해야합니다. 또한 컴파일러에서 #pragma 또는 특수 주석을 지원하는지 확인하여 특정 코드 블록에서 최적화를 비활성화하십시오.

NOP 정의에 대해서는 컴파일러 설명서를 확인하십시오. 대부분의 컴파일러는 당신이 사용하여 자신을 정의 할 수 있습니다 _nop() 또는 _nop_()

라는 매크로를 정의 :

#define Nop() {_asm nop _endasm} 

아니면 컴파일러는 인라인 어셈블리를 지원하는 경우 asm("nop")를 작성하여

.

+0

"* specific microcontroller *": 여기에 맞는 유일한 대답. – alk

+1

고마워, 형. 그것은 위대한 작품! –

관련 문제