circuitpython/ports/qemu-arm
Jim Mussared 710426024a all: Factor gchelper code to one place and use it for unix & ARM ports.
No functionality change is intended with this commit, it just consolidates
the separate implementations of GC helper code to the lib/utils/ directory
as a general set of helper functions useful for any port.  This reduces
duplication of code, and makes it easier for future ports or embedders to
get the GC implementation correct.

Ports should now link against gchelper_native.c and either gchelper_m0.s or
gchelper_m3.s (currently only Cortex-M is supported but other architectures
can follow), or use the fallback gchelper_generic.c which will work on
x86/x64/ARM.

The gc_helper_get_sp function from gchelper_m3.s is not really GC related
and was only used by cc3200, so it has been moved to that port and renamed
to cortex_m3_get_sp.
2020-04-29 23:45:19 +10:00
..
test-frzmpy all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
main.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
Makefile all: Factor gchelper code to one place and use it for unix & ARM ports. 2020-04-29 23:45:19 +10:00
Makefile.test qemu-arm: Let tinytest.o be built by standard build rules. 2019-12-17 13:32:07 +11:00
modmachine.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
moduos.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
mpconfigport.h all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
mphalport.h qemu-arm: Rework to run bare-metal on boards with Cortex-M CPUs. 2019-02-12 13:50:01 +11:00
mps2.ld qemu-arm: Rework to run bare-metal on boards with Cortex-M CPUs. 2019-02-12 13:50:01 +11:00
nrf51.ld qemu-arm: Rework to run bare-metal on boards with Cortex-M CPUs. 2019-02-12 13:50:01 +11:00
qstrdefsport.h all: Add *FORMAT-OFF* in various places. 2020-02-28 10:31:07 +11:00
README.md ports/qemu-arm: Rework "test" target using upytesthelper. 2017-12-13 09:07:51 +02:00
startup.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
stm32.ld qemu-arm: Rework to run bare-metal on boards with Cortex-M CPUs. 2019-02-12 13:50:01 +11:00
test_main.c all: Factor gchelper code to one place and use it for unix & ARM ports. 2020-04-29 23:45:19 +10:00
uart.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
uart.h qemu-arm: Rework to run bare-metal on boards with Cortex-M CPUs. 2019-02-12 13:50:01 +11:00

This is experimental, community-supported port for Cortex-M emulation as provided by QEMU (http://qemu.org).

The purposes of this port are to enable:

  1. Continuous integration
    • run tests against architecture-specific parts of code base
  2. Experimentation
    • simulation & prototyping of anything that has architecture-specific code
    • exploring instruction set in terms of optimising some part of MicroPython or a module
  3. Streamlined debugging
    • no need for JTAG or even an MCU chip itself
    • no need to use OpenOCD or anything else that might slow down the process in terms of plugging things together, pressing buttons, etc.

This port will only work with with GCC ARM Embedded toolchain and not with CodeSourcery toolchain. You will need to modify LDFLAGS if you want to use CodeSourcery's version of arm-none-eabi. The difference is that CodeSourcery needs -T generic-m-hosted.ld while ARM's version requires --specs=nano.specs --specs=rdimon.specs to be passed to the linker.

To build and run image with builtin testsuite:

make -f Makefile.test test