8000 Introduce the supervisor concept to facilitate porting. · adafruit/circuitpython@9d7a7b0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9d7a7b0

Browse files
committed
Introduce the supervisor concept to facilitate porting.
The supervisor is the code which runs individual MicroPython VMs. By splitting it out we make it more consistent and easier to find. This also adds very basic SAMD21 and SAMD51 support using the supervisor. Only the REPL currently works. This begins the work for #178.
1 parent 3ebc5d2 commit 9d7a7b0
  • metro_m4_express
  • trinket_m0
  • common-hal
  • supervisor
  • docs
  • supervisor
  • tools
  • Some content is hidden

    Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

    112 files changed

    +4490
    -4569
    lines changed

    README.md

    Lines changed: 3 additions & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -166,6 +166,8 @@ CircuitPython:
    166166
    corresponding module.
    167167
    * `shared-module` Shared implementation of Python modules that may be
    168168
    based on `common-hal`.
    169+
    * `supervisor` Code and headers related to the supervisor which monitors and
    170+
    runs individual MicroPython virtual machines (from code in `py`).
    169171
    * `tests` Test framework and test scripts.
    170172
    * `tools` Various tools, including the pyboard.py module.
    171173

    @@ -210,4 +212,4 @@ rest are here to maintain compatibility with the
    210212
    [Adafruit Feather M0 Adalogger]: https://www.adafruit.com/product/2796
    211213
    [Arduino Zero]: https://www.arduino.cc/en/Main/ArduinoBoardZero
    212214
    [MicroPython]: https://github.com/micropython/micropython
    213-
    [Code of Conduct]: https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md
    215+
    [Code of Conduct]: https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md

    atmel-samd/Makefile

    Lines changed: 123 additions & 145 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,6 +1,6 @@
    11
    # Select the board to build for: if not given on the command line,
    22
    # then default to PYBV10.
    3-
    BOARD ?= arduino_zero
    3+
    BOARD ?= metro_m0_express
    44
    ifeq ($(wildcard boards/$(BOARD)/.),)
    55
    $(error Invalid BOARD specified)
    66
    endif
    @@ -14,76 +14,44 @@ include ../py/mkenv.mk
    1414
    include boards/$(BOARD)/mpconfigboard.mk
    1515

    1616
    # qstr definitions (must come before including py.mk)
    17-
    # TODO(tannewt): Support friendly pin names like the stmhal implementations do.
    18-
    # Add $(BUILD)/pins_qstr.h $(BUILD)/modstm_qstr.h
    1917
    QSTR_DEFS = qstrdefsport.h
    2018

    2119
    # include py core make definitions
    2220
    include $(TOP)/py/py.mk
    2321

    22+
    include $(TOP)/supervisor/supervisor.mk
    23+
    2424
    CROSS_COMPILE = arm-none-eabi-
    2525

    2626
    BOSSAC := tools/bossac_osx
    2727

    2828
    HAL_DIR=hal/$(MCU_SERIES)
    2929

    30-
    INC += -I.
    31-
    INC += -I$(TOP)
    32-
    INC += -I$(TOP)/lib/mp-readline
    33-
    INC += -I$(TOP)/lib/timeutils
    34-
    INC += -Iasf_conf/
    35-
    INC += -Iasf/common/boards/
    36-
    INC += -Iasf/common/services/sleepmgr/
    37-
    INC += -Iasf/common/services/storage/ctrl_access/
    38-
    INC += -Iasf/common/services/usb/
    39-
    INC += -Iasf/common/services/usb/class/cdc/
    40-
    INC += -Iasf/common/services/usb/class/cdc/device/
    41-
    INC += -Iasf/common/services/usb/class/hid/
    42-
    INC += -Iasf/common/services/usb/class/hid/device/
    43-
    INC += -Iasf/common/services/usb/class/hid/device/kbd/
    44-
    INC += -Iasf/common/services/usb/class/hid/device/mouse/
    45-
    INC += -Iasf/common/services/usb/class/msc/
    46-
    INC += -Iasf/common/services/usb/class/msc/device/
    47-
    INC += -Iasf/common/services/usb/udc/
    48-
    INC += -Iasf/common/utils
    49-
    INC += -Iasf/common2/services/delay/
    50-
    INC += $(addprefix -Iasf/sam0/,\
    51-
    drivers/events \
    52-
    drivers/extint \
    53-
    drivers/port \
    54-
    drivers/system \
    55-
    drivers/adc/adc_sam_d_r \
    56-
    drivers/dac \
    57-
    drivers/dac/dac_sam_d_c \
    58-
    drivers/sercom \
    59-
    drivers/sercom/i2c \
    60-
    drivers/system/clock \
    61-
    drivers/system/clock/clock_samd21_r21_da \
    62-
    drivers/system/interrupt \
    63-
    drivers/system/interrupt/system_interrupt_samd21 \
    64-
    drivers/system/pinmux \
    65-
    drivers/system/power/power_sam_d_r \
    66-
    drivers/system/reset/reset_sam_d_r \
    67-
    drivers/tc \
    68-
    drivers/usb \
    69-
    utils \
    70-
    utils/cmsis/samd21/include \
    71-
    utils/cmsis/samd21/source \
    72-
    utils/header_files \
    73-
    utils/preprocessor \
    74-
    )
    75-
    INC += -Iasf/thirdparty/CMSIS/Include
    76-
    INC += -Iboards
    77-
    INC += -Iboards/$(BOARD)/
    78-
    INC += -Ifreetouch/
    79-
    INC += -I$(BUILD)
    80-
    81-
    CFLAGS_CORTEX_M0 = \
    82-
    -mthumb \
    83-
    -mabi=aapcs-linux \
    84-
    -mcpu=cortex-m0plus \
    85-
    -msoft-float \
    86-
    -mfloat-abi=soft \
    30+
    INC += -I. \
    31+
    -I.. \
    32+
    -I../lib/mp-readline \
    33+
    -I../lib/timeutils \
    34+
    -Iasf4/$(CHIP_FAMILY) \
    35+
    -Iasf4/$(CHIP_FAMILY)/hal/include \
    36+
    -Iasf4/$(CHIP_FAMILY)/hal/utils/include \
    37+
    -Iasf4/$(CHIP_FAMILY)/hri \
    38+
    -Iasf4/$(CHIP_FAMILY)/hpl/core \
    39+
    -Iasf4/$(CHIP_FAMILY)/hpl/pm \
    40+
    -Iasf4/$(CHIP_FAMILY)/hpl/port \
    41+
    -Iasf4/$(CHIP_FAMILY)/hpl/tc \
    42+
    -Iasf4/$(CHIP_FAMILY)/include \
    43+
    -Iasf4/$(CHIP_FAMILY)/CMSIS/Include \
    44+
    -Iasf4/$(CHIP_FAMILY)/usb \
    45+
    -Iasf4/$(CHIP_FAMILY)/usb/class/cdc \
    46+
    -Iasf4/$(CHIP_FAMILY)/usb/class/hid \
    47+
    -Iasf4/$(CHIP_FAMILY)/usb/device \
    48+
    -Iasf4_conf/$(CHIP_FAMILY) \
    49+
    -Iboards/$(BOARD) \
    50+
    -Iboards/ \
    51+
    -Ifreetouch \
    52+
    -I$(BUILD)
    53+
    54+
    BASE_CFLAGS = \
    8755
    -fsingle-precision-constant \
    8856
    -fno-strict-aliasing \
    8957
    -Wdouble-promotion \
    @@ -102,42 +70,49 @@ CFLAGS_CORTEX_M0 = \
    10270
    -Wnested-externs \
    10371
    -Wunreachable-code \
    10472
    -Wcast-align \
    73+
    -Wno-error=lto-type-mismatch \
    10574
    -D__$(CHIP_VARIANT)__ \
    106-
    -DUSB_DEVICE_PRODUCT_ID=$(USB_PID) \
    107-
    -DUSB_DEVICE_VENDOR_ID=$(USB_VID) \
    108-
    -DBOARD=USER_BOARD \
    75+
    -DCONF_USB_COMPOSITE_IDPRODUCT=$(USB_PID) \
    76+
    -DCONF_USB_COMPOSITE_IDVENDER=$(USB_VID) \
    10977
    -ffunction-sections \
    11078
    -fdata-sections \
    11179
    -fshort-enums \
    112-
    -D ARM_MATH_CM0PLUS=true \
    113-
    -DSYSTICK_MODE \
    114-
    -DEXTINT_CALLBACK_MODE=true \
    115-
    -DUDD_ENABLE \
    116-
    -DUSART_CALLBACK_MODE=false \
    117-
    -DSPI_CALLBACK_MODE=false \
    118-
    -DI2C_MASTER_CALLBACK_MODE=false \
    119-
    -DDAC_CALLBACK_MODE=false \
    120-
    -DTCC_ASYNC=false \
    121-
    -DADC_CALLBACK_MODE=false \
    122-
    -DEVENTS_INTERRUPT_HOOKS_MODE=false \
    123-
    -DI2S_CALLBACK_MODE=false \
    124-
    -DTC_ASYNC=true \
    125-
    -DUSB_DEVICE_LPM_SUPPORT \
    126-
    -DCIRCUITPY_CANARY_WORD=0xADAF00 \
    127-
    -DCIRCUITPY_SAFE_RESTART_WORD=0xDEADBEEF \
    12880
    --param max-inline-insns-single=500
    129-
    CFLAGS = $(INC) -Wall -Werror -std=gnu11 -nostdlib $(CFLAGS_CORTEX_M0) $(CFLAGS_MOD) $(COPT)
    13081

    13182
    #Debugging/Optimization
    13283
    ifeq ($(DEBUG), 1)
    13384
    # NDEBUG disables assert() statements. This reduces code size pretty dramatically, per tannewt.
    13485
    # Turn on Python modules useful for debugging (e.g. uheap, ustack).
    135-
    # -DMICROPY_DEBUG_MODULES may also be added to an -flto build, if you wish.
    136-
    CFLAGS += -Os -ggdb -DNDEBUG -DENABLE_MICRO_TRACE_BUFFER -DMICROPY_DEBUG_MODULES
    86+
    CFLAGS = -O1 -ggdb -DNDEBUG
    87+
    ifeq ($(CHIP_FAMILY), samd21)
    88+
    CFLAGS += -DENABLE_MICRO_TRACE_BUFFER
    89+
    endif
    13790
    else
    13891
    # -finline-limit can shrink the image size. -finline-limit=80 or so is similar to not having it on.
    13992
    # There is no simple default value, though.
    140-
    CFLAGS += -Os -DNDEBUG -flto -finline-limit=49
    93+
    CFLAGS = -Os -DNDEBUG -flto -finline-limit=49
    94+
    endif
    95+
    96+
    CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT)
    97+
    98+
    ifeq ($(CHIP_FAMILY), samd21)
    99+
    CFLAGS += \
    100+
    -mthumb \
    101+
    -mabi=aapcs-linux \
    102+
    -mcpu=cortex-m0plus \
    103+
    -msoft-float \
    104+
    -mfloat-abi=soft \
    105+
    -DSAMD21
    106+
    endif
    107+
    ifeq ($(CHIP_FAMILY), samd51)
    108+
    CFLAGS += \
    109+
    -mthumb \
    110+
    -mabi=aapcs-linux \
    111+
    -mlong-calls \
    112+
    -mcpu=cortex-m4 \
    113+
    -mfloat-abi=softfp \
    114+
    -mfpu=fpv4-sp-d16 \
    115+
    -DSAMD51
    141116
    endif
    142117

    143118
    ifneq ($(FROZEN_DIR),)
    @@ -158,69 +133,71 @@ CFLAGS += -Wno-error=lto-type-mismatch
    158133
    endif
    159134

    160135
    #LIBM_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
    161-
    LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/ -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
    162-
    LIBS = -larm_cortexM0l_math -lm -lgcc -lc
    163-
    164-
    SRC_ASF = $(addprefix asf/sam0/,\
    165-
    drivers/adc/adc_sam_d_r/adc.c \
    166-
    drivers/dac/dac_sam_d_c/dac.c \
    167-
    drivers/dma/dma.c \
    168-
    drivers/events/events_sam_d_r/events.c \
    169-
    drivers/extint/extint_callback.c \
    170-
    drivers/extint/extint_sam_d_r/extint.c \
    171-
    drivers/i2s/i2s.c \
    172-
    drivers/nvm/nvm.c \
    173-
    drivers/port/port.c \
    174-
    drivers/sercom/i2c/i2c_sam0/i2c_master.c \
    175-
    drivers/sercom/sercom.c \
    176-
    drivers/sercom/sercom_interrupt.c \
    177-
    drivers/sercom/spi/spi.c \
    178-
    drivers/sercom/usart/usart.c \
    179-
    drivers/system/clock/clock_samd21_r21_da/clock.c \
    180-
    drivers/system/clock/clock_samd21_r21_da/gclk.c \
    181-
    drivers/system/interrupt/system_interrupt.c \
    182-
    drivers/system/pinmux/pinmux.c \
    183-
    drivers/system/system.c \
    184-
    drivers/tc/tc_interrupt.c \
    185-
    drivers/tc/tc_sam_d_r/tc.c \
    186-
    drivers/tcc/tcc.c \
    187-
    drivers/usb/stack_interface/usb_device_udd.c \
    188-
    drivers/usb/stack_interface/usb_dual.c \
    189-
    drivers/usb/usb_sam_d_r/usb.c \
    190-
    )
    136+
    LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
    137+
    LIBS := -lgcc -lc
    138+
    139+
    140+
    ifeq ($(CHIP_FAMILY), samd21)
    141+
    LDFLAGS += -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/
    142+
    LIBS := -lm $(LIBS) # -larm_cortexM0l_math
    143+
    else ifeq ($(CHIP_FAMILY), samd51)
    144+
    LDFLAGS += -mthumb -mcpu=cortex-m4
    145+
    LIBS := -lm $(LIBS)
    146+
    endif
    147+
    148+
    SRC_ASF := \
    149+
    gcc/gcc/startup_$(CHIP_FAMILY).c \
    150+
    gcc/system_$(CHIP_FAMILY).c \
    151+
    hal/src/hal_atomic.c \
    152+
    hal/src/hal_delay.c \
    153+
    hal/src/hal_sleep.c \
    154+
    hal/src/hal_timer.c \
    155+
    hal/src/hal_usb_device.c \
    156+
    hpl/core/hpl_init.c \
    157+
    hpl/gclk/hpl_gclk.c \
    158+
    hpl/pm/hpl_pm.c \
    159+
    hpl/rtc/hpl_rtc.c \
    160+
    hpl/systick/hpl_systick.c \
    161+
    hpl/tc/hpl_tc.c \
    162+
    hpl/usb/hpl_usb.c \
    163+
    usb/class/cdc/device/cdcdf_acm.c \
    164+
    usb/device/usbdc.c \
    165+
    usb/usb_protocol.c \
    166+
    hal/utils/src/utils_list.c \
    167+
    168+
    ifeq ($(CHIP_FAMILY), samd21)
    169+
    SRC_ASF += \
    170+
    hpl/core/hpl_core_m0plus_base.c \
    171+
    hpl/sysctrl/hpl_sysctrl.c \
    172+
    173+
    else ifeq ($(CHIP_FAMILY), samd51)
    174+
    SRC_ASF += \
    175+
    hpl/core/hpl_core_m4.c \
    176+
    hpl/mclk/hpl_mclk.c \
    177+
    hpl/osc32kctrl/hpl_osc32kctrl.c \
    178+
    hpl/oscctrl/hpl_oscctrl.c \
    179+
    180+
    endif
    181+
    182+
    SRC_ASF := $(addprefix asf4/$(CHIP_FAMILY)/, $(SRC_ASF))
    183+
    184+
    # Skip this source for now.
    185+
    # access_vfs.c \
    186+
    shared_dma.c \
    187+
    $(FLASH_IMPL) \
    191188
    192189
    SRC_C = \
    193-
    access_vfs.c \
    194-
    autoreload.c \
    195190
    background.c \
    196191
    fatfs_port.c \
    197192
    flash_api.c \
    198-
    main.c \
    199193
    mphalport.c \
    200194
    reset.c \
    201-
    samd21_pins.c \
    202-
    shared_dma.c \
    203-
    rgb_led_status.c \
    195+
    $(CHIP_FAMILY)_pins.c \
    204196
    tick.c \
    205-
    $(FLASH_IMPL) \
    197+
    usb.c \
    206198
    bindings/samd/__init__.c \
    207-
    asf/common/services/sleepmgr/samd/sleepmgr.c \
    208-
    asf/common/services/storage/ctrl_access/ctrl_access.c \
    209-
    asf/common/services/usb/class/cdc/device/udi_cdc.c \
    210-
    asf/common/services/usb/class/composite/device/udi_composite_desc.c \
    211-
    asf/common/services/usb/class/hid/device/udi_hid.c \
    212-
    asf/common/services/usb/class/hid/device/mouse/udi_hid_mouse.c \
    213-
    asf/common/services/usb/class/hid/device/kbd/udi_hid_kbd.c \
    214-
    asf/common/services/usb/class/msc/device/udi_msc.c \
    215-
    asf/common/services/usb/udc/udc.c \
    216-
    asf/common/utils/interrupt/interrupt_sam_nvic.c \
    217-
    asf/common2/services/delay/sam0/systick_counter.c \
    218-
    asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c \
    219-
    asf/sam0/utils/cmsis/samd21/source/system_samd21.c \
    220-
    asf/sam0/utils/syscalls/gcc/syscalls.c \
    221199
    boards/$(BOARD)/board.c \
    222200
    boards/$(BOARD)/pins.c \
    223-
    freetouch/adafruit_ptc.c \
    224201
    lib/oofatfs/ff.c \
    225202
    lib/oofatfs/option/ccsbcs.c \
    226203
    lib/timeutils/timeutils.c \
    @@ -231,26 +208,27 @@ SRC_C = \
    231208
    lib/utils/stdout_helpers.c \
    232209
    lib/utils/sys_stdio_mphal.c \
    233210
    lib/libc/string0.c \
    234-
    lib/mp-readline/readline.c
    211+
    lib/mp-readline/readline.c \
    212+
    # freetouch/adafruit_ptc.c \
    235213
    236214
    SRC_COMMON_HAL = \
    237-
    analogio/__init__.c \
    215+
    board/__init__.c \
    216+
    microcontroller/__init__.c \
    217+
    microcontroller/Pin.c \
    218+
    microcontroller/Processor.c \
    219+
    digitalio/__init__.c \
    220+
    digitalio/DigitalInOut.c
    221+
    # analogio/__init__.c \
    238222
    analogio/AnalogIn.c \
    239223
    analogio/AnalogOut.c \
    240224
    audiobusio/__init__.c \
    241225
    audiobusio/PDMIn.c \
    242226
    audioio/__init__.c \
    243227
    audioio/AudioOut.c \
    244-
    board/__init__.c \
    245228
    busio/__init__.c \
    246229
    busio/I2C.c \
    247230
    busio/SPI.c \
    248231
    busio/UART.c \
    249-
    digitalio/__init__.c \
    250-
    digitalio/DigitalInOut.c \
    251-
    microcontroller/__init__.c \
    252-
    microcontroller/Pin.c \
    253-
    microcontroller/Processor.c \
    254232
    neopixel_write/__init__.c \
    255233
    nvm/__init__.c \
    256234
    nvm/ByteArray.c \
    @@ -293,12 +271,12 @@ SRC_SHARED_MODULE = \
    293271
    SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE)) \
    294272
    $(addprefix shared-module/, $(SRC_SHARED_MODULE))
    295273

    296-
    OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
    274+
    OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
    297275
    OBJ += $(addprefix $(BUILD)/, $(SRC_ASF:.c=.o))
    298276
    OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
    299277
    OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
    300278

    301-
    SRC_QSTR += $(SRC_C) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
    279+
    SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
    302280

    303281
    all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
    304282

    atmel-samd/access_vfs.c

    Lines changed: 0 additions & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -29,7 +29,6 @@
    2929
    #include "access_vfs.h"
    3030
    #include "autoreload.h"
    3131

    32-
    #include "asf/common/services/usb/class/msc/device/udi_msc.h"
    3332
    #include "extmod/vfs.h"
    3433
    #include "extmod/vfs_fat.h"
    3534
    #include "lib/oofatfs/ff.h"

    atmel-samd/access_vfs.h

    Lines changed: 0 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -30,8 +30,6 @@
    3030
    #ifndef MICROPY_INCLUDED_ATMEL_SAMD_ROM_FS_H
    3131
    #define MICROPY_INCLUDED_ATMEL_SAMD_ROM_FS_H
    3232

    33-
    #include "asf/common/services/storage/ctrl_access/ctrl_access.h"
    34-
    3533
    Ctrl_status vfs_test_unit_ready(void);
    3634
    Ctrl_status vfs_read_capacity(uint32_t *u32_nb_sector);
    3735
    bool vfs_wr_protect(void);

    0 commit comments

    Comments
     (0)
    0