New features for improved memory usage #139
Replies: 29 comments
-
Posted at 2016-11-24 by Spocki Small change, big impact. Thanks ;-) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-14 by AntiCat Great feature, I think you should be promoting it more. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-14 by AntiCat Does this feature disable minify of editor code? |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-14 by @allObjects Nope, uploading modules and uploading your code in the editor are independent things. The upload of the code goes through the code and finds all your |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-14 by AntiCat Thank you for your explanation. I'm not sure if I expressed my question correctly. If I enable
|
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-15 by @allObjects In the IDE's Settings - Minification - with the first option Minification you specify how your code should be uploaded: as is in the editor - with all comments and white and other spaces - or minified. Minified has multiple options from little minification and little space saving but still very readable code 'down' to maximum minification with maximum space saving and little resemblance with original code. Check it out. The next minification option is for how modules should be handled. Again, your code and (your) modules can have their own, independent special treatment... ;-) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-16 by hungryforcodes Weirdly I tried this on an ESP8266 -- and first the uploaded code was the same size as the IDE code (suggesting it hadn't been minified -- as its usually much smaller by almost 1/3), and then at one point during the upload the board just freaked out with an out of memory error and then a continuous stream of "Execution Interrupted", until the upload failed due to the "Prompt not detected error...". Under communications I had selected upload modules as functions, and then after "Save On Send" was set to "Yes". And under Minification I have both modules and regular code set to simple optimizations using Closure. The board was flashed with a standard v92, using the last official release. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-16 by @allObjects Prompt not detected may come from a different issue: When you have code that is executing your application on upload vs. having an Some related background - like 2 cents - to upload: Upload by the IDE is nothing else than a) disable echo in console, b) auto/programmatic entering of code in prompt 'line by line' and 'completed JS expression. If prompt is not 'coming back' / detected by IDE within reasonable time, IDE complains as experienced. Therefore, it is best to not start any application code in 'Level 0 (zero)', and put the start into For additional details see this conversation simple explanation how to save code that espruino run on start?. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-16 by hungryforcodes Yes, I use onInit. However my point was more that the code loads and works fine though if I disable Save On Send. If I enable it it runs out of memory on upload. To me it looks like the code is not getting minified when Save On Send is set. Anyways no big deal I'll just disable it as I always have. I was just curious to try this feature. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-16 by AntiCat I verified all options and tried once with Attachments: |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-17 by hungryforcodes I guess another way to put this is -- have I and @AnticaT misunderstood this feature -- or is there really a bug? :) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-22 by @gfwilliams It looks like there is an issue, yes. The minification happened after the 'save on send' transformation (by which time the code was all a string). Thanks for spotting it. I've now fixed it, so if you're running the IDE straight from GitHub you'll see a difference, otherwise you'll have to wait for the next update I'm afraid. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-22 by Wilberforce Is there any version numbers in the ide - can you tell what version you have installed? How do you run from github? |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-22 by @gfwilliams There's no obvious way of finding the version number I'm afraid. Instructions for installing are on GitHub - it's pretty straightforward: https://github.com/espruino/EspruinoWebIDE#installing-from-github-latest-version |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-22 by hungryforcodes So I built the IDE successfully -- and now it minimizes! Great! However in the end it seems to complain about not having a connection to the internet?
I did this a few times and always the same result. Tried both options in Save On Send (including the execute after reset()). Not sure if anyone else has had this problem. Disabling "Save On Send" acts as normal and my code runs. I had to reflash my board after, btw. Not sure why, resetting with rst cause 4, after a normal upload. Then it would boot normally with my code, but was weird, so I just reflashed it. These flash chips are notoriously unreliable, so I'll look into that. Also, is the font smaller on the new version? |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-23 by @gfwilliams After disabling 'save on send' you probably want to run There errors you're having will be coming from your code - so you'd need to post up an example of what you're doing on the ESP8266 forums. My guess is you might be executing some code in the global scope (eg. not in onInit or a timeout) that expects an internet connection. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-23 by hungryforcodes Well the font is smaller for sure :P OK thanks for that tip about E.setBootCode(""), I'll add it to my Espruino cook book :P I'll have a look, its an IR controlled WS2812 light (using the "IRReceiver" module), but that code doesn't do much internet wise except run Wifi.stopAP() at the beginning, and elsewhere Wifi.startAP(), so I can telnet in and modify it. But why would the code run fine if "Save On Send" is disabled? Maybe I'm not understanding some subtleties about the feature. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-23 by @gfwilliams Without Save on send, your code is sent over and executed straight away. With it on, your code is sent and stored as text. So if you accessed the net, chances are at upload time you'd have an internet connection, but when the board restarted right away you wouldn't. All I can think is there was some issue loading the modules and the ESP8266 build has some code added that searches online for modules? Could you look in the Web IDE's console and post up the exact code that gets uploaded (ideally for a minimal bit of code that exhibits the problem). |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-25 by hungryforcodes Thanks for this explanation -- it was VERY helpful :) So I basically managed to reduce my entire code to:
and it was still the same error. Your suggestion of looking at the logs was good and I may have found the problem. Basically it appears at one point to look for an ESP8266_4MB.json at the http://www.espruino.com/json/ ,but there isn't one there, as it would appear that its not been updated (ie: there's a board in GitHub for this board, but not in the /json directory online). Could this be it? I can't get my code much smaller than one console log :P And yes I did reflash the board each time before I did this, to make sure I started from virgin state on the board.
If this is true though it raises another issue. The IDE will freak out with ANY custom board that you make (I have a couple with different JSVars and stuff). Can I put these in a local directory, and where would be the best place? Thanks again :) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-25 by hungryforcodes So I guess thats not it, as I made a copy of an ESP8266_4MB.json (based on ESP8266_BOARD.json in espruino.com/json) and put it on one of my servers, and the IDE found it fine and same error occured. I also reflashed my chips to stock V92 (non 4MB version), in the hopes that would change something, but this didn't work either. So a bit mysterious. Another ideas of what I could test? Has anyone else tried this feature on an ESP8266, and what has been the result? Thanks again :) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-26 by @gfwilliams I have no idea what's up, but it'd appear not to be a Web IDE problem - can you ask on the ESP8266 section of the forum and see if there are any ideas there? |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-05-27 by hungryforcodes OK, I'll bug the gang on that section when I have a few more cycles available :) |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-06-08 by LeoWang I had same error message "Not connected to the internet" while trying this feature on my esp8266. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-06-08 by @gfwilliams Please ask on the ESP8266 section of the forum. That's what it's for. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-07-26 by Polypod Very nice feature, many thanks, the memory saving is huge. Now, how much memory per bytes of code do we need ? My esp8622 says out of memory above 10000 bytes of code. The discussion on the problem running this feature on ESP8266 is solved here : http://forum.espruino.com/conversations/307523/ |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-07-27 by @gfwilliams It's worth noting that since this post there's also 1v93, with While it can't be used with code stored in flash, for the functions stored in RAM it'll make a really big difference |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-08-20 by Polypod Is there a way to use this feature and send modules "as functions" to flash one by one instead of all at once ? The reason I ask is because I get an "out of memory" when sending more than 10k of cumulated modules this way, which is appreciably more than before this feature. When I set "upload as function" and "save on send", in the console I see all modules are sent at once in one line of "setBootCode(code)". Is it possible to call setBootCode multiple times without erasing previous code saved in flash? I already found how to do something similar on esp822 using Flash module and setMemoryArea() in the other available flash areas (see this post :http://forum.espruino.com/conversations/290975/), but not in the area used by setBootCode. That would be useful for the other boards without additional flash memory. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-08-21 by @gfwilliams So this is for ESP8266? On ESP8266 512k builds you only have 12KB flash memory anyway, so it wouldn't gain you a lot! You can always just write a bunch of data somewhere else in flash and then just save some bootloader code like At the moment there isn't anything, but you could potentially write to the saved memory area yourself. It's only a two uint32s with 2 lengths in, then the data, then a 'magic byte' at the end: Potentially |
Beta Was this translation helpful? Give feedback.
-
Posted at 2017-08-22 by Polypod Thanks gordon for the clarification. Yes, I use an ESP8266, I didn't realize it was so little available there. And thanks for the pointer, i will look into reading/writing myself in these areas. |
Beta Was this translation helpful? Give feedback.
-
Posted at 2016-11-24 by @gfwilliams
Just a quick note to say that the most recent builds of Espruino (so not 1v89, but version 1v90 when it's released) contain an improvement that'll really help with the amount of memory available.
Settings -> communications
and setModules uploaded as functions
andSave on send
So what happens? Well, the Web IDE used to upload your modules as strings, which would then be decoded and executed by Espruino. It now uploads them as a function.
It means:
save on send
), the text of any functions that you define will actually stay stored in flash and won't use your RAMBeta Was this translation helpful? Give feedback.
All reactions