Encore une chose: "deprecated conversion from string constant to 'char*'"
Oui par "mesure de simplicité", j'ai utilisé String comme type de données pour data.
Comment mettre toute mes données dans le bon format pour éviter cela?
Désolé j'ai vraiment un soucis avec String, string,char, et le tout combiné avec les arrays et les pointeurs... Merci d'avance.
format actuel:
String data;
data = "do=data&func=0&to=0&val=0&valfloat=0&date=0&data="+dateTimeForWeb()+","
+EEPROM.readByte(EElightPwmMax1)+","+EEPROM.readByte(EElightPwmMax2)+","+EEPROM.readByte(EElightPwmMax3)+","+EEPROM.readByte(EElightPwmMax4)+","
+EEPROM.readInt(EElightStartTime1)+","+EEPROM.readInt(EElightStartTime2)+","+EEPROM.readInt(EElightStartTime3)+","+EEPROM.readInt(EElightStartTime4);
+1 avec B@tto ,
il parait plus simple au debut d'utilisé les string mais c'est ce voilé la face et repouser le probléme des pointeur alors qu'avec un peut de travail on les comprend bien et ça devien efficase!
perso je ne les utilise jamais ( les string), par contre juse et abuse des tableaux de char et des pointer!
Bon je vais commencer a être chiant, mais c'est pas très pratique pour calculer la taille de mon tableau automatiquement.
J'ai besoin de la valeur réelle a envoyé pour le transfert en POST.
J'aime pas trop le mode chunked, car il est même pas fonctionnel pour apache 2.4.9. Dans la version 2.5, il sera mieux implanté.
je ne me souvient pas si c'est la taille complete de la trame avec les donne poste qu'il faut ou juste la taille de chaine des variable passer en POST car sinon vu que tu met tout dans un tableau un rapide parcour avec un index qui s'incrémente et s'aréte lorsque tu tombe sur 0 et donnera la taille en octet puisque un char =un octet.
Heloderma-kris:
je ne me souvient pas si c'est la taille complete de la trame avec les donne poste qu'il faut ou juste la taille de chaine des variable passer en POST car sinon vu que tu met tout dans un tableau un rapide parcour avec un index qui s'incrémente et s'aréte lorsque tu tombe sur 0 et donnera la taille en octet puisque un char =un octet.
c'est bien la taille de la chaine passer en poste qui compte, je regarde pour faire ça. Pour le fin de ligne, c'est bien 2 caractères qu'il faut compter?
C'est génial ce if(data != 0), lorsque je declare un tableau plus grand que ce dont j'ai besoin (vu que mes variables sont de longueur variables) Eh bien il me supprime tout ce qui n'a pas ete rempli =NULL. * * // On recupere la chaine de caractere pour la mettre dans un tableau de pointeur for( unsigned int i = 0 ; i < sizeof(data); i++) { if(data[i] != 0) dataSend[i] = byte(data[i]); else counter++; }* *
c'est normal car dans un tableau de char assimilable a un tableau de pointeur les case non initialisé pointe sur l'adresse "0" ou pointer null , donc dans la boucle on verifi que la valeur de l'adresse est si elle pointe sur 0 alors il n'y a pas de carracter suivant ! donc on arrete de lire.
c'est exactement a ça que sert un buffer c'est un androit de la memoir predefini que l'on va utiliser comme un stockage temporaire , une foi que l'on a remplis cette espace ( entierement ou partiellement) on va lire et envoyer les donné ou utilisé!
Je voulais vous remerciez pour votre aide, car aujourd'hui ça fonctionne très bien. J'ai remplacé tous les String que j'utilisais dans mon code par des tableaux de caractères.
RESULTATS: j'envois maintenant 390 caracteres en 2 secondes au lieux de 320 caracteres en 6 secondes. Je prend en compte la lecture des variables et la construction de la chaine.
Je fais un découpage de la chaine en 64 octets, sinon pas d'envois de données si j'augmente la taille du tampon. Overflow sans doute...
Personnellement entre un découpage en 32 octets et 64 octets, je n'est pas de gain signifiant en temps. Du coup je vais surement passé à 32 octets.
Question: Dans quel but tu as utilisé un delay dans cette fonction? Tu as un système multitâche?
Pour ma part je l'ai supprimer.
Heloderma-kris:
void sendBuff()
{
m_client.write(m_Buff_Envoi, (m_cursBuffer));/// on envoi le buffer
delay(1);
for (int i=0; i<tBufferEnvoi; i++) /// on efface les donné du buffer
{
m_Buff_Envoi[i]=uint8_t(0);
}
m_cursBuffer=1;/// on reposition notre curseur en debut de buffer #ifdef DEBUG_SERIAL
Serial.println(F("fin envoi donnes :")); #endif
return;
}