Puis-je effectuer des opérations à virgule flottante dans le gestionnaire d'interruptions? (x86 ou 64) Aussi je voudrais savoir que je peux utiliser la fonction d'impression dans le gestionnaire d'interruption?Question concernant le gestionnaire d'interruption
Répondre
À l'intérieur d'un gestionnaire d'interruptions, n'utilisez rien qui puisse bloquer. Cela signifie ne pas utiliser les fonctions d'impression sauf si elles ne sont pas bloquantes. Idéalement, votre ISR devrait faire le strict minimum nécessaire pour effacer l'interruption et ensuite lancer un thread normal pour faire le reste du traitement. Si vous avez besoin des instructions d'impression pour le débogage, pensez à ce que la partie non-ISR de votre programme déclare un tampon volatile global et demandez à votre ISR d'y écrire les données de débogage. Votre code non-ISR peut vérifier le tampon et printf
les données de celui-ci si nécessaire.
Vous devriez également éviter les opérations à virgule flottante dans un ISR (et dans le code du noyau en général).
si je fais des opérations de virgule flottante cela fonctionne-t-il? – mousey
Oui, les opérations flottantes "fonctionneront", mais en fonction d'un grand nombre de facteurs qui ne rentrent pas dans cette marge, cela pourrait corrompre l'état des opérations en virgule flottante dans les threads sans interruption. Le conseil général est juste ne pas, sauf si vous savez avec certitude que l'état FPU est correctement préservé à travers l'interruption, et même alors, tout simplement pas. – RBerteig
@RBerteig Merci beaucoup – mousey
La plupart des unités à virgule flottante peuvent générer des exceptions divisées par zéro, etc. Si votre code a déclenché l'une de ces exceptions dans un contexte d'interruption, le résultat serait très désordonné. Toujours sur x86, certaines opérations mémoire/chaîne ont des versions MMX qui utilisent l'espace de stockage à virgule flottante comme mémoire temporaire pour effectuer des opérations de lecture/écriture en 64 bits. Selon la configuration du processeur/noyau, vous risquez de mauvaises surprises.
Vous pourriez finir par passer beaucoup de temps à le déboguer, alors mon conseil serait d'essayer d'éviter d'utiliser le point flottant dans le code du noyau si vous le pouvez.
- 1. Question concernant le pays
- 2. Question concernant le profilage python
- 3. Question concernant le modèle d'usine
- 4. Question concernant xsd
- 5. Question concernant "CGImageCreateWithImageInRect"
- 6. Question concernant l'image Ramdisk
- 7. question concernant C++ modèles
- 8. Question concernant PermissionEx (WIX)
- 9. Simple question concernant LINQ
- 10. Question concernant l'avertissement
- 11. question concernant UIDeviceRGB
- 12. Question concernant UIButton
- 13. Une question concernant l'insigne
- 14. question concernant variable globale
- 15. Simple question IRB concernant le compte
- 16. Noob Droid Question concernant le nombre aléatoire
- 17. Question concernant les bibliothèques et le cadre
- 18. Question concernant le code de contrôle ip
- 19. Question concernant le noyau Linux book
- 20. Question concernant la Licence ExtJS
- 21. Question de conception concernant OpenID
- 22. question concernant les séquences postgresql
- 23. Question concernant dealloc et applicationWillTerminate
- 24. Une question concernant l'état maintainance
- 25. Question concernant l'héritage dans wxWidgets
- 26. Question concernant beaucoup de relations
- 27. Question concernant la requête SolrFilter?
- 28. question concernant define_method et method_missing
- 29. Question concernant la vue actuelle
- 30. php question concernant les tableaux
Dernière fois que j'ai vérifié, le point flottant n'était pas autorisé du tout dans l'espace noyau. Je ne suis pas sûr si c'est une règle juste pour l'inclusion dans le noyau officiel, ou si c'est un problème abi pour des modules aussi, par lequel le noyau pourrait ne pas conserver l'état de virgule flottante. Mais c'est probablement une mauvaise idée de l'utiliser dans tous les cas. –
@R: Vous pouvez utiliser le point flottant dans le noyau mais dernièrement j'ai entendu que vous deviez appeler des fonctions pour appeler une fonction avant de le faire afin de sauvegarder les valeurs précédentes pour le thread utilisateur en cours d'exécution. Vous devrez peut-être restaurer aussi. Je ne pense pas que cela puisse être fait à partir des ISR, cependant. – nategoose