Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Fonction Readconfig et check CRC ?

    Scheduled Pinned Locked Moved WifInfo
    2 Posts 2 Posters 1.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • N Offline
      nherreyre
      last edited by nherreyre

      Hello,

      En relisant le code de la fonction readConfig, je ne comprend pas comment le crc calculé lors de la lecture de l'EEPROM est vérifié :

      
      bool readConfig (bool clear_on_error) 
      {	
      	// For whole size of config structure
      	for (uint16_t i = 0; i < sizeof(_Config); ++i) {
      		// read data
      		data = EEPROM.read(i);
      			
      		// calc CRC
      		crc = crc16Update(crc, data);
      	}
      	
      	// CRC Error ?
      	if (crc != 0) {    <-----
      
      

      ne faudrait il pas plutôt tester dans le IF la valeur de la variable "crc" avec celle de "config.crc" ?

      je suis peut être passé a coté de quelque chose vu que suis nul en calcul de CRC 😉

      a+

      Nicolas.

      1 Reply Last reply Reply Quote
      • M Offline
        mjeanne
        last edited by mjeanne

        On ne teste pas ici le crc de chaque variable de config, mais le crc de toute la structure.
        Mes cours sur le CRC sont loin, mais ce qui est fait ici, c'est un calcul de crc sur chaque valeur de la config (et non sur l'objet "config"), qui contient elle-même une "sauvegarde" du crc. On fait donc un calcul de crc sur l'ensemble "config.* + config.crc", donc le résultat du modulo devrait être 0. Si le crc déjà calculé lors de la sauvegarde n'était pas stocké dans l'objet config, ça ne fonctionnerait pas pareil et on ferait une comparaison config.crc et crc.

        Par contre, l'extrait de code à été simplifié ? Parce que je n'y vois pas l'initialisation de crc avant la boucle.

        Sinon, pour simplifier la compréhension, le code dans la boucle aurait pu resembler à ça:
        ancienCRC = crc;
        crc = crc16Update(ancienCRC, data);

        1 Reply Last reply Reply Quote
        • First post
          Last post

        3

        Online

        5.7k

        Users

        534

        Topics

        5.0k

        Posts

        Top Topics

        • Denky 4 - Domoticz - Triphasé -
          Nicolas BernaertsN
          Nicolas Bernaerts
          0
          7
          249

        • Denky D4 et Linky Standard TInfo Rx Non Configuré
          CharlesC
          Charles
          0
          5
          282

        • CC1101
          CharlesC
          Charles
          0
          2
          117

        Popular Tags

        teleinfo
        24 topics
        arduino
        19 topics
        remora
        16 topics
        esp8266
        10 topics
        arduipi
        10 topics
        wifinfo
        7 topics
        raspberry
        7 topics
        broadcast
        7 topics
        Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB