|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 1 ![]() |
Bonjour,
Question basique pour la plupart d'entre vous mais j'aimerais votre confirmation. J'ai besoin de lire la valeur d'un port et d'ecrire a l'adresse d'un autre sur un microcontroller ARM. Voici mon code : Code :
Pouvez-vous me confirmer que cela est correct? |
||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() |
Salut Daddy,
Tes fonctions sont correctes. A+ |
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Yankel ScialomIngénieur en systèmes embarqués Inscription : juin 2004 Messages : 1 001 ![]() |
Bonjour,
l’absence de l'utilisation du mot clé volatile pourrait te jouer de sales coups, de manière aléatoire. Code C :
Cdlt,
__________________
gasp in touch -- Yankel Scialom |
||
|
|
10
|
|
|
#4 |
|
Membre confirmé
![]() Ingénieur développement matériel électronique Inscription : juillet 2010 Messages : 142 ![]() |
Salut,
Je pense que tu peux aussi déclarer ces méthodes inline. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 717 ![]() |
Je pense qu'on ne met inline à une fonction que si on a montré que cela était nécessaire avec profiler.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
|
10
|
|
|
#6 |
|
Membre régulier
![]() |
@Bktero -> tu peux m'en dire plus sur profiler? Ca semble intéressant comme programme.
Sinon pour rebondir sur le inline, je suis de l'avis de mith06. En effet, ces fonctions comportent très peu d'instructions, donc elles s'exécuteront plus vite en inline (càd que l'appel de la fonction est remplacé par le compilateur par son contenu) que par un appel de fonction "classique", qui va en plus nécessiter une sauvegarde/restauration de la pile et des registres non volatiles, et des instructions de branchement. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 717 ![]() |
Pour ce qui est du profiling (qu'on réalise avec un profiler) : http://en.wikipedia.org/wiki/Profili...er_programming)
Inline est un mot-clé que le compilateur n'est pas obligé de respecté, s'il juge que cela ne sert à rien de la rendre inline. Il est communément admis qu'on me mettra ce qualificatif à une fonction que si on se rend compte que cette fonction occupe un temps important (avec un profiler justement) et qu'on souhaite l'optimiser. On vérifiera que l'effet est vraiment positif. Le résultat pourrait être contre productif ! Voir la FAQ C++ à ce sujet : http://cpp.developpez.com/faq/cpp/?page=inline
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Ingénieur Temps Réel Multitâche Inscription : décembre 2007 Messages : 39 ![]() |
Bonjour. Ton code semble correcte dans la théorie. Dans la pratique il peut y avoir un petit soucis avec le compilateur qui va chercher à optimiser ton code et il ne comprendra pas (bien sur) que tu travaille sur des valeurs qui sont des adresses physiques et non pas de simples valeurs qu'il peut traiter dans des registres internes au processeur. Slt.
|
|
|
00
|
|
|
#9 | ||
|
Membre habitué
![]() Inscription : août 2003 Messages : 127 ![]() |
Si tu programmes en ARM (je suppose que c'est un Cortex-M puisque tu parles de Microcontrôleur), je te conseille vivement d'utiliser les librairies CMIS. Ton code sera plus portable et ce genre d'écriture directe de port n'est plus nécessaire:
Ex code: Code :
__________________
Cortex M0 M3 A8 |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com