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 ---
Forum général sur le langage C !

Modérateur : Jérémy

problemo avec UART Write text de taille > 256 octest
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3262
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#11 Message par paulfjujo » lun. 9 mai 2016 12:03

bonjour,

j'ai remplacé UART1_Write_Text(buffer2);
par
UART1_Write_String(buffer2);
où buffer2 est ma table de reception UART2 de taille 512 byrtes

et NO PROBLEMO !
de ce fait j'ai abandonné l'usage de memory manager ... :?: utilité ?

Code : Tout sélectionner


void UART1_Write_String
(unsigned char * St)
{
   int i;
   unsigned char c0;
   i=0; 
 while
(1)
  {
      c0= *(St+i);
      if(c0==0) break;    // sortie sur terminateur de string
      UART1_Write(c0);
    i++;    // pourrait permettre une sortie sur nb de caracteres maxi...si on veut Bretelles et ceinture !
 }
}
Aide toi, le ciel ou FantasPic t'aidera

problemo avec UART Write text de taille > 256 octest
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#12 Message par Guest » lun. 9 mai 2016 13:36

Bonjour Paul

C'est ce que j'ai fais, hier , avec mes tests en prenant ma routine écriture LCD et ça passait sans problème.

Code : Tout sélectionner

void UART1_Write_String(char * Str)
{
 int i;
 while (*(Str+i)>0)
 {
  Write_XC8_LCD (Str,i);
  i++;
  }
}


Alors le pourquoi ????

Tu es pugnace (tu lâches pas) :bravo: peso j'aurais déjà mis la routine en ASM. De plus, pas très compliqué

A+

problemo avec UART Write text de taille > 256 octest
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#13 Message par Claudius » lun. 9 mai 2016 16:11

Bonjour,

Le code suivant fonctionne par miracle...

Code : Tout sélectionner

void UART1_Write_String(char * Str)
{
 int i;
 while (*(Str+i)>0)
 {
  Write_XC8_LCD (Str,i);
  i++;
  }
}


En effet, il n'y a aucune raison pour que la variable locale i prenne la valeur 0 suite à sa déclaration (cf. Variables locales ;-)

problemo avec UART Write text de taille > 256 octest
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#14 Message par Guest » lun. 9 mai 2016 17:38

oui claudius tu as raison :wink:
donc :

Code : Tout sélectionner

int i=0;


Tu suis, cela fait plaisir, par contre, tu ne sais pas pourquoi notre ami Paul a ce soucis :wink: cela serait mieux pour lui, plutôt que mon i=0, ou peut être un bout de code de ta part pour nous expliquer cela.Plaisir de voir ce bout de code

allez A+

problemo avec UART Write text de taille > 256 octest
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3262
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#15 Message par paulfjujo » lun. 9 mai 2016 19:19

:furieux: réponse de mikroC

Hi paulfjujo,

Unfortunately, there is limitation for UART1_Write_Text.
In the Help menu in the compiler (version 6.6.3) is written that text should be limited to 255 characters and zero terminated.

Best regards,
Lana


cela pourrait se comprendre pour les 16F avec peu de RAM..
mais avec les 18FxxJxx ?
ils s'endorment sur leurs lauriers ( en train de faner !)

une routine ASM avec instructions evoluées TBLPTR, TBLWT*+ MOVFF ?
Aide toi, le ciel ou FantasPic t'aidera

problemo avec UART Write text de taille > 256 octest
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#16 Message par HULK28 » lun. 9 mai 2016 19:35

Tu as essayé de faire du pas à pas pour voir quand ça plante et où?
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

problemo avec UART Write text de taille > 256 octest
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#17 Message par Guest » lun. 9 mai 2016 19:49

Je te rejoint avec en plus, c'est que tu sais faire en ASM . :wink:

problemo avec UART Write text de taille > 256 octest
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 262
Âge : 70
Enregistré en : septembre 2015
Contact :

#18 Message par Claudius » lun. 9 mai 2016 20:11

Bonsoir,

paulfjujo a écrit: cela pourrait se comprendre pour les 16F avec peu de RAM ... mais avec les 18FxxJxx ?

ils s'endorment sur leurs lauriers ( en train de faner !)

Cela n'est pas un problème de taille de RAM, mais d'organisation segmentée en bank de 256 octets de cette RAM de ces PICs ;-)

Maintenant, lire:
- The PIC 18F452 Memory and Addressing
- PIC16 Specifics
- Linear Data Memory

Une bonne routine ASM avec gestion des bank résoudrait définitivement le problème du support contiguë de la RAM et en cela, je rejoins notre ami maï ;-)

Sinon, entièrement d'accord avec ta remarque: Ils ne se cassent pas la nénette MikroC...

problemo avec UART Write text de taille > 256 octest
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3262
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#19 Message par paulfjujo » lun. 9 mai 2016 20:16

Bonsoir HULK28,

HULK28 a écrit :Tu as essayé de faire du pas à pas pour voir quand ça plante et où?


Le mode debugger (software) de mikroC ne me permet pas de faire du pas à pas..
Hormis si ça n'interfere pas avec les peripheriques
et je n'ai pas d'outils pour ...genre debugger in circuit ..
et justement mon seul outil est l'UART .

j'utilise donc cette version .. qui pour l'instant me permet d'avancer ..
avec un MaxCar < à la taille maxi de la table contenant le string à envoyer
au cas ou il manquerait un Zero terminateur de string..= exit d'urgence sans planter le programme
par ecrasement de variable.
et visu du probleme sur le terminal


Code : Tout sélectionner


void UART1_Write_String
(unsigned char * St,int MaxCars)
{
 int i;
 unsigned char c0;
 i=0;
while(
1)
 {
 c0= *(St+i);
 if(c0==0) break;
 UART1_Write(c0);
 i++;
 if (i>MaxCars) break;
 }
}
 



Claudius:


Cela n'est pas un problème de taille de RAM, mais d'organisation segmentée en bank de 256 octets de la RAM de ces PICs


tout à fait d'accord sur ce point,
c'est d'ailleurs dans ce sens que j'ai repondu à mikroE forum
Aide toi, le ciel ou FantasPic t'aidera

problemo avec UART Write text de taille > 256 octest
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#20 Message par HULK28 » lun. 9 mai 2016 21:05

Ce n'est pas tant qu'ils ne se cassent pas la nénette, c'est qu'il vaut mieux prendre un ticket pour avoir accès à des développeurs de niveaux supérieurs.
Le forum de MikroC, comme chez d'autres fournisseurs de compilo :roll:, permet tout juste de dépanner les newbies.
Pour avoir des réponses plus pointues il ne faut pas hésiter à poster un ticket.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 11 invités