• This tutorial was triggered by the forum post about code not running after save() and power cycle and related response, which states:

    It's often not practical to make code that works both after direct upload and after save() and restart

    Conclusion and recommendation: ...indeed... therefore, always choose the format that works for/after save()... to be on the safe side.

    But this is a bit cumbersome while developing, because you need to save the uploaded code every time and do a power-cycle - un-plug and re-plug - to get the code started. To get around this and speed up development, use this stream lined development process.

    • 1. Use function onInit() { ... } rather than E.on('init', function(){ ... });, and start your code after uploading by entering onInit() in the console / left hand pane of the Espruino Web IDE.

    Having to enter onInit() in the console every time after upload of the code to start it is still somewhat cumbersome, therefore

      1. Add - for development time - setTimeout(onInit,500); as last line in your code, which makes your overall code structure look like this:

        // ... your application code
        // ...
        // ...
        
        // initialization / start-up code
        function onInit() {
        // ...
        }
        
        // convenience line for dev phase; REMOVE for final save() and normal runtime
        setTimeout(onInit,500);
        

    This last line starts your code automatically after upload has completed in the same way as later on a power cycle will restart it on normal runtime after power cycle / reset. The timeout is added to allow - on the Espruino side - the upload process to complete and do so decoupled from your code start / execution.

    • 3. REMOVE this last line setTimeout(onInit,500); when entering the final development phase where you test save() and power-cycling.

    Bonus for using setTimeout(onInit, ...:

    You can pass development time parameters

    setTimeout(onInit, 500, true, "otherRuntimeParm_mode"); // enable debug, etc.
    

    that overwrite runtime parameters - for example for debugging w/ console output while developing - which automatically go away for the normal runtime. Your overall code may then look something like this complete code template good for code running after both direct upload AND save() :

    Code Template for development AND runtime:

    var dbg = false; // ***d***e***b***u***g*** of for normal runtime
    var mode = "normal"; // other runtime parameter
    // ...
    
    // your app code using global ```dbg``` and ```mode``` runtime vars to
    // control debug/normal runtime behavior, for ex. console output, etc.
    // ...
       if (dbg) console.log("....");
    // ...
    
    // initialization / start-up code
    function onInit(dbgParm, otherParm_mode, ...) {
    
      // accepting / overwriting operation parms while under development
      dbg = dbgParm;
      mode = (mode === undefined) ? mode : otherParm_mode;
    
      // other initialization / startup code
      // ...
    }
    
    // convenience line for dev phase; REMOVE for final save() and normal runtime
    setTimeout(onInit, 500, true, "otherRuntimeParm_mode"); // enable debug, etc.
    
  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

How to have ONE codebase that works after both direct upload and save() with power cycle (run in no-save AND save mode)

Posted by Avatar for allObjects @allObjects

Actions