Keil µvision - difficultés... - Electronique, domotique, DIY
Marsh Posté le 30-04-2021 à 11:42:38
_pollux_ a écrit :
|
L'utilisation des opérateurs arithmétiques et binaires provoque des conversions implicites.
https://stackoverflow.com/questions [...] d-int-char
_pollux_ a écrit :
|
Vu que tu fais une boucle while(1){}, sans aucune possibilité de sortie, ce que tu mets après ne sera logiquement jamais exécuté ...
_pollux_ a écrit :
|
Soit cette variable est utilisée dans d'autres fichiers et il faut la déclarer dans le header.
Soit elle n'est utilisée que localement et il faut la déclarer static.
_pollux_ a écrit :
<< là, il m'indique qu'il ne connait pas uint32_t |
Ils ont oublié #include <stdint.h> dans system_stm32f10x.h.
Pour le reste, tu n'as que deux solutions:
Contacter le support Keil.
Passer du côté obscur et utiliser directement gcc. Faut mettre les mains dans le cambouis, c'est impressionnant au début, mais si tu t'accroches, tu iras plus vite et plus loin que ce que tu pensais possible ...
Marsh Posté le 30-04-2021 à 15:14:55
Disons que tous ces warning n'apparaissaient pas il y a 2, 3 ans quand j'avais suivi pour la première fois ce cours le compilo a pu devenir plus intransigeant...
D'autant que le pire, c'est qu'à terme, je souhaite passer sur l'IDE de STM (STMideCube), mais je voulais revoir un peu le fond de la programmation µC (STMIDE a tendance à tout prémacher graphiquement... déclaration des interruptions, réglage des timers, etc ...).
Si je passe sous GCC, outre le fait de démarrer de 0...( ça va me prendre des plombes, je suis pas une star du C ), ça va être difficile de suivre le cours qui présente les différents outils de debug de Keil µVision, etc ...
Sachant que le pire, c'est le dernier point... le reste ce ne sont que des warning, mais l'impossibilité de mettre les breakpoints où je veux dans un programme ultra basique qui compile sans erreur ...
Marsh Posté le 30-04-2021 à 16:42:54
_pollux_ a écrit : Disons que tous ces warning n'apparaissaient pas il y a 2, 3 ans quand j'avais suivi pour la première fois ce cours le compilo a pu devenir plus intransigeant... |
Oui, généralement c'est dans cette direction (de plus en plus strict) que vont les compilos.
Citation : Si je passe sous GCC, outre le fait de démarrer de 0...( ça va me prendre des plombes, je suis pas une star du C ), ça va être difficile de suivre le cours qui présente les différents outils de debug de Keil µVision, etc ...:D |
Deux choses:
Si tu as des lacunes importantes en C je conseille de reprendre les bases sur PC car c'est beaucoup plus comfortable (rien que printf et Co...).
Sinon le C c'est le C et les bibliothèques standard ne changent pas, peu importe le compilateur, par contre effectivement tout ce qui est spécifique à la biblio STM32 de chez Keil ne sera plus du tout valable en utilisant GCC et ses biblio à lui. (J'espère que c'est compréhensible , j'ai toujours utilisé GCC et je ne connais pas les STM...)
Pour ton histoire de breakpoint: Vu que ta variable est utilisée nulle part le compilateur l'aura simplement viré dans le cadre de ses optimisations. Donc soit tu désactives ces dernières (sous GCC: -O0), soit tu utilises ta variable genre en l'écrivant sur un port en sortie soit tu rajoutes "volatile" comme HB.
edit: Pas vu que c'était une variable GLOBALE: Dans ce cas tu peux virer le static, car ainsi la variable pourrait être utilisée dans d'autres modules -> impossible de la virer. Par contre j'espère que tu connais la différence entre var globale et locale, c'est indispensable.
Marsh Posté le 30-04-2021 à 17:20:40
c'est pas les bases du C que je veux découvrir, ce sont les bases de la programmation µC
en particulier sur cette page : https://openclassrooms.com/fr/cours [...] mmable-arm
Je ne peux pas tester ce qui est fait parce que je ne peux pas poser de breakpoint...
Marsh Posté le 30-04-2021 à 17:24:23
rat de combat a écrit : a écrit : Pour ton histoire de breakpoint: Vu que ta variable est utilisée nulle part le compilateur l'aura simplement viré dans le cadre de ses optimisations. Donc soit tu désactives ces dernières (sous GCC: -O0), soit tu utilises ta variable genre en l'écrivant sur un port en sortie soit tu rajoutes "volatile" comme HB. edit: Pas vu que c'était une variable GLOBALE: Dans ce cas tu peux virer le static, car ainsi la variable pourrait être utilisée dans d'autres modules -> impossible de la virer. Par contre j'espère que tu connais la différence entre var globale et locale, c'est indispensable. |
J'avais mal lu cette partie. Je vais voir de ce côté, c'est une bonne idée.
Marsh Posté le 30-04-2021 à 17:26:05
Et je confirme que ça marche !
edit : en virant une optimisation.
Marsh Posté le 30-04-2021 à 17:31:01
À première vue ton lien est pas mal focalisé sur l'assembleur ARM (qui découle du code C) / les trucs très bas niveau dans le système, à toi de voir si c'est utile pour toi.
edit: Et attention où tu mets ta déclaration de variable: A l'intérieur de main() (->local) ou pas (->global).
Marsh Posté le 30-04-2021 à 17:58:17
j'avais essayé les deux, pensant que c'était ça qui posait problème... mais au final, c'est bien l'optimisation du compilateur qui posait problème.
Pour l'histoire du bas niveau, disons que je veux au moins l'aborder un peu avant d'utiliser un IDE (STM32Cube Ide) qui a tendance à permettre de tout paramétrer avec un wizard à la création du projet.
Marsh Posté le 30-04-2021 à 23:13:03
rat de combat a écrit : Pour ton histoire de breakpoint: Vu que ta variable est utilisée nulle part le compilateur l'aura simplement viré dans le cadre de ses optimisations. |
Bien vu !
_pollux_ a écrit : Pour l'histoire du bas niveau, disons que je veux au moins l'aborder un peu avant d'utiliser un IDE (STM32Cube Ide) qui a tendance à permettre de tout paramétrer avec un wizard à la création du projet. |
Rien ne t'empêche de faire un projet "vide" et de configurer les périphériques à la main.
N'empêche, ton screenshot donne presque envie.
Marsh Posté le 01-05-2021 à 00:03:16
404 Not Found a écrit : |
Bien sûr, mais j'ai un cours qui commence par la base sur Keil, mais par sur cet IDE.
J'essaye de faire le truc dans l'ordre
Marsh Posté le 30-04-2021 à 09:08:35
Salut,
Je suis en train de péter les plombs avec Keil µVision Je reprends un cours basique d'openclassroom sur la programmation de microcontrôleur et j'ai des soucis avec µVision que je n'avais pas eu il y a 2 ou 3 ans.
J'ai bien le nucleo à base de STM32F103RB proposé par le cours.
Le premier exemple est celui-ci :
De base, j'ai déjà des warnings à la compilation que je n'avais pas avant :
Ensuite, si je vais chercher plus loin dans les fichiers, genre \Packs\Keil\STM32F1xx_DFP\2.3.0\Device\Include\system_stm32f10x.h, je vois ce genre de trucs :
<< là, il m'indique qu'il ne connait pas uint32_t
Ce qui me rassure guère pour la suite ... j'ai pourtant installé, il me semble, les dernières version des drivers pour mon nucleo.
Mais ce qui me gène le plus, c'est que si je fais le programme suivant :
Je ne peux pas mettre de breakpoint dans la simulation au niveau de la boucle while ou de l'instruction que contient la boucle...
et si je mets un watch sur la variable, il me sort qu'elle n'est pas atteignable ...
Il n'y a pas d'option dans le simulateur de keil, je rame depuis bine 3 heures sur ces conneries
Message édité par _pollux_ le 30-04-2021 à 09:23:29
---------------
Le topic du sport électronique@hfr : watch the l33t !