awesome-embedded-c-testing Awesome

A curated list of delightful Embedded Systems Testing libraries, techniques and references!

Please read the contribution guidelines before contributing.

Table of Contents

Testing Techniques

RTOS

To test software that uses multithreading and tasks, follow this posts:

http://blog.wingman-sw.com/archives/282 http://blog.wingman-sw.com/archives/288 http://blog.wingman-sw.com/archives/303

main

http://vandervoord.net/blog/2015/5/19/unit-test-how-main- http://www.methodsandtools.com/archive/archive.php?id=59p3

Infinite Loops

http://vandervoord.net/blog/2015/5/19/unit-test-how-infinite-loops

Private data

http://vandervoord.net/blog/2015/5/24/unit-test-how-private-data

Registers

http://vandervoord.net/blog/2015/5/24/unit-test-how-registers http://vandervoord.net/blog/2015/5/24/unit-test-how-faking-changing-registers http://vandervoord.net/blog/2015/5/24/unit-test-how-verifying-multiple-register-writes

Tools for Integration

CANOpen

Open Source

  • CanFestival - CanFestival focuses on providing an ANSI-C platform independent CANOpen® stack that can be built as master or slave nodes on PCs, Real-time IPCs, and Microcontrollers.
  • CANopenNode - CANopenNode is written in ANSI C in object-oriented way. It runs on different microcontrollers, as standalone application or with RTOS

Proprietary

Serialization

  • nanopb - Nanopb is a plain-C implementation of Google's Protocol Buffers data format. It is targeted at 32 bit microcontrollers, but is also fit for other embedded systems with tight (2-10 kB ROM, <1 kB RAM) memory constraints.
  • mpack - A C encoder/decoder for MessagePack messages suitable for resource constriants embedded systems. Supports disabling dynamic memory allocation and overriding malloc, free, and realloc.
  • tinycbor - Intel's implementation of CBOR designed for their IOT-based applications and processors

RTOS

Free or Open Source

  • TinyOS - A operating system designed for low-power wireless devices, such as those used in sensor networks, ubiquitous computing, personal area networks, smart buildings, and smart meters.
  • ContikiOS - A free Operating System with focus to provide standardized low-power wireless communication for a wide range of hardware platforms.
  • FreeRTOS - A free use Real Time Operating system which is widely used and supports a large number of platforms.
  • RIOT - A free OS for IoT devices providing foundational trust services. The trust services include device identity, sealing, attestation, and data integrity. The term “Robust” is used because the minimal trusted computing base is tiny, and because RIoT capabilities can remotely re-establish trust in devices that have been compromised by malware.
  • RTEMS - Real-Time Executive for Multiprocessor Systems or RTEMS is an open source Real Time Operating System (RTOS) that supports open standard application programming interfaces (API) such as POSIX. It is used in space flight, medical, networking and many more embedded devices using processor architectures including ARM, PowerPC, Intel, Blackfin, MIPS, Microblaze and more. Fuschia - Magenta is the core platform that powers the Fuchsia OS. Magenta is composed of a microkernel (source in kernel/...) as well as a small set of userspace services, drivers, and libraries (source in system/...) necessary for the system to boot, talk to hardware, load userspace processes and run them, etc. Fuchsia builds a much larger OS on top of this foundation.

Commercial

  • SafeRTOS - Certified version of FreeRTOS by TUEV SUED against IEC 61508 (basic functional safety standard) up to SIL3 (the highest safety integrity level for a single software component), ISO 26262 ASIL D (automotive standard) and EN62304 (medical device standard).
  • INTEGRITY/INTEGRITY-178 - Two commercial RTOS variants targeting to power embedded systems with total reliability, absolute security, and maximum real-time performance. The variant INTEGRYTY-178 has a lot of safety and security certifications.
  • PikeOS - A commercial micro-kernel based operating system with a small footprint and certified for DO-178 (avionics), IEC-61508 (industrial), ISO-26262 (automotive).
  • Rocket - A free embedded operating system specifically designed to quickly and easily build small, intelligent devices in Wind Rivers cloud-based development environment, Wind River Helix™ App Cloud.
  • Nucleus RTOS - Commercial, highly scalable micro-kernel based real-time operating system designed for scalability and reliability.
  • uC/os - µC/OS-II and µC/OS-III are preemptive, highly portable, and scalable real-time kernels. You can test them out for free, but you must pay to put them into a product.
  • TI-RTOS - A real-time operating system for TI microcontrollers, It Includes TCP/IP and USB stacks, a FAT file system, and device drivers, Most of the TI-RTOS components are released under the BSD License.

Testing

  • CppUTest - unit testing and mocking framework for C/C++ with a focus on working for embedded systems!
  • ceedling, unity and cmock - Unit testing, mocking and build framework written in C with ruby for generating and building.
  • doctest - A lightweight and feature-rich C++98/C++11 single-header testing framework for unit tests and TDD.
  • Mockitopp - A C++ mocking framework inspired by the ideas developed for Mockito written by Szczepan Faber, et al. The purpose is to provide similar construction semantics for creating mock objects leading to smaller, more readable test cases. It is designed to be a lightweight framework allowing you to mock dependencies for a system under test using a simple descriptive domain specific language. The goal is to help create simpler, less brittle test cases; ultimately, leading to less maintenance overhead in the future.
  • Trompeloeil - A thread safe header only mocking framework for C++14 using the Boost Software License 1.0
  • Catch - A modern, C++-native, header-only, test framework for unit-tests, TDD and BDD - using C++11, C++14, C++17 and later (or C++03 on the Catch1.x branch)

Frameworks

  • Arduino
  • ARM mbed - The ARM mbed IoT Device Platform provides the operating system, cloud services, tools and developer ecosystem to make the creation and deployment of commercial, standards-based IoT solutions possible at scale.

Resources

Other Lists

  • Single File Libs - Single File libraries for C++ and C. Some might be useful for embedded systems use.

Podcasts

Videos

Books

Standards

Tools

  • PlatformIO - PlatformIO is an open source ecosystem for IoT development Cross-platform build system. Continuous and IDE integration. Arduino and ARM mbed compatible

Embedded Linux

  • yocto - Yocto is a tool for creating custom embedded linux systems

Courses

License

CC0

To the extent possible under law, Riccardo Ancona has waived all copyright and related or neighboring rights to this work.