2016-09-25 2 views
1

Je crée un petit noyau en C et je besoin d'une fonction qui prendra un paramètre contenant la quantité de secondes doit attendre.Comment créer mon propre sommeil ou la fonction de retard dans c

J'ai essayé d'utiliser des boucles, mais ils ont pas travaillé.

Je ne peux pas utiliser la bibliothèque standard C et ont besoin d'un moyen de dire le noyau d'attente (en C). Comment puis-je faire ceci?

Loop:

int c = 1, d = 1; 

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

Partagez le code en utilisant la boucle. Qu'est-ce qui n'a pas fonctionné? –

+0

La boucle for fonctionne, mais c'est trop rapide pour faire la différence. @ AT-2016 –

+0

Je ne suis pas sûr si cela vous aide. Mais il semble vraiment intéressant - http://wiki.osdev.org/Inline_Assembly –

Répondre

2

En utilisant une boucle fonctionne, mais le temps qu'il faut dépendra fortement de la vitesse de votre CPU et du compilateur tout Optimisations. C'est utile lorsque vous connaissez le matériel cible (par exemple, écrire pour un microcontrôleur spécifique).

Vous devez inclure un NOP dans le corps de la boucle. Vérifiez également si votre compilateur supporte un #pragma ou un commentaire spécial pour désactiver les optimisations sur des blocs de code spécifiques.

Vérifiez la documentation de votre compilateur pour une définition de NOP. La plupart des compilateurs définissent une macro appelée _nop() ou _nop_()

Vous pouvez définir votre propre en utilisant:

#define Nop() {_asm nop _endasm} 

ou en écrivant asm("nop") si votre compilateur prend en charge l'assembleur en ligne.

+0

"* microcontrôleur spécifique *": La seule réponse qui a du sens ici. – alk

+1

Merci, frère. Cela fonctionne très bien! –