micropython/shared
Damien George 69c25ea865 shared/runtime/pyexec: Make a raised SystemExit always do a forced exit.
The current situation with SystemExit and soft reset is the following:
- `sys.exit()` follows CPython and just raises `SystemExit`.
- On the unix port, raising `SystemExit` quits the application/MicroPython,
  whether at the REPL or in code (this follows CPython behaviour).
- On bare-metal ports, raising `SystemExit` at the REPL does nothing,
  raising it in code will stop the code and drop into the REPL.
- `machine.soft_reset()` raises `SystemExit` but with a special flag set,
  and bare-metal targets check this flag when it propagates to the
  top-level and do a soft reset when they receive it.

The original idea here was that a bare-metal target can't "quit" like the
unix port can, and so dropping to the REPL was considered the same as
"quit".  But this bare-metal behaviour is arguably inconsistent with unix,
and "quit" should mean terminate everything, including REPL access.

This commit changes the behaviour to the following, which is more
consistent:
- Raising `SystemExit` on a bare-metal port will do a soft reset (unless
  the exception is caught by the application).
- `machine.soft_reset()` is now equivalent to `sys.exit()`.
- unix port behaviour remains unchanged.

Tested running the test suite on an stm32 board and everything still
passes, in particular tests that skip by raising `SystemExit` still
correctly skip.

Signed-off-by: Damien George <damien@micropython.org>
2024-07-20 12:13:14 +10:00
..
libc all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
memzip py/mkrules.mk: Add rule for compiling auto-generated source files. 2023-11-03 13:57:47 +11:00
netutils extmod/network_ninaw10: Implement the ipconfig methods for ninaw10. 2024-06-04 12:45:01 +10:00
readline all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
runtime shared/runtime/pyexec: Make a raised SystemExit always do a forced exit. 2024-07-20 12:13:14 +10:00
timeutils all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
tinyusb shared/tinyusb/mp_usbd_cdc: Skip writing to an uninitialized USB device. 2024-07-20 00:27:58 +10:00
upytesthelper py/modsys: Allow sys.path to be assigned to. 2023-06-08 17:54:24 +10:00
README.md lib,shared: Update README's based on contents of these dirs. 2021-07-13 00:17:02 +10:00

This directory contains libraries, utilities and helper code developed specifically for this project. The code is intended to be portable and usable by any port.