Formation aux PIC

Sep 16, 2009 159 Replies

On Sep 26, 8:43 am, Laurent CLAUDE :

|> "Le langage C" par Kernighan & Ritchie. |> (35 Euros) ISBN : 2-10-048734-5 |>

formatting link

Il me semble que tu n'as pas bien saisi :

Le C est un language qui ne *depend pas* de la cible materielle. Un des interets du C est justement de ne pas etre specifique a une machine : il n'existe pas un C pour Microchip, un autre pour Motorola/Freescale, un autre pour Intel, etc ... Un *meme* programme C correctement ecrit pourra etre compile, suivant le uC cible, en differents codes machine, destines a plusieurs uC differents, provenant de fabricants differents. (exception faite des routines bas niveau specifiques au uC) C'est le compilateur qui transcrit le C en language machine qui va generer du code executable pour un uC particulier.

Donc ta question "apprendre le C pour du PIC" n'a pas de sens, car le C n'est pas destine a un uC particulier, comprends-tu ?

Apprendre le C est *independant* du fait d'apprendre les PIC. Que tu utilises un PIC, un 68HC16, ou un uP Intel, la connaissance du C te servira toujours, quel que soit le hardware que tu utiliseras.

Apprendre le C n'est certainement pas inutile !

// Le 25/09 a 11h22 Slartibartfast :

char *p = "stn", *s = "Si tu racontes n'importe quoi c'est normal" " que tu te fasses tailler un costard."

*strrchr( s, *p++ ) = *(p+1); *strrchr( s, *p++ ) = *p; printf( "%s \n", s );

// ;-)

Jean-Christophe a écrit :

Ha... je m'attendais a cette réponse ! C'est confirmé : ma question était stupide !!!

Merci Laurent

"Laurent CLAUDE" a écrit

=================== Il existe de nombreux outils (compilateurs) pour les µC PIC en langage C, tous à peu près semblables quand aux instructions et structures du standard_C , ( pour ceci , n'importe quel cours ou document concernant le "langage C" conviendra ) ... mais tous différents en ce qui concerne les bibliothèques très spécifiques, de fonctions et l'ecriture de la gestion des outils du µC concerné. Exemple comparatif ici de quelques compilateurs PIC (commerciaux)

formatting link

J'esp=E8re que tu ne manipules pas les pointeurs comme =E7a dans tes programmes embarqu=E9s.

--

-Stan

On Sep 26, 8:11=A0pm, Stan :

|> J'esp=E8re que tu ne manipules pas les pointeurs |> comme =E7a dans tes programmes embarqu=E9s.

Ca marche tres bien, merci !

Tu t'es d=E9ja demand=E9 o=F9 =E9tait r=E9serv=E9 l'espace m=E9moire de 'p'= et 's' ? Et comment on appelle ces d=E9clarations ?

--

-Stan

On Sep 26, 4:19=A0pm, Laurent CLAUDE

|> C'est confirm=E9 : ma question =E9tait stupide !!!

Nooon pas du tout : il n'y a pas de question stupide, ce qui serait stupide c'est de ne pas chercher a comprendre.

On Sep 26, 9:19=A0pm, Stan

|> Tu t'es d=E9ja demand=E9 o=F9 =E9tait r=E9serv=E9 l'espace m=E9moire de = 'p' et 's' ? |> Et comment on appelle ces d=E9clarations ?

Ca fait 20 ans que je code en C, merci. As-tu compris ce que fait ce code, juste en le lisant, sans le faire tourner ?

e 'p' et

Quelle r=E9ponse pertinente.

Pourquoi, il est sens=E9 =EAtre difficile =E0 comprendre ( en plus d'avoir un comportement ind=E9fini ) ?

A moins d'avoir confondu char *p avec char p[] ?

--

-Stan

maioré a écrit :

Ouais !! merci très bon lien C'est aussi ce type de réponse que j'appelais avec cette question ! cdlt,

On Sep 26, 10:09 pm, Stan :

C'est quoi cette agression, quel est ton probleme ? Il faut ta permission pour ecrire du C ?

Je constate juste que tu ne reponds pas. Fais tourner ce code avec un compilo ANSI.

Tu n'as jamais =E9crit char *str =3D "texte"; au lieu de char str[] =3D "texte";

Tu devrais essayer, juste par curiosit=E9. Pour le reste, je n'ai pas l'intention de me battre avec toi, j'ai pass=E9 l'age.

"GuessWhat" a écrit dans le message de news: snipped-for-privacy@s6g2000vbp.googlegroups.com... On Sep 26, 8:11 pm, Stan :

au hasard : ça remplace costard par connard ?

mais ton programme ne marchera jamais sur un µC, les constantes (la chaine s et p) sont stockées en ROM et ne seraient pas modifiables ou sous unix/windows tu aurais droit à une belle erreur de segmentation.

il faut faire :

char *s=strdup("......");

et free(s) à la fin (bien que ça ne serve absolument à rien dans ce cas vu qu'il n'y a que ça comme code et qu'ensuite le programme sort :-) )

Pascal

On Sep 27, 10:03 am, "Pinball-Man" :

Bingo !

Qui parle de uC ? Je parle de C, pas de la cible mat=E9rielle.

Un compilo ANSI a qui on d=E9clare const char *s =3D "texte"; va maintenir le pointeur 's' et la chaine ASCII constantes, car c'est bien cela la sens du mot "const".

Un compilo ANSI a qui on d=E9clare char *s =3D "texte"; va stocker le pointeur et la chaine ASCII en RAM, et permettra donc leur modification a tous deux. Si ce n'est pas le cas alors le compilo n'est pas ANSI.

Aucune raison d'avoir une erreur de segmentation ! Ce code ne cause probl=E8me qu'=E0 certaines personnes, et non =E0 un compilateur C qui respecte la norme ANSI.

On Sep 26, 10:09 pm, Stan :

C'est exactement la meme chose.

"Pinball-Man" a écrit dans le message de news:

4abf2a62$0$31796$ snipped-for-privacy@news.free.fr...

======== Ou alors on peut ecrire

char *p[] = "stn";

On Sep 27, 1:08=A0pm, "maior=E9" :

|>> char *p =3D "stn"

Certainement pas. char *p[] designe un tableau de pointeurs. Il ne peut donc etre initialise avec une chaine de caracteres.

Aussi nul en programmation qu'en =E9lectronique.

On Sep 27, 1:08=A0pm, "maior=E9" :

MDR

Pas tout =E0 fait, surtout lors de la d=E9claration.

char *p =3D "toto"; p[2] =3D 'i'; /* affectation sur le const : r=E9sultat ind=E9fini*/

char p[] =3D "toto"; p[2] =3D 'i'; /* ok */

la premi=E8re version est un h=E9ritage des anciens compilo, pr=E9serv=E9 p= our une compatibilit=E9 avec des millions de lignes d=E9j=E0 =E9crite.

Les programmeurs s=E9rieux pr=E9f=E9rent d=E9clarer : const char* p =3D "to= to", ce qui controle toute modif =E0 la compilation.

--

-Stan

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required