• No, it's not in the data stream. The code snipped I copied from you is in a function that's called on a setInterval(), called long after I know I've received all the data. That error occurs on the console.log() of the attempt to dump the whole array.

    I assume the CTRL-C was some interrupt or something going on in the microcontroller when it encounters a fatal memory error. I assume that because I've seen that exact message so many times while I was coding up my data processing code (which allocates memory). But none of that processing code is in use right now, only the attempt to dump data.

    So I have to issue a correction, embarrassingly. The dumpArray() doesn't strictly allocate memory (as in new XXX()), but it creates a string that it appends the entire buffer to, and returns that string (to be printed to console). So there's absolutely another big buffer allocation going on when I try to dump the data.

    My problem is that if I just loop through the array, and console.log() each byte, I get newlines after each byte:
    0xb0
    0x63
    0x20
    ...and so on. It becomes unreadable. Any ideas on how to print to the console without the newline?

  • 'Any ideas on how to print to the console without the newline?'

    Not off hand. I've usually built new strings just concatenating each byte, then console.log() say 32 bytes at a time generating a table. I've done some code stripping the leading '0x' let me see if I can locate that snippet. . . .

    EDIT: (truncate the leading '0x')

    https://www.w3schools.com/jsref/jsref_parseint.asp
    https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parseint
    var byte = 0x??;
    parseInt( byte, 16 );

    build a columnar table of hex values

      for( var j=0; j<bytes; j++ ) {
    
        var decbyte = sread[j];
        //var schar = String.fromCharCode( decbyte );
        var soutcvrt = parseInt( decbyte, 16 );
        soutequiv+= " ";
        soutequiv+= ( j == nNumSepHexBytes ) ? " " : "";    // Separate each eight byte block
        soutequiv+= soutcvrt;
    
    //  08 52 ff ff ff ff ff ff   31 32 33 61 00 ff ff ff
    

    substitute a period marker for known value

    soutequiv+= "|";
      for( var k=0; k<bytes; k++ ) {
    
        var decbyte = sread[k];
        if( decbyte == 255 ) decbyte = 46;  // . Period marker
        var schar = ( decbyte > dASCIICtrlCharEnd ) ? String.fromCharCode( decbyte ) : " ";
    
        if( bDebugPrint ) {
          if( decbyte == 0 ) {
            console.log( "[L242] schar [ " + schar + " ]" );
          }
          if( sChar == "00" ) {
            console.log( "[L242] schar [ " + schar + " ]" );
          }
        }
    
        soutequiv+= ( k == nNumSepHexBytes ) ? " " : "";    // Separate each eight byte block
        soutequiv+= schar;
      }
    soutequiv+= "|";
    
        if( bDebugPrint ) {
    
        console.log( "[L120] str read " + sread );
        console.log( "[L121] " + sread.toString() );
    
        // https://www.w3schools.com/jsref/jsref_fromcharcode.asp
        // var str = String.fromCharCode(sread);
    
        // https://stackoverflow.com/questions/40142324/how-to-convert-an-array-of-character-codes-to-string-in-javascript
    
        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
    
        var str = String.fromCharCode.apply(null,sread);
        console.log( "[L126] " + str );
        }
    

    end EDIT



    Here is a similar issue (Ctrl+C error) and explanation with setInterval():

    http://forum.espruino.com/conversations/321778/

About

Avatar for Robin @Robin started