boot.py versus main.py
-
-
@robert-hh - thanks for the clarification, I hadn’t noticed
machine.main(). While it’s nice that you can choose to execute a different file, that doesn’t really address the question of why I’d split my app into two separate files to begin with. Are there operations that can only be performed inboot.py? Operations that can’t be performed there? Does something special happen between execution ofboot.pyandmain.py?Many thanks,
Tim -
@tshead Boot.py and main.py are executed in exactly the same context one after the other. So you can put your code into either one. To be more detailed, there are four scripts which are potentially run on boot:
- _boot.py which has to reside in flash
- boot.py which must be in the file system
- _main.py which is expected inside the flash
- main.py (or other) which again must be in the file system.
Steps 2. -4. are skipped during safeboot. step 4 is only executed in the so called PYEXEC_MODE_FRIENDLY_REPL, which is the normal REPL mode after boot. 3. was added to allow people to put their main.py into the flash memory.
-
@robert-hh said in boot.py versus main.py:
- main.py (or other) which again must be in the file system.
Would it be clearer to say:
- main.py (or other) which is expected in the file system
As I understand it, technically you don't need a main.py at all. If the function is small and self-contained the entirety of the code could be placed into boot.py. For example, a simple task that wakes, reads a sensor, reports the value, goes back to sleep and then repeats forever doesn't really need a main.py
Or have I missed something?
-
@john-baird You do not need it, but an attempt will be made to run it, if eventually boot.py finishes. If it not exists, an error is raised. But main.py just have to exist as a file. It can be empty.
-
@tshead One of the reasons to separate boot and main is in the case of OTA upgrades. In my application, I have a function (in main.py) that downloads and stages an application upgrade, including a new boot.py, then resets the device. Boot.py sees the upgrade has been staged and installs it, including a new main.py, then resets the device again. Doing it in two stages like this allows updating the code in both boot.py and main.py while the device is running and not worrying about side effects of replacing code that is currently executing.
-
-
@robert-hh For one of our main uses, the last line of boot.py is
deepsleepso technically boot.py never exits, but I hear what you are saying. -
@reidfo We haven't gotten to the stage of OTA upgrades, so I hadn't thought about it that way. Thanks for the great tip!
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login