commit 6733b2eab76f957fc992fca5baeac0fbe41c4f1c Author: Robin Mueller Date: Thu Jul 15 16:55:08 2021 +0200 init commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f9ba00e --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Python +**/.idea/* +!**/.idea/runConfigurations +__pycache__ +*.db +venv +/tmtc/bin +/tmtc/lib +/tmtc/config/*.json +/tmtc/log +/tmtc/lib64 +/tmtc/pyvenv.cfg +/tmtc/share + +# Eclipse +.cproject +.project +!misc/eclipse/**/.project +!misc/eclipse/**/.cproject +.pydevproject +.settings +.metadata + + +# Build folders +/build* + +Makefile* +!**/make/Makefile* + +# GCOV +*.gcno + +# Visual Studio +.vs +out + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..75ba469 --- /dev/null +++ b/NOTICE @@ -0,0 +1,37 @@ +Flight Software Framework Examples + +The initial version of the Flight Software Framework was developed during +the Flying Laptop Project by the Universität Stuttgart in coorporation +with Airbus Defence and Space GmbH. + +The supreme FSFW Logo was designed by Markus Koller and Luise Trilsbach. + +Copyrights in the Flight Software Framework Examples are retained by their contributors. +No copyright assignment is required to contribute to the Flight Software Framework Examples. + +Some files include explicit copyright notices and/or license notices. +For full authorship information, see the version control history. + +Except as otherwise noted (below and/or in individual files), the +Flight Software Framework Example is licensed under the Apache License, Version 2.0. + + +This example uses: + +The Flight Software Framework from egit@irs.uni-stuttgart.de. + +And optional: +The fsfw_hal from egit@irs.uni-stuttgart.de, + +Hardware Abstraction Layers for common OS / Hardware. + +tmtccmd, from https://github.com/rmspacefish/tmtccmd/, + +A python based TM/TC Tool for testing via the PUS Interface. + +rtems-cmake, from https://github.com/rmspacefish/tmtccmd/ + +A project to build RTEMS with cmake. + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..d5967dd --- /dev/null +++ b/README.md @@ -0,0 +1,242 @@ + + +# FSFW Example Application + +This repository features a demo application. The example has been run successfully on the following +platforms: + + - Linux host machine with the Linux OSAL or the Host OSAL + - Windows with the Host OSAL + - STM32H743ZI-Nucleo with the FreeRTOS OSAL + - Raspberry Pi with the Linux OSAL + - STM32H743ZI-Nucleo with the RTEMS OSAL + +The purpose of this example is to provide a demo of the FSFW capabilities. +However, it can also be used as a starting point to set up a repository for +new flight software. It also aims to provide developers with practical examples +of how the FSFW is inteded to be used and how project using the FSFW should or can be +set up and it might serve as a basic test platform for the FSFW as well to ensure all OSALs +are compiling and running as expected. + +The repository contains a Python TMTC program which can be used to showcase +the TMTC capabilities of the FSFW (currently, using the ECSS PUS packet standard). + +# Configuring the Example + +The build system will copy three configuration files into the build directory: + +1. `commonConfig.h` which contains common configuration parameters +2. `OBSWConfig.h` which can contain machine and architecture specific configuration options +3. `FSFWConfig.h` which contains the configuration for the flight software framework + +These files can be edited manually after `CMake` build generation. + +# Index + +[Getting started with Eclipse for C/C++](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-common/src/branch/master/doc/README-eclipse.md)
+[Getting started with CMake](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-common/src/branch/master/doc/README-cmake.md)
+ +[Getting started with the Hosted OSAL](#this)
+[Getting started with the FreeRTOS OSAL on a STM32](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-stm32h7-freertos)
+[Getting started with the RTEMS OSAL on a STM32](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-stm32h7-rtems)
+[Getting started with the Raspberry Pi](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-linux-mcu)
+[Getting started with the Beagle Bone Black](https://egit.irs.uni-stuttgart.de/fsfw/fsfw-example-linux-mcu)
+ +# FSFW demo with FreeRTOS OSAL on the STM32H743ZI + +This demo can be run on a STM32H743ZI-Nucleo board with the FreeRTOS OSAL. + +## General Information + +The board is flashed and debugged with OpenOCD and this README specifies on how +to make this work with the Eclipse IDE. Other IDEs or the command line can be used as well as long +as long as OpenOCD integration is given. The example demo uses newlib nano (glibc). +Some system calls were overriden so the C and C++ stdio functions work. IO is sent via the HUART3, +so debug output can be read directly from the USB connection to the board. + +## Prerequisite + +1. [MinGW64](https://www.msys2.org/) or [Ninja Build](https://ninja-build.org/) installed on Windows. + Not required on Linux. +2. [GNU ARM Toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/) installed, recommended + to add binaries to system path. +3. Recommended for application code development: + [Eclipse for C/C++](https://www.eclipse.org/downloads/packages/) installed with the Eclipse MCU + plugin +4. [OpenOCD](https://xpack.github.io/openocd/) installed for Eclipse debugging +5. STM32 USB drivers installed + +## Building the software with CMake + +On Windows, the following steps should be performed inside the MinGW64 console +after installing MSYS2 or inside another Unix shell like `git bash`. + +1. Clone this repository + ```sh + git clone https://egit.irs.uni-stuttgart.de/fsfw/fsfw_example.git + ``` + +2. Set up submodules + ```sh + git submodule init + git submodule update + ``` + +3. Navigate into the cloned repository and create a folder for the build. We will create a + Debug build folder. + + ```sh + mkdir build-Debug + cd build-Debug + ``` + +4. Ensure that the ARM compiler has been added to the path and can be called from + the command line. For example, the following command should work: + + ```sh + arm-none-eabi-gcc --version + ``` + + Now we will create the build configuration for cross-compilation of an ARM target. + On Linux, the following build will create a debug build configuration with + the Unix Makefile generator. You can also specify `-G Ninja` to use Ninja instead + of Make. + + ```sh + cmake .. + ``` + + On Windows, use the following command to build with the `MinGW Makefiles` build system + + ```sh + cmake -G "MinGW Makefiles" .. + ``` + + The build configuration can also be performed with the shell scripts located inside + `cmake/scripts`. + +5. Build the application with the following command + + ```sh + cmake --build . -j + ``` + The application will be located inside the Debug folder and has been compiled for + the flash memory. + +6. You can test the application by first connecting the STM32H743ZI-Nucleo via USB. + The device should now show up in the list of connected devices (make sure the USB drivers are + installed as well). Drag and drop the binary file into the connected device to flash it. + The debug output is also sent via the connected USB port and a blink pattern (1 second interval) + can be used to verify the software is running properly. + +## Setting up the prerequisites + +### Windows + +It is recommended to install [MSYS2](https://www.msys2.org/) first. +Open MinGW64 and run the following commands to update it and install make and cmake +(replace x86_64 if compiling on different architecture): + +```sh +pacman -Syu +``` + +```sh +pacman -S mingw-w64-x86_64-make mingw-w64-x86_64-cmake +``` + +Alternatively, you can install [Ninja Build](https://ninja-build.org/), but you need +to add the folder containing the `ninja.exe` executable to the system path so you +can run `ninja -v` from the command line. If you do this, you can also use +`git bash` or the Windows command lines with the CMake Ninja generator +to build the software. + +The code needs to be cross-compiled for the ARM target system and we will use the +[GNU ARM Toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/). + +1. Install NodeJS LTS. Add nodejs folder (e.g. "C:\Program Files\nodejs\") + to system variables. Test by running `npm --version` in command line +2. Install [XPM](https://www.npmjs.com/package/xpm) + ```sh + npm install --global xpm + ``` + +3. Install gnu-arm Toolchain for Eclipse (version can be specified) + ```sh + xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@latest + ``` + + `xpm` will display where the package was installed. Search in that path for + the hidden `.content` folder, which will contain a `bin` folder and store + the full path to that `bin` folder for later. + + Install OpenOCD for STM32 debugging + ```sh + xpm install --global @xpack-dev-tools/openocd@latest + ``` + +4. If you want to build from the command line, you need to add the `arm-none-eabi-gcc` + binary location in the xPack folder to system variables. You can do this in a Unix + shell like `git bash` or `MinGW64` with the following command + + ```sh + export PATH=$PATH:"" + ``` + + You can also add these lines to a shell script like `path_setter.sh` and then source + the script with `. path_setter.sh` to do this conveniently. You can test whether + the path was set up properly by running `arm-none-eabi-gcc -v` + +5. Install the [STM32 USB drivers](https://www.st.com/en/development-tools/stsw-link009.html) + +If you don't want to install nodejs you may go with the +[four-command manual installation](https://xpack.github.io/arm-none-eabi-gcc/install/#manual-install). + +### Linux + +Install the [GNU ARM toolchain](https://xpack.github.io/arm-none-eabi-gcc/install/) +like explained above. + +To install general buildtools for the linux binary, run: +```sh +sudo apt-get install build-essential +``` + +Install the [USB drivers](https://github.com/stlink-org/stlink) on Linux. +On Ubuntu, you can run the following command to install it: + +```sh +sudo apt-get install stlink-tools +``` + +## Setting up Eclipse for OpenOCD debugging + +The separate [Eclipse README](README-eclipse#top) specifies how to set up Eclipse. +The STM32 configuration uses the xPacks OpenOCD and the xPacks ARM Toolchain, so those should be +installed as well. OpenOCD should be configured correctly in the STM32 launch configurations. + +## Troubleshooting + +### OpenOCD errors + +If you get the following error in OpenOCD: "Error: auto_probe failed", this could be related from +switching between FreeRTOS and RTEMS. You can try the following steps: + +1. First way: Flash the binary manually by drag & droping the binary into the USB drive manually + once + +2. Second way: Add -c "gdb_memory_map disable" to the OpenOCD arguments (in Eclipse) and run once. + Debugging might not be possible, so remove it for subsequent runs. + +3. Third way: Add the following lines to the `stm32h7x.cfg` file located inside the OpenOCD folder + inside the `scripts/target` folder: + + ```sh + $_CHIPNAME.cpu configure -event gdb-attach { + halt + } + + $_CHIPNAME.cpu configure -event gdb-attach { + reset init + } + ```