Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
tableau grande taille PIC24
Bonjour,
Pour situer mon niveau : j'ai fait de la programmation bas niveau en assembleur 68000 et 8086 pendant mes études il y a plus 20 ans (ça fait mal...).
J'ai repris en 2022 avec un projet sur PIC24FJ1024GB610. Voilà.
Après avoir trouvé des sujets qui tournent autour du pot, je n'ai toujours pas les idées claires sur la gestion de la RAM sur mon PIC. Soit les sujets ne traitent pas exactement mon cas, soit c'est en Anglais et ma compréhension reste approximative.
Dans mon programme en C, je déclare en global un tableau :
Ça compile sans problème. Mais lorsque je remplis le tableau ça plafonne à compteur = 26 :
L'exécution se déroule sans plantage (par un coup de chance ?) et nbEcrits a toujours la bonne valeur.
J'ai essayé :
mais ça plante à la compilation sur :
J'imagine que sprintf n'a pas le droit d'accéder à l'espace mémoire où a été installé le tableau ...
Comment allier la place pour un tel tableau avec une possibilité d'accès "universelle" ?
Merci de l'éclairage que vous pourrez m'apporter.
Laurent
Pour situer mon niveau : j'ai fait de la programmation bas niveau en assembleur 68000 et 8086 pendant mes études il y a plus 20 ans (ça fait mal...).
J'ai repris en 2022 avec un projet sur PIC24FJ1024GB610. Voilà.
Après avoir trouvé des sujets qui tournent autour du pot, je n'ai toujours pas les idées claires sur la gestion de la RAM sur mon PIC. Soit les sujets ne traitent pas exactement mon cas, soit c'est en Anglais et ma compréhension reste approximative.
Dans mon programme en C, je déclare en global un tableau :
Code : Tout sélectionner
char dummyElements [150][19];//150 chaînes de 18 caractères
Ça compile sans problème. Mais lorsque je remplis le tableau ça plafonne à compteur = 26 :
Code : Tout sélectionner
for ( compteur = 0 ; compteur < 150 ; compteur ++)
nbEcrits = sprintf (dummyElements [compteur], "%03d", compteur);
L'exécution se déroule sans plantage (par un coup de chance ?) et nbEcrits a toujours la bonne valeur.
J'ai essayé :
Code : Tout sélectionner
__eds__ char dummyElements [150][19] __attribute__ ((eds, page)); // même comportement sans le 'page'
mais ça plante à la compilation sur :
Code : Tout sélectionner
sprintf (dummyElements [compteur], "%03d", compteur);
error: passing argument 1 of 'sprintf' from pointer to non-enclosed address space
J'imagine que sprintf n'a pas le droit d'accéder à l'espace mémoire où a été installé le tableau ...
Comment allier la place pour un tel tableau avec une possibilité d'accès "universelle" ?
Merci de l'éclairage que vous pourrez m'apporter.
Laurent
tableau grande taille PIC24
Salut,
Je vois que tu as un problème avec la gestion de la RAM sur ton PIC24FJ1024GB610. Tu veux déclarer un grand tableau en mémoire et y accéder avec la fonction sprintf. Mais tu rencontres des erreurs de compilation ou d'exécution.
Pour résoudre ton problème, tu as deux options :
• Soit tu gardes ta déclaration de tableau sans le préfixe eds et l'attribut eds, mais tu fais attention à ne pas dépasser la taille d'une banque. Tu peux utiliser le pragma section pour spécifier la banque où tu veux placer ton tableau. Par exemple, tu peux écrire : #pragma section ram "gpr1" pour placer ton tableau dans la banque 1.
• Soit tu utilises le préfixe eds et l'attribut eds, mais tu modifies ton appel à sprintf pour utiliser un pointeur eds. Par exemple, tu peux écrire : sprintf ((char _eds *)dummyElements [compteur], "%03d", compteur);
J'espère que ces explications te seront utiles. Si tu as besoin d'autre chose, tu peux me le demander. Je suis là pour t'aider.
A bientôt !
Je vois que tu as un problème avec la gestion de la RAM sur ton PIC24FJ1024GB610. Tu veux déclarer un grand tableau en mémoire et y accéder avec la fonction sprintf. Mais tu rencontres des erreurs de compilation ou d'exécution.
Pour résoudre ton problème, tu as deux options :
• Soit tu gardes ta déclaration de tableau sans le préfixe eds et l'attribut eds, mais tu fais attention à ne pas dépasser la taille d'une banque. Tu peux utiliser le pragma section pour spécifier la banque où tu veux placer ton tableau. Par exemple, tu peux écrire : #pragma section ram "gpr1" pour placer ton tableau dans la banque 1.
• Soit tu utilises le préfixe eds et l'attribut eds, mais tu modifies ton appel à sprintf pour utiliser un pointeur eds. Par exemple, tu peux écrire : sprintf ((char _eds *)dummyElements [compteur], "%03d", compteur);
J'espère que ces explications te seront utiles. Si tu as besoin d'autre chose, tu peux me le demander. Je suis là pour t'aider.
A bientôt !
tableau grande taille PIC24
tableau grande taille PIC24
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Cf. Grand tableau PIC24 sur FUTURA et accessoirement sur Grand tableau PIC24 sur ABCelectronique ;-))
Cf. Grand tableau PIC24 sur FUTURA et accessoirement sur Grand tableau PIC24 sur ABCelectronique ;-))
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
tableau grande taille PIC24
tableau grande taille PIC24
Clodine a écrit :Salut,
Je vois que tu as un problème avec la gestion de la RAM sur ton PIC24FJ1024GB610. Tu veux déclarer un grand tableau en mémoire et y accéder avec la fonction sprintf. Mais tu rencontres des erreurs de compilation ou d'exécution.
Pour résoudre ton problème, tu as deux options :
• Soit tu gardes ta déclaration de tableau sans le préfixe eds et l'attribut eds, mais tu fais attention à ne pas dépasser la taille d'une banque. Tu peux utiliser le pragma section pour spécifier la banque où tu veux placer ton tableau. Par exemple, tu peux écrire : #pragma section ram "gpr1" pour placer ton tableau dans la banque 1.
• Soit tu utilises le préfixe eds et l'attribut eds, mais tu modifies ton appel à sprintf pour utiliser un pointeur eds. Par exemple, tu peux écrire : sprintf ((char _eds *)dummyElements [compteur], "%03d", compteur);
J'espère que ces explications te seront utiles. Si tu as besoin d'autre chose, tu peux me le demander. Je suis là pour t'aider.
A bientôt !
Bonjour Clodine et merci pour cette réponse très précise. J'ai légèrement modifié la syntaxe du cast pour qu'elle passe : (__eds__ char *) . Malheureusement ça coince toujours sur le sprintf.
Je ne sais donc toujours pas comment tirer parti d'un stockage dans l'EDS, mais mon problème initial est résolu, tu verras comment dans le post qui va suivre.
tableau grande taille PIC24
Claudius a écrit :Bonjour,
Cf. Grand tableau PIC24 sur FUTURA et accessoirement sur Grand tableau PIC24 sur ABCelectronique ;-))
Eh oui ! Quand je jette une bouteille à la mer, je ne fais pas semblant !
La réponse à mon problème de départ se trouve ICI, merci @umfred !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités