Documentation: add guide for pysimCoder integration with NuttX
This commit adds documentation for compiling NuttX for pysimCoder and then running pysimCoder designed applications on NuttX. PysimCoder is a Rapid Control Application Development Tool that can transfer block diagrams into C code and can be used in real time control applications. Signed-off-by: Michal Lenc <michallenc@seznam.cz>
This commit is contained in:
parent
d1687418db
commit
c456b15916
BIN
Documentation/guides/image/interface.png
Normal file
BIN
Documentation/guides/image/interface.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 79 KiB |
BIN
Documentation/guides/image/menu.png
Normal file
BIN
Documentation/guides/image/menu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
Documentation/guides/image/template.png
Normal file
BIN
Documentation/guides/image/template.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
@ -11,3 +11,4 @@ Guides
|
||||
drivers.rst
|
||||
tasktrace.rst
|
||||
cpp_cmake.rst
|
||||
pysimcoder.rst
|
||||
|
158
Documentation/guides/pysimcoder.rst
Normal file
158
Documentation/guides/pysimcoder.rst
Normal file
@ -0,0 +1,158 @@
|
||||
.. include:: /substitutions.rst
|
||||
.. _pysimcoder:
|
||||
|
||||
pysimCoder integration with NuttX
|
||||
=================================
|
||||
|
||||
`PysimCoder <https://github.com/robertobucher/pysimCoder>`_ is as an open source
|
||||
Rapid Control Application Development Tool which is able to transfer block diagrams into C code.
|
||||
Combined with NuttX, it can be used in real time control application and as an alternative to
|
||||
expensive licensed programs and prototyping platforms. Example of `DC motor control application
|
||||
<https://www.youtube.com/watch?v=6HlGk3ecPNQ>`_ with PID controller and blocks for encoder,
|
||||
PWM, GPIO and sending data over TCP to real time plotter can be seen on `NuttX Channel
|
||||
<https://www.youtube.com/channel/UC0QciIlcUnjJkL5yJJBmluw>`_.
|
||||
|
||||
This documentation describes the steps that are needed to run application generated by pysimCoder
|
||||
on NuttX and also keeps the track of peripherals that are supported by pysimCoder for NuttX RTOS.
|
||||
|
||||
Peripheral Support
|
||||
------------------
|
||||
|
||||
The following list shows the peripherals and fuctionalities supported in pysimCoder for NuttX RTOS.
|
||||
|
||||
========== =======================
|
||||
Peripheral Notes
|
||||
========== =======================
|
||||
ADC
|
||||
CAN Including SocketCAN
|
||||
DAC
|
||||
ENC
|
||||
GPIO
|
||||
PWM Multichannel support
|
||||
UART Serial output
|
||||
Sensors Basic support for DHTXX
|
||||
TCP
|
||||
UDP
|
||||
========== =======================
|
||||
|
||||
Please note that the actual support for NuttX peripherals can be wider that what is mentioned here
|
||||
in case this documentation was not updated when new fuctionalities were added to pysimCoder.
|
||||
|
||||
NuttX Configuration
|
||||
-------------------
|
||||
|
||||
Several configuration options are neccessary to be set in order to succesfully compile pysimCoder
|
||||
with NuttX. The list is the following:
|
||||
|
||||
==================================== =====================================
|
||||
``CONFIG_ARCH_RAMVECTORS=y`` ``CONFIG_NSH_FILE_APPS=y``
|
||||
``CONFIG_BOARDCTL_APP_SYMTAB=y`` ``CONFIG_NSH_LINELEN=64``
|
||||
``CONFIG_BOARDCTL_OS_SYMTAB=y`` ``CONFIG_NSH_READLINE=y``
|
||||
``CONFIG_BUILTIN=y`` ``CONFIG_NSH_ROMFSETC=y``
|
||||
``CONFIG_CLOCK_MONOTONIC=y`` ``CONFIG_PSEUDOTERM=y``
|
||||
``CONFIG_ELF=y`` ``CONFIG_PTHREAD_CLEANUP=y``
|
||||
``CONFIG_FS_BINFS=y`` ``CONFIG_PTHREAD_MUTEX_TYPES=y``
|
||||
``CONFIG_FS_PROCFS=y`` ``CONFIG_PTHREAD_MUTEX_TYPES=y``
|
||||
``CONFIG_FS_PROCFS_REGISTER=y`` ``CONFIG_PTHREAD_STACK_MIN=1024``
|
||||
``CONFIG_FS_ROMFS=y`` ``CONFIG_RR_INTERVAL=10``
|
||||
``CONFIG_FS_TMPFS=y`` ``CONFIG_SCHED_WAITPID=y``
|
||||
``CONFIG_IDLETHREAD_STACKSIZE=2048`` ``CONFIG_SERIAL_TERMIOS=y``
|
||||
``CONFIG_LIBC_EXECFUNCS=y`` ``CONFIG_SYMTAB_ORDEREDBYNAME=y``
|
||||
``CONFIG_LIBC_STRERROR=y`` ``CONFIG_SYSTEM_NSH=y``
|
||||
``CONFIG_MAX_TASKS=16`` ``CONFIG_SYSTEM_NSH_STACKSIZE=4096``
|
||||
``CONFIG_NSH_BUILTIN_APPS=y`` ``CONFIG_USER_ENTRYPOINT="nsh_main"``
|
||||
``CONFIG_NSH_FILEIOSIZE=512``
|
||||
==================================== =====================================
|
||||
|
||||
In case you want to use Network and blocks like TCP or UDP, following configuration
|
||||
options are required:
|
||||
|
||||
============================== ==================================
|
||||
``CONFIG_NET=y`` ``CONFIG_NET_ROUTE=y``
|
||||
``CONFIG_NETDB_DNSCLIENT=y`` ``CONFIG_NET_SOLINGER=y``
|
||||
``CONFIG_NETDEV_LATEINIT=y`` ``CONFIG_NET_STATISTICS=y``
|
||||
``CONFIG_NETDEV_STATISTICS=y`` ``CONFIG_NET_TCP=y``
|
||||
``CONFIG_NETINIT_DHCPC=y`` ``CONFIG_NET_TCPBACKLOG=y``
|
||||
``CONFIG_NETINIT_NOMAC=y`` ``CONFIG_NET_TCP_KEEPALIVE=y``
|
||||
``CONFIG_NETUTILS_FTPC=y`` ``CONFIG_NET_TCP_WRITE_BUFFERS=y``
|
||||
``CONFIG_NETUTILS_TELNETD=y`` ``CONFIG_NET_UDP=y``
|
||||
``CONFIG_NETUTILS_TFTPC=y`` ``CONFIG_SYSTEM_DHCPC_RENEW=y``
|
||||
``CONFIG_NET_ARP_SEND=y`` ``CONFIG_SYSTEM_NTPC=y``
|
||||
``CONFIG_NET_BROADCAST=y`` ``CONFIG_SYSTEM_PING6=y``
|
||||
``CONFIG_NET_IPv6=y`` ``CONFIG_SYSTEM_PING=y``
|
||||
``CONFIG_NET_LOOPBACK=y`` ``CONFIG_SYSTEM_TEE=y``
|
||||
``CONFIG_NET_PKT=y``
|
||||
============================== ==================================
|
||||
|
||||
Board and application specific configuration like setting up peripherals or boot options might also be required,
|
||||
please refer to board and platform documentation for those information. Once NuttX is configured it can be build
|
||||
by simply running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make
|
||||
|
||||
Then we need to export build NuttX which can be done by executing command
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make export
|
||||
|
||||
This creates a zip file nuttx-export-xx.x.x.zip where xx.x.x is the version of NuttX. This file then have to be
|
||||
moved to pysimCoder directory pysimCoder/CodeGen/nuttx, unzip there and then renamed just to nuttx-export. Then
|
||||
enter the pysimCoder/CodeGen/nuttx/device directory and execute
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make
|
||||
|
||||
This compiles pysimCoder files that controls functions of separate blocks. PysimCoder can be either installed
|
||||
on the system (please refer to the `pysimCoder manual <https://github.com/robertobucher/pysimCoder/blob/master/README.md>`_)
|
||||
or script pysim-run.sh can be used to run pysimCoder without the installation. This script can be found in pysimCoder
|
||||
root directory and is run by executing command
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./pysim-run.sh
|
||||
|
||||
Please note that PYSUPSICTRL variable has to be set/exported in order to succesfully compile NuttX application
|
||||
designed with pysimCoder.
|
||||
|
||||
Using pysimCoder to design NuttX application
|
||||
--------------------------------------------
|
||||
|
||||
After running pysimCoder, separate blocks can be selected from the library menu on the left hand side. The menu contains
|
||||
several libraries, NuttX specific blocks can be found in library "NuttX". It is also possible to use blocks from other
|
||||
libraries like "input", "output", "math" and so on. Several blocks can have specific parameter options and various number
|
||||
of inputs/outputs. Double left click on the block openes parameter settings while single right click on the block leads
|
||||
to number of inputs/outputs setup. The pysimCoder interface can be seen in the picture below.
|
||||
|
||||
.. figure:: image/interface.png
|
||||
:align: center
|
||||
:width: 100%
|
||||
|
||||
pysimCoder interface: library menu can be seen on the left hand side
|
||||
|
||||
The NuttX template Makefile nuttx.tmf has to be selected in order to generate code for NuttX target.
|
||||
This can be done in the top menu by clicking on Block settings icon which is highlighted in the red circle.
|
||||
|
||||
.. figure:: image/menu.png
|
||||
:align: center
|
||||
:width: 100%
|
||||
|
||||
pysimCoder menu: red block settings, green generate C-code
|
||||
|
||||
Block settings option open the following window (showed in the picture below) where you can set template Makefile and
|
||||
also Python skript with parameters for the controllers.
|
||||
|
||||
.. figure:: image/template.png
|
||||
:align: center
|
||||
:width: 100%
|
||||
|
||||
pysimCoder Block settings menu
|
||||
|
||||
C code can be generated by selecting Generate C-code icon (highlighted in the green cirle). Executeble files are then
|
||||
generated and can be flashed into the target. The flashing procedure can be target specific, please refer to plaftorm´s
|
||||
documentation. The generated application can be then run from NuttX command line by executing::
|
||||
|
||||
nsh> main
|
Loading…
x
Reference in New Issue
Block a user