You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added basic support for STM32'sDMAv1 and DMAv2, along with data in CSV and YAML files for each supported chip and unit tests.
Added basic support for STM32'sSDMMCv1, currently only for STM32F7 chip family. Support includes data in CSV and YAML files, as well as unit tests of distortos::chip::SdMmcCardLowLevel low-level driver, which implements distortos::devices::SdMmcCardLowLevel interface.
Added distortos::chip::SpiMasterLowLevelDmaBased classes for STM32'sSPIv1 and SPIv2. These classes implement distortos::devices::SpiMasterLowLevel interface and use DMA for transfers.
Added distortos::devices::BlockDevice and distortos::devices::MemoryTechnologyDevice interface classes.
Added distortos::devices::BlockDeviceToMemoryTechnologyDevice class which wraps distortos::devices::BlockDevice object and exposes distortos::devices::MemoryTechnologyDevice interface.
Added distortos::devices::SdCard and distortos::devices::SdCardSpiBased classes, both based on distortos::devices::BlockDevice interface, which can be used with SD cards connected via SDMMC or SPI respectively. This code handles only SD version 2.0 cards, has no support for run-time detection of card insertion/removal and has no support for detecting whether card is write-protected. Code was tested with 2 GB SDSC and 32 GB SDHC cards.
Added basic framework for file systems in the form of 3 abstract classes: distortos::FileSystem, distortos::File and distortos::Directory.
Added global distortos::openFile(), taking distortos::FileSystem reference and returning a fully functional FILE* for use with <stdio.h> functions.
Added support for littlefs-v1 file system, provided by distortos::Littlefs1FileSystem, distortos::Littlefs1File and distortos::Littlefs1Directory classes, which implement interface of distortos::FileSystem, distortos::File and distortos::Directory classes.
Added configuration of STM32F7'sPLLI2S, PLLSAI and PLL48CLK to CMake.
Added sys/dirent.h and sys/statvfs.h headers, which are not provided by newlib.
Added unit tests of distortos::devices::BlockDeviceToMemoryTechnologyDevice and distortos::devices::SdCard classes.
Added unit tests of STM32'sSPIv1 and SPIv2 drivers.
Added unit tests of all estd::ContiguousRange constructor overloads.
Added estd/EnumClassFlags.hpp which provides templated bitwise operators for enum class flags.
Added estd/log2u.hpp with log2()-like constexpr function for unsigned int.
Added estd/TypeFromSize.hpp with estd::TypeFromSize<> template, which selects fixed width type from requested byte size.
Added estd/extractBitField.hpp, which provides a completely "inline-able" (with enabled optimizations) function template to extract bit field from array of raw data.
Added option to test coverage in unit tests. Enable it by setting CMake variable COVERAGE of unit test subproject. You will then be able to use new coverage target to generate detailed HTML coverage reports with gcovr in build folder of unit test subproject.
Added distortos::Semaphore::getMaxValue() accessor and its C-API equivalent distortos_Semaphore_getMaxValue().
Added ...::getCapacity() accessor for all variants of FIFO and message queues. Added ...::getElementSize() accessor for all raw variants of FIFO and message queues. In case of static queue variants, both of these accessors are also available as constexpr static member functions.
Added ...::ValueType type alias for all non-raw variants of FIFO and message queues.
Changed
Implemented full support for configuring and building with CMake. The new CMake workflow does not need Kconfig or any shell tools - just CMake (version 3.7 or later), build tool (it is recommended to use Ninja) and arm-none-eabi bleeding-edge-toolchain (GCC version 5 or later). Check README.md for more details about usage.
Numerous changes to SPI-based devices and SPI APIs:
Improved performance of interrupt-based STM32'sSPIv1 and SPIv2 drivers.
Replaced distortos::devices::SpiMasterOperation and distortos::devices::SpiMasterOperationRange with distortos::devices::SpiMasterTransfer and distortos::devices::SpiMasterTransfersRange respectively. Renamed STM32'sSPIv1 and SPIv2distortos::chip::ChipSpiMasterLowLevel classes to distortos::chip::SpiMasterLowLevelInterruptBased to make it consistent with newly added distortos::chip::SpiMasterLowLevelDmaBased. Aliases for old names were added, marked as deprecated and are scheduled to be removed after v0.7.0.
Changed most of SPI-related APIs to a more contract-based approach. Most of error-checking was replaced with assertions, thus affected functions return less error codes or don't return anything.
Added distortos::devices::SpiMasterHandle and distortos::devices::SpiDeviceSelectGuard, which build new SPI-related API. These classes can be used for RAII-style locking/unlocking or selecting/deselecting of appropriate devices and also serve as handles for accessing core functionalities of associated objects.
distortos::devices::SpiMasterBase object is now bound to distortos::devices::SpiMasterLowLevel in distortos::devices::SpiMasterLowLevel::startTransfer() instead of distortos::devices::SpiMasterLowLevel::start().
distortos::devices::SpiMasterLowLevel::configure() allows configuration of dummy data that will be sent if write buffer of transfer is nullptr.
...::lock() and ...::unlock() functions in distortos::devices::SpiEeprom were changed to use recursive mutexes internally and thus take no arguments.
distortos::devices::SpiEeprom implements distortos::devices::BlockDevice interface. This changes return type of distortos::devices::SpiEeprom::read() and distortos::devices::SpiEeprom::write() from std::pair<int, size_t> to just int.
Simplified SPI drivers and interfaces: removed handling of errors which are not possible with current configuration and removed critical sections or bit-banding use where it makes no difference.
distortos::chip::ChipSpiMasterLowLevel::Parameters class was moved to separate header and renamed to distortos::chip::SpiPeripheral. Removed distortos::chip::ChipSpiMasterLowLevel::spi...Parameters static objects and replaced them with local objects generated for each board. This change requires the board to be regenerated.
Replaced spis and uarts modules with files generated for each board. This change requires the board to be regenerated.
Removed distortos::devices::SpiEeprom::getCapacity() and distortos::devices::SpiEeprom::waitWhileWriteInProgress(). Use functions inherited from distortos::devices::BlockDevice interface class - distortos::devices::SpiEeprom::getSize() and distortos::devices::SpiEeprom::synchronize().
Removed distortos::devices::SpiEeprom::getPageSize() and distortos::devices::SpiEeprom::isWriteInProgress().
Removed distortos::devices::SpiDevice class and whole public API of distortos::devices::SpiMaster class. Use functionality exposed by distortos::devices::SpiMasterHandle and distortos::devices::SpiDeviceSelectGuard classes.
Removed distortos::devices::SpiMasterTransfer::getBytesTransfered() and distortos::devices::SpiMasterTransfer::finalize().
All additional arguments of CMake functions distortosBin(), distortosDmp(), distortosHex(), distortosLss() and distortosSize() are passed to the appropriate commands (${CMAKE_OBJCOPY}, ${CMAKE_OBJDUMP} or ${CMAKE_SIZE}). This can be especially useful in case of binary files which are used to calculate firmware checksums, where it may be necessary to pass flags like --gap-fill 0xff.
generateBoard.py now requires only one argument - the input *.yaml file. Arguments with output path and distortos path are both optional. Default output path is the folder of input *.yaml file. Default distortos path is calculated as a relative path from current directory to the folder above the script.
generateChipYaml.py now requires only one argument - the input *.csv file. Second argument - output path - is optional and default value is chipYaml/ in the folder of input *.csv file.
Replaced ARMv6-M-ARMv7-M-coreVectors.cpp and ...-chipVectors.cpp files with ...-vectorTable.cpp generated for each board. Data used to generate vector table is taken from chip YAML files, which now contain information about NVIC and implemented vectors. This change requires the board to be regenerated and this requirement is enforced by CMake. Additionally distortos_Memory_regions_..._text_vectorsCMake configuration option was renamed to distortos_Memory_regions_..._text_vectorTable, which is related to the rename of .text.vectors linker section to .text.vectorTable.
Changed names of some interrupt vectors of STM32F0, STM32F1, STM32L0 and STM32L4 to be consistent with ..._IRQn names of IRQn_Type enum.
Renamed all configuration #defines in distortosConfiguration.h from CONFIG_... to DISTORTOS_.... Some of them were also shortened and simplified by removing redundant parts like architecture name (e.g. CONFIG_ARCHITECTURE_ARMV6_M_ARMV7_M_MAIN_STACK_SIZE -> DISTORTOS_ARCHITECTURE_MAIN_STACK_SIZE), chip family (e.g. CONFIG_CHIP_STM32F0_RCC_HSE_FREQUENCY -> DISTORTOS_CHIP_RCC_HSE_FREQUENCY) or peripheral version (e.g. CONFIG_CHIP_STM32_SDMMCV1_SDMMC1_DMA -> DISTORTOS_CHIP_SDMMC1_DMA). This change requires the board to be regenerated.
Update CMSIS to version 5.5.1.
Update CMSIS-STM32F0 to version 1.9.0.
Update CMSIS-STM32F1 to version 1.7.0.
Update CMSIS-STM32F4 to version 1.24.0.
Update CMSIS-STM32F7 to version 1.15.0.
Update CMSIS-STM32L0 to version 1.11.0.
Update CMSIS-STM32L4 to version 1.14.0.
Fixed
Fixed estd::ContiguousRange to allow construction of estd::ContiguousRange<const T> from const std::array<const T, N>&.
Fixed generateBoard.py for ruamel.yaml 0.15.52 or later.
Fixed frequent overrun errors appearing in STM32'sSPIv1 and SPIv2 drivers.
Fix critical linker script bug which affects STM32F7 chips. If program contained and object with big alignment in .text section, LMA and VMA were aligned differently. This resulted in undefined behaviour right from the start, usually causing a Hard Fault exception within several cycles.
Removed
Removed support for configuring with Kconfig and building with make. Both of these tasks are now handled by CMake.
Removed some nonexistent or problematic interrupt vectors for some of STM32F1 chips. Only high density, XL density and connectivity lineSTM32F1 chips have DMA2. Some of them map DMA2 channel 5 interrupt to either shared interrupt vector (with DMA2 channel 4) or to a separate interrupt vector, but enabling the latter has multiple unrelated side effects, so use the former one only.
Removed deprecated files and aliases: lowLevelInitialization.hpp, StaticRawFifoQueue2 and StaticRawMessageQueue2.