nuttx/boards/risc-v/gap8/gapuino
chao.an b88561299b make/expression: improving up asm/C/C++ compile times
In the current compilation environment, the recursive assignment(=) for compile
flags will be delayed until every file is actually need to be compile.

For example:
--------------------------------------------------------------------------------
arch/arm/src/Makefile:

INCLUDES += ${shell $(INCDIR) "$(CC)" $(ARCH_SRCDIR)$(DELIM)chip}
INCLUDES += ${shell $(INCDIR) "$(CC)" $(ARCH_SRCDIR)$(DELIM)common}
INCLUDES += ${shell $(INCDIR) "$(CC)" $(ARCH_SRCDIR)$(DELIM)$(ARCH_SUBDIR)}
INCLUDES += ${shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)sched}

CPPFLAGS += $(INCLUDES) $(EXTRAFLAGS)
CFLAGS += $(INCLUDES) $(EXTRAFLAGS)
CXXFLAGS += $(INCLUDES) $(EXTRAFLAGS)
AFLAGS += $(INCLUDES) $(EXTRAFLAGS)
--------------------------------------------------------------------------------

All compilation options will be included recursively,
which will be delayed until the compilation options are actually used:

tools/Config.mk:

--------------------------------------------------------------------------------
define COMPILE
  @echo "CC: $1"
  $(Q) $(CC) -c $(CFLAGS) $($(strip $1)_CFLAGS) $1 -o $2
endef
--------------------------------------------------------------------------------

All compile flags to be reexecuted $(INCDIR) as long as one file needs to be compiled,
but in fact, the compilation options have not changed in the current directory.

So the we recommand to change the syntax of assignment
From
    Recursive (=)
To
    Simple    (:=)

In this way, we can ensure that all compilation options are expanded only once and reducing repeated works.

Signed-off-by: chao.an <anchao@xiaomi.com>
2020-11-02 07:53:53 -08:00
..
configs/nsh libc/stdio: Allocate file_struct dynamically 2020-09-11 17:58:17 +08:00
include Merged in alinjerpelea/nuttx (pull request #971) 2019-08-09 13:22:39 +00:00
scripts make/expression: improving up asm/C/C++ compile times 2020-11-02 07:53:53 -08:00
src build: Move .config check to the top Makefile 2020-05-20 17:57:34 +01:00
Kconfig
README.txt Run codespell -w with the latest dictonary again 2020-02-23 22:27:46 +01:00

README
======

gapuino is an evaluation board for GAP8, a 1+8-core DSP-like RISC-V
MCU. GAP8 features a RI5CY core called Fabric Controller(FC), and a
cluster of 8 RI5CY cores that runs at a bit slower speed. GAP8 is an
implementation of the opensource PULP platform, a Parallel-Ultra-Low-
Power design.

The port is currently very minimal, though additional support may be
added in the future to address more of the board peripherals.

  Supported:
  - USB UART (console port)
  - uDMA on SOC domain
  - FLL clock scaling

  Not supported:
  - SPI, I2C, I2S, CPI, LVDS, Hyper-bus on the uDMA subsystem
  - the sensor board
  - the 8-core cluster
  - the Hardware convolution engine

See also:
gapuino board and the sensor board:
https://gwt-website-files.s3.amazonaws.com/gapuino_um.pdf
https://gwt-website-files.s3.amazonaws.com/gapuino_multisensor_um.pdf
GAP8 datasheet:
https://gwt-website-files.s3.amazonaws.com/gap8_datasheet.pdf

Contents
========

  - Environment Setup
  - Configurations
  - Execute

Environment Setup
=================
  First, setup the gap_sdk from GreenwavesTechnologies' github repo.
  Follow the README to setup the toolchain and environment.
  https://github.com/GreenWaves-Technologies/gap_sdk/

Configurations
==============
  Each gapuino configuration is maintained in a sub-directory and can
  be selected as follow:

    tools/configure.sh gapuino:<subdir>

  Where <subdir> is one of the following:

    nsh
    ---
    This is an NSH example that uses the UART connected to FT2232 as
    the console. Default UART settings are 115200, 8N1.

Execute
=======
  You may download the ELF to the board by `plpbridge` in gap_sdk.
  Remember to first `cd` to the gap_sdk/ and `source sourceme.sh`, so
  that you have the $GAP_SDK_HOME environment variable.

  Use the following command to download and run the ELF through JTAG:

    $GAP_SDK_HOME/install/workstation/bin/plpbridge \
    --cable=ftdi@digilent --boot-mode=jtag --chip=gap \
    --binary=nuttx \
    load ioloop reqloop start wait

  As for debugging, the following command download the ELF and opens
  a gdbserver on port 1234:

     $GAP_SDK_HOME/install/workstation/bin/plpbridge \
    --cable=ftdi@digilent --boot-mode=jtag --chip=gap \
    --binary=nuttx \
    load ioloop gdb wait

  And then launch the gdb on another terminal:

    riscv32-unknown-elf-gdb nuttx
    ...
    (gdb) target remote :1234
    Remote debugging using :1234
    IRQ_U_Vector_Base () at chip/startup_gap8.S:293
    293             j reset_handler       /* 32 */
    (gdb)

  And then enjoy yourself debugging with the CLI gdb :-)