Skip to content

v0.6.0

Choose a tag to compare

@FreddieChopin FreddieChopin released this 01 Jul 19:42
· 1376 commits to master since this release

Added

  • Support for all 81 STM32L4 devices.
  • Support and test configurations for NUCLEO-L432KC and NUCLEO-L476RG boards with STM32L4 chips.
  • Support and test configuration for NUCLEO-F446RE board with STM32F4 chip.
  • distortos/C-API/ConditionVariable.h - C-API for condition variables, implemented as wrappers for distortos::ConditionVariable member functions.
  • distortos/C-API/Mutex.h - C-API for mutexes, implemented as wrappers for distortos::Mutex member functions.
  • distortos/C-API/Semaphore.h - C-API for semaphores, implemented as wrappers for distortos::Semaphore member functions.
  • distortos::fromCApi() which can be used to cast referenes to C-API objects (like distortos_Semaphore) into references to regular C++ API objects (like distortos::Semaphore).
  • distortos::DynamicSoftwareTimer class - a dynamic and (mostly) non-templated counterpart of distortos::StaticSoftwareTimer.
  • distortos::ThisThread::exit(), similar to pthread_exit(), which can be used to cause early exit of the current thread.
  • distortos::ThreadIdentifier type which can be used to uniquely identify and access thread's instance. Identifier of the thread can be obtained using distortos::Thread::getIdentifier() and distortos::ThisThread::getIdentifier().
  • Unit tests of C-API for condition variables, mutexes and semaphores, using Catch unit test framework and Trompeloeil mocking framework. Build system of unit tests uses CMake.
  • New overload of distortos::Mutex's constructor for "normal" type.
  • BIND_LOW_LEVEL_PREINITIALIZER() and BIND_LOW_LEVEL_INITIALIZER() macros, which can be used to bind (at compile/link time) any function as low-level preinitializer (executed before .bss and .data sections' initialization, before constructors for global and static objects) or low-level initializer (executed after .bss and .data sections have been initialized, but before constructors for global and static objects). Each preinitializer/initializer has its own order of execution from 0 to 99.
  • include/CONCATENATE.h and include/STRINGIFY.h with useful macros for token concatenation and stringification.
  • CMake-based build system. At this moment all configuration is still done with Kconfig - CMake loads selected distortosConfiguration.mk and only deals with compilation. Typical use case involves following steps: select configuration with make configure CONFIG_PATH=..., create output folder of your choice (mkdir output) and enter it (cd output), configure compilation with cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-arm-none-eabi.cmake and finally start the build with make. You can obviously use other CMake generators, e.g. Ninja, Eclipse CDT4 project, ... CMake-based build system will only support configurations with proper board, i.e. "Custom board" choice for "Board" in Kconfig is not supported.
  • Added rbegin(), rend(), crbegin() and crend() functions to IntrusiveList and SortedIntrusiveList classes, making them usable with estd::ReverseAdaptor.

Changed

  • Reduced size of distortos::Mutex from 28 bytes to 24 bytes (5 pointers + 4 bytes).
  • distortos::ThreadCommon was moved to distortos::internal namespace. distortos/ThreadCommon.hpp was moved to distortos/internal/scheduler/ThreadCommon.hpp. There's no need for this class to be available in the public API.
  • All low-level initializers (architecture, chip, peripherals, scheduler, threads, ...) use BIND_LOW_LEVEL_INITIALIZER() instead of being called via distortosPreinitArray[] from newlib's __libc_init_array().
  • Changed linker script symbols related to .bss and .data section initializers - __{bss,data}_array_{end,start} becomes __{bss,data}_initializers_{end,start}.
  • Replaced generateChipDtsi.py with generateChipYaml.py. New script reads all input data and its hierarchy from *.csv files - no templates or external files are used. Output *.yaml files for described chips are generated by ruamel.yaml parser/emitter module, which is the only dependency of this script.
  • Replaced devicetree-based board generator with one using *.yaml files as input. Model of data in *.yaml files resembles devicetree, but is more suited for requirements of distortos (static code generation instead of dynamic run time configuration). New version of generateBoard.py requires ruamel.yaml parser/emitter module and jinja2 template engine. It is also possible to use chip *.yaml files directly to generate so-called "raw" board, which can then be used by CMake. Basic documentation of bindings for chip and board *.yaml files is included in documentation/yaml-bindings/.
  • Indexes of board buttons and LEDs - generated automatically by generateBoard.py - were changed from <name>ButtonIndex and <name>LedIndex to <group><Name>Index. For example b1ButtonIndex and ld3LedIndex were changed to buttonsB1Index and ledsLd3Index. Similar change was done for counts of available board buttons and LEDs - they were changed from total<Name> to <group>Count. For example totalButtons and totalLeds were changed to buttonsCount and ledsCount.
  • Renamed StaticRawFifoQueue2 to StaticRawFifoQueue and StaticRawMessageQueue2 to StaticRawMessageQueue. Aliases for old names were added and marked as deprecated and are scheduled to be removed after v0.6.0
  • Update CMSIS to version 5.3.0.

Fixed

  • Fixed GDB pretty-printers of distortos queues when using GCC 7. New version of libstdc++v3 from GCC changed implementation of std::unique_ptr, which is used internally by queues for managing storage. Fixed pretty-printers from distortos.py now handle both variants of std::unique_ptr.
  • Mark all .bss sections in generated linker scripts as (NOLOAD). Without this change .bin file for a project containing zero-initialized data in additional memories would be extremely large - for example ~134 MB in case of STM32F4 when anything is placed in .ccm.bss.
  • Fixed interrupt priorities for STM32's SPIv2 and USARTv2 for cases when CONFIG_ARCHITECTURE_ARMV7_M_KERNEL_BASEPRI is defined and non-zero. Previously interrupt priorities of these peripherals were always set to 0 (highest possible).
  • Restore 4-byte alignment for .bss and .data sections in linker scripts generated for ARMv6-M and ARMv7-M architectures. Previously when beginning/end of these sections were not 4-byte aligned (for example there's just one byte in such section), the __..._start / __..._end symbols would not be properly aligned for use by Reset_Handler()'s initialization code, which initializes 4 bytes at a time.
  • #include ... examples in documentation generated by doxygen use proper paths - e.g. #include "distortos/Semaphore.hpp" instead of #include "Semaphore.hpp".
  • Fixes necessary for compilation with GCC 8.

Removed

  • Removed call to lowLevelInitialization0() from Reset_Handler() for ARMv6-M and ARMv7-M. All low-level preinitializers should use BIND_LOW_LEVEL_PREINITIALIZER() macro.
  • Removed board::lowLevelInitialization() declaration. Low-level initializers of board should use BIND_LOW_LEVEL_INITIALIZER(60, ...);.
  • Removed pydts.py, as new version of board generator uses *.yaml files as input.
  • Removed tup build infrastructure - tup is no longer supported for building distortos.
  • Removed deprecated functions and aliases: StaticRawFifoQueueFromSize, old StaticRawFifoQueue, StaticRawMessageQueueFromSize, old StaticRawMessageQueue, old variant of STM32's GPIOv2 configureAlternateFunctionPin().