Trouble when collecting data into file

Posted on
  • Hi all:

    Recently, I am trying to collect analog data into the flash and save as a file by using MDBT42Q.
    Below is the example code in the Data collection part I used to explain my trouble:

    var storage = require("Storage");
    var FILESIZE = 65536;
    var count = 0;
    var file = {
      name : "",
      offset : FILESIZE, // force a new file to be generated at first
    };
    
    // Add new data to a log file or switch log files
    function saveData(txt) {
      var l = txt.length;
      if (file.offset+l>FILESIZE) {
        // need a new file...
        file.name = file.name=="log2"?"log1":"log2";
        // write data to file - this will overwrite the last one
        storage.write(file.name,txt,0,FILESIZE);­
        file.offset = l;
      } else {
        // just append
        storage.write(file.name,txt,file.offset)­;
        print(count);
        count += 1;
        file.offset += l;
      }
    }
    
    // Write some data
    setInterval(function() {
      saveData(getTime()+","+E.getTemperature(­)+"\n");
    }, 10);
    

    The trouble is that: When I change the FILESIZE bigger than 32*1024(32768), my Web IDE will just stuck and return nothing.
    I have try require("Storage").eraseAll(), reset() and save(), it is all useless.
    In the attachment is some information about my memory usage.

    Thank you guys very much!


    1 Attachment

    • 1597731573(1).jpg
  • Hi,

    I'm surprised the IDE is getting stuck - but after power cycling the board it all works again until you re-flash the software?

    I can see some potential issues here:

    • MDBT42 only has 40kB of flash memory available for writing, so if the file gets bigger than that storage.write will fail (however it should really give you an error message)
    • The code above needs two files, plus you need to store your code in flash, so realistically you're looking at an absolute maximum FILESIZE of 16kB
    • You're writing the temperature data with saveData 100 times per second (every 10ms). Did you intend to do it every 10 seconds instead? At 100 times per second you're going to fill up your log file in ~2 seconds
  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

Trouble when collecting data into file

Posted by Avatar for Rook @Rook

Actions