Donc tu n’utilises pas 1 process, mais autant que de client + le père
C'est ce que l'on faisait il y à 30 ans, faute de mieu, mais vu que ca fonctionne encore ….
Modérateur : Francois
Donc tu n’utilises pas 1 process, mais autant que de client + le père
Oui, moi aussi j'ai commencé avec des procs très lents (512khz en l’occurrence) ou chaque cycle comptait ... cependant : est-ce que ca sert à qq chose ? Je veux dire, est-ce que tu as des choses a faire faire à ton ESP ?adelantejm a écrit : ↑mar. 23 oct. 2018 09:33Pour les timers oui c'est vrai. Mais avant d'utiliser le C je programmais les microprocesseurs, principalement PIC, en assembleur. J'étais donc à 200 nanosecondes prés car j'utilisais beaucoup les interruptions. J'ai même côtoyé les picosecondes (au moins théoriquement) avec l'aide de circuits externes. Pour moi c'est dur d'accepter qu'un micro reste 1.000.000.000 nanosecondes à ne rien faire (pour moi) !
Tu peux meme le stopper totalement : regarde du coté du deepsleep() ...adelantejm a écrit : ↑mar. 23 oct. 2018 09:33Tout ceci fait que l'échange d'infos avec le central ne dure que 26 ms, toutes les 30 s, vu de l'ESP32. Du coup je pense à la transmission d'images ...
Il faut que j'envisage la mise en veille du Wifi sur l'ESP pour diminuer la consommation.
Heu ... tu parlais d'économie de cycle, mais là, j'ai un peu peur a te lire que fasse dans le lourdadelantejm a écrit : ↑mar. 23 oct. 2018 09:33Coté PI, j'ai un processus avec deux threads (while(1) ) un pour la mesure de température l'autre pour être le serveur des autres microprocesseurs en Wifi. J'utilise Fork, shm, mutex, ... Cela fonctionne correctement.
La joie d'apprendre de nouvelles choses ... mais c'est ca qu'est fun, nonadelantejm a écrit : ↑mar. 23 oct. 2018 09:33Un processus, en cours de développement, doit être le serveur internet, ce que faisait péniblement un Arduino Mega. J'ai testé l'échange d'infos avec l'autre processus(shm) : OK.
Je peine aujourd'hui avec les html et xml que je ne domine pas du tout (j'ai même confondu les deux ...).
Code : Tout sélectionner
// Temperature :mount the device:
system("sudo modprobe w1-gpio");
system("sudo modprobe w1-therm");
// Check if /sys/bus/w1/devices/ exists.
if((dirp = opendir(path)) == NULL)
{ printf("opendir error\n");return 1; }
// Reads the directories or files in the current directory.
while(( direntp = readdir(dirp) )!= NULL)
{ if(strstr(direntp->d_name,"28-"))
{ strcpy(rom,direntp->d_name);printf(" rom: %s\n",rom); }
}
closedir(dirp);
// Append the String rom and "/w1_slave" to path
// path becomes to "/sys/bus/w1/devices/28-00000xxxx/w1_slave"
strcat(path,rom);
strcat(path,"/w1_slave");
while (1) {
sleep(5);
if((fd = open(path,O_RDONLY)) < 0)
{ printf("open error\n"); return 1; }
// Read the file
if(read(fd,buft,sizeof(buft)) < 0)
{ printf("read error\n"); return 1; }
// Returns the first index of 't'.
temp = strchr(buft,'t');
sscanf(temp,"t=%s",temp);
value = atof(temp)/1000;
close(fd);}
Code : Tout sélectionner
// Temperature :mount the device:
system("sudo modprobe w1-gpio");
system("sudo modprobe w1-therm");
Code : Tout sélectionner
if((dirp = opendir(path)) == NULL)
{ printf("opendir error\n");return 1; }
Code : Tout sélectionner
if(!(dirp = opendir(path))) {
perror("opendir"); exit(EXIT_FAILLURE);
}
Il devrait pourtantLa méthode normale prog >fichierlog ne fonctionne pas pour moi.
Code : Tout sélectionner
prog | tee fichier.log
Plusieurs pistes :Cependant ça consomme beaucoup de temps CPU, 200 fois plus que tout le reste
Code : Tout sélectionner
temp = strchr(buft,'t');
sscanf(temp,"t=%s",temp);
value = atof(temp)/1000;
Code : Tout sélectionner
const char *temp = strchr(buft,'t'); // le const pourrait amener plus d'optimisation de la part du compilo
value = atof(temp+2)/1000; // tu connais déja l'offset, pas besoin de sscanf()