diff --git a/Documentation/guides/image/interface.png b/Documentation/guides/image/interface.png new file mode 100644 index 00000000000..ce3001caeb7 Binary files /dev/null and b/Documentation/guides/image/interface.png differ diff --git a/Documentation/guides/image/menu.png b/Documentation/guides/image/menu.png new file mode 100644 index 00000000000..dab835e36b6 Binary files /dev/null and b/Documentation/guides/image/menu.png differ diff --git a/Documentation/guides/image/template.png b/Documentation/guides/image/template.png new file mode 100644 index 00000000000..3852feb0af5 Binary files /dev/null and b/Documentation/guides/image/template.png differ diff --git a/Documentation/guides/index.rst b/Documentation/guides/index.rst index 89ddc65f8d5..6fff019a87e 100644 --- a/Documentation/guides/index.rst +++ b/Documentation/guides/index.rst @@ -11,3 +11,4 @@ Guides drivers.rst tasktrace.rst cpp_cmake.rst + pysimcoder.rst diff --git a/Documentation/guides/pysimcoder.rst b/Documentation/guides/pysimcoder.rst new file mode 100644 index 00000000000..876968961ce --- /dev/null +++ b/Documentation/guides/pysimcoder.rst @@ -0,0 +1,158 @@ +.. include:: /substitutions.rst +.. _pysimcoder: + +pysimCoder integration with NuttX +================================= + +`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 +`_ with PID controller and blocks for encoder, +PWM, GPIO and sending data over TCP to real time plotter can be seen on `NuttX Channel +`_. + +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 `_) +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