You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
.. _module-pw_arduino_build:
|
|
|
|
-----------------
|
|
pw_arduino_build
|
|
-----------------
|
|
|
|
The ``pw_arduino_build`` module contains both the `arduino_builder`_ command
|
|
line utility and an `Arduino Main Wrapper`_.
|
|
|
|
.. seealso::
|
|
See the :ref:`target-arduino` target documentation for a list of supported
|
|
hardware.
|
|
|
|
Arduino Main Wrapper
|
|
====================
|
|
|
|
``arduino_main_wrapper.cc`` implements the standard ``setup()`` and ``loop()``
|
|
functions [#f1]_ that are expected in Arduino sketches.
|
|
|
|
Pigweed executables rely on being able to define the ``main()`` function. This
|
|
is a problem for Arduino code as each core defines it's own ``main()``. To get
|
|
around this the Pigweed Arduino target renames ``main()`` to ``ArduinoMain()``
|
|
using a preprocessor macro: ``-Dmain(...)=ArduinoMain()``. This macro only
|
|
applies when compiling Arduino core source files. That frees up ``main()`` to be
|
|
used elsewhere.
|
|
|
|
Most Arduino cores will do some internal initialization before calling
|
|
``setup()`` followed by ``loop()``. To make sure Pigweed ``main()`` is started
|
|
after that early init we run it within ``setup()``:
|
|
|
|
.. code-block:: cpp
|
|
|
|
void setup() {
|
|
pw_arduino_Init();
|
|
// Start Pigweed main()
|
|
main();
|
|
}
|
|
|
|
void loop() {}
|
|
|
|
.. note::
|
|
``pw_arduino_Init()`` initializes the :ref:`module-pw_sys_io_arduino`
|
|
module.
|
|
|
|
.. warning::
|
|
You may notice ``loop()`` is empty in ``arduino_main_wrapper.cc`` and never
|
|
called. This will cause any code appearing after ``loop()`` in an Arduino
|
|
core to never be executed. For most cores this should be ok but may cause
|
|
issues in some scenarios.
|
|
|
|
arduino_builder
|
|
===============
|
|
|
|
``arduino_builder`` is utility that can extract compile and tooling information
|
|
from an Arduino core. It's used within Pigweed to shovel compiler flags into
|
|
the `GN <https://gn.googlesource.com/gn/>`_ build system. It will also work
|
|
without Pigweed and can be used with other build systems.
|
|
|
|
Full documentation is pending. For now run ``arduino_builder --help`` for
|
|
details.
|
|
|
|
.. rubric::
|
|
Footnotes
|
|
|
|
.. [#f1]
|
|
See the Arduino Reference documentation on `setup()
|
|
<https://www.arduino.cc/reference/en/language/structure/sketch/setup/>`_, and
|
|
`loop()
|
|
<https://www.arduino.cc/reference/en/language/structure/sketch/loop/>`_.
|
|
|