2016-09-25 3 views
1

Я создаю небольшое ядро ​​в C, и мне нужна функция, которая будет принимать параметр, содержащий количество секунд, которое он должен ждать.Как создать собственную функцию сна или задержки в c

Я пробовал использовать для циклов, но они не сработали.

Я не могу использовать стандартную библиотеку C и мне нужен способ сказать ядру ждать (в C). Как я могу это сделать?

Loop:

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

Использование цикла работы, но время, необходимое будет в значительной степени зависит от скорости вашего процессора и любой компилятор оптимизаций. Это полезно, когда вы знаете целевое оборудование (например, для написания конкретного микроконтроллера).

Вы должны включить NOP в тело цикла. Также проверьте, поддерживает ли ваш компилятор #pragma или специальный комментарий, чтобы отключить оптимизацию для определенных блоков кода.

Проверьте документацию вашего компилятора для определения NOP. Большинство компиляторов определяют макрос с именем _nop() или _nop_()

Вы можете определить свой собственный, используя:

#define Nop() {_asm nop _endasm} 

Или написав asm("nop"), если ваш компилятор поддерживает ассемблерные.

+0

«Конкретный микроконтроллер *»: единственный ответ, который имеет смысл здесь. – alk

+1

Спасибо, брат. Он отлично работает! –

Смежные вопросы