Forums - Tous les messages
Forums - Tous les messages
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 
   Tous les messages

 Bas   Précédent   Suivant

(1) 2 3 4 ... 1540 »


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Oui bon écoutes, le principal c'est que cela fonctionne et que je dispose d'assez de RAM pour le reste.
En tout cas merci encore pour ton aide.

Posté le : 13/05 17:38
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Non, en tout cas pas comme cela.
Quand tu fais: U8 tableau[48];
c'est comme si tu définissais un pointeur constant, donc impossible de modifier l'adresse de tableau.

La seule solution, c'est l'allocation dynamique, mais je doute que le compilateur l'autorise sur ces petits µContrôleurs.

Posté le : 13/05 00:59
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Bonsoir,

J'arrive à récupérer l'heure UTC par NTP et désormais, ma carte est dans les temps

Mais j'ai bien galéré depuis quelques jours. Autant la conversion des secondes en heure ne m'a pas trop embêté, autant j'ai manipulé ma structure dans tous les sens à tel point que j'en ai fait un cauchemard !

En effet, je me suis obstiné à déclarer ma structure dans 2 fonctions différentes, Send_NTP() et Recv_NTP(), avec juste un pointeur entre les 2. Tout ça pour économiser 48 octets dont seulement 4 contiennent les secondes si précieuses ...
A cause de petits soucis de mes buffer Rx et Tx partagés avec d'autre protocoles, je voulais créer la structure dans Send_NTP(), balancer mes données au serveur à partir de l'adresse pointeur octet par octet, récupérer le packet à jour du NTP en recréant la même structure dans Recv_NTP(), toujours à partir du pointeur.

Seulement voilà, et même si au fond je le sais, cette méthode de construire/détruire au sein d'une fonction, et même si le pointeur pointe toujours au même endroit, les données dans ma structure au moment de l'envoie étaient corrompues par le reste du programme ...

Bref je déclare donc ma structure en tant que variable globale. J'ai voulu tenter de mettre ces 2 fonctions dans une principale, afin de déclarer ma structure dans celle-ci, mais j'avais plus la foi.

Ma nouvelle question, est-il possible de déclarer dans une fonction, un tableau[48] avec un pointeur autre, et dans son collimateur la case tableau[0] ??

Ceci par exemple ne fonctionne pas puisque le tableau est fixe avec une autre adresse pour la case 0 :
extern U8 *p;
U8 tableau[48]

*
tableau = &p;


En fait ce serait de pouvoir déclarer un tableau provisoire à partir de l'adresse d'un pointeur existant avant ?

Bon désolé pour le pavé

Posté le : 13/05 00:13
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Citation :
mais je ne le conseille pas


Non effectivement je pense que c'est un danger. Je pensais peut-être qu'il existait une syntaxe capable de faire du cast et prouvant au compilateur qu'on est conscient de ce que l'on fait, par exemple mettre un U16 dans un U8.

Bon en tout cas merci pour ton aide, et aussi David.

Posté le : 07/05 11:37
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Pour ce cas précis je ne pense pas car il y a vraiment risque de perte de donnée. Ca serait pareil en passant de double à float je pense.
Il doit y avoir moyen de paramétrer le niveau de warning ou quels sont les warnings qu'on veut éliminer, mais je ne le conseille pas.

Posté le : 06/05 21:27
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Ok. Ça m'emmène à une nouvelle question. Je caste parfois "à la bourrin" des valeurs word dans du char. Souvent, ce sont des calculs que j'effectue et qui ne passeraient pas avec du char mais dont le résultat lui, y rentre. Le compilateur me met donc l'erreur passable "possible loss of data". Je suppose qu'une syntaxe existe ?

Posté le : 06/05 20:58
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Citation :
Ok ce code fonctionne nickel. Tu peux m'expliquer du coup cette syntaxe ? ça peut s'employer dans d'autres cas ?
Oui, ça s'appelle un cast, ou transtypage en français.
lors de l'évaluation de l'expression, le type du membre de droite de l'affectation va être transformée de pointeur de myStruc en pointeur de uint8_t (uint8_t est défini comme un unsigned char dans stdint.h).

Ca sert davantage en C++ où le compilateur est très strict sur la vérification des types. C++ a d'ailleurs bien évolué sur ce plan et la méthode que je t'ai donnée est à éviter en C++ "moderne". Il est demandé d'utiliser les mots clés tel que static_cast, reinterpret_cast, const_cast, dynamic_cast, mais j'avoue m'en taper un peu et je caste toujours à la C.

Posté le : 06/05 19:17
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Citation :
Le code que tu me donnes
uint8_t* p = (uint8_t*)&str;
me parait "forcer" le type de la structure renvoyé dans le pointeur U8 ...?
C'est juste pour "rassurer" le compilateur. Il faut évidemment que les 2 variables soient compatibles. Ici, ce sont des pointeurs, donc pas de problème pour caster à priori. Mais c'est le programmeur qui en prend explicitement la responsabilité.

Posté le : 06/05 18:53
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
uint8_t= (uint8_t*)&str;


Ok ce code fonctionne nickel. Tu peux m'expliquer du coup cette syntaxe ? ça peut s'employer dans d'autres cas ?

Posté le : 06/05 18:51
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Structures, unions... ?
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Merci pour vos messages.

Sympa d'avoir ressorti tout ton attirail de VM pour tester cela !

Oui je comprend maintenant l'histoire de l'alignement. Effectivement, la résolution de 8 bits d'un S08 étant la plus petite, je ne pense pas retrouver ce problème puisque j'avais bien mes données parfaitement alignées et sans trous dans mon tableau du pointeur p.

Le code que tu me donnes
uint8_t= (uint8_t*)&str;
me parait "forcer" le type de la structure renvoyé dans le pointeur U8 ...?

Je vais donc essayer ce code en début de soirée pour voir. Dans tous les cas, le méthode que j'ai essayer hier en récupérant l'adresse du premier membre fonctionne aussi parfaitement, et j'ai la sensation d'avoir dupé mon compilateur

Quand à sizeof(), j'ai toujours pas fait mes 1ers pas !

Posté le : 06/05 17:01
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer



 Haut
(1) 2 3 4 ... 1540 »




Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Forums - Tous les messages