The purpose of this changelog is to give a good overview of the changes in xpcc. It is an editorialized version of the git history, with features, PRs and fixes chosen for their importance to xpcc users as judged by the maintainer. This means that not every small commit makes it in here.
Changelog format
The release summaries are formatted as:
Breaking changes: [list]
Major features: [list]
Fixes: [list]
Known bugs: [list]
New development board targets: [list]
New device drivers: [list]
Contributors: [list]PR #[GitHub] -> [release tag].
With a more detailed changelog below with this format:
[detailed summary]
PR #[GitHub] -> [sha1] (with [level] impact (on [scope])).
Tested in hardware by [contributor].
Note that -> [sha1] means "all changes up to and including this commit" which
needs to be interpreted in the context of the git history.
This usually corresponds to the changes in the Pull Request on GitHub though.
This changelog also labels the changes with an impact and usually also scopes them to the relevant subset of xpcc code or targets. This describes the anticipated impact of these changes on users of xpcc and has four levels:
- No impact mentioned: No influence. Adds new features and does not touch existing code.
- Low impact: No expected influence. Modifies xpcc in a backwards compatible way.
- Medium impact: Likely influence. Modifies xpcc in a non-backwards compatible way.
- High impact: Definite influence. Breaks the API within the scope.
High impact changes are explicitly called out in the release notes for you to pay attention to. Medium impact changes are also worth looking at.
This release covers everything from the 2017q1 release on 2017-04-05 and has been tested with avr-gcc v5.4.0 from Atmel and arm-none-eabi-gcc 2017q2 from ARM.
Breaking changes:
- No breaking changes
Major features:
- STM32L4 target support and drivers
- Improve assert implementation and make use of them
Major fixes:
- Fix issues and warnings in release tests
- Fix wrong
ns_per_looprounding in board definitions
Known bugs:
GPIO connect on STM32F1 is still broken. See #178 for discussion.
The API from MODM will not be backported to xpcc however.
New development board targets:
- NUCLEO-L476RG as
nucleo_l476rg - STM32L476G-DISCO as
stm32l476_discovery
New device drivers:
- DS1302
- TCS3472X
Many thanks to all our contributors. A special shoutout to first timers (🎉🎊):
- Arjun Sarin 🎉🎊
- Michael Thies (@mhthies)
- Niklas Hauser (@salkinium)
- Sascha Schade (@strongly-typed)
Detailed changelog
PR #254 -> f2ac1a0.
Tested in hardware by @strongly-typed.
PR #249 -> 29c8905.
Tested in hardware by @strongly-typed.
PR #248 -> 51159ff.
Tested in hardware by @strongly-typed.
PR #251 -> 40da657.
Tested in hardware by @strongly-typed.
- Make header C-compatible so asserts can be called from C.
- Specialize
assert_failfunction for context value. - Return condition from
xpcc_assertfor error handling. - Remove
exit()calls from implementation. - Add assertions to core.
- Update F469-DISCO assert example.
PR #247 -> 3992534 with low impact.
Tested in hardware by @salkinium.
- Updates the DFG and SCons for STM32L4 family.
- Fixes AF issues with TimerN BreakIn signal.
- Adds ports of drivers for STM32L4 family.
- Adds BSPs for STM32L476 Nucleo and Discovery.
- Adds examples for STM32L476 Nucleo and Discovery.
PR #240 -> e9591d5 with medium impact on STM32 targets.
Tested in hardware by @strongly-typed.
UART does not have LIN or Smartcard mode.
As this is our first official release it covers the last 12 months of development since 2016-04-01.
Breaking changes:
- Fix implicit conversion of Flags
- Refactor
buffertodisplay_bufferinBufferedGraphicDisplay - Fix spelling of
SpiMaster::acquire - Namespace architecture/util.hpp macros
stm32f7_discoveryrenamed tostm32f746g_discovery
Major features:
- Runtime error model using assertion handlers
- Memory traits to heap regions and allocators
- TLSF allocator
- Link against newlib-nosys and newlib-nano
- Unified interrupt declaration conventions
- Black Magic Probe programming support
- ARM Cortex-M7 with double precision FPU
- ZeroMQ as transport layer for XPCC
- Update STM32 header and device files
- Namespace architecture/util.hpp macros
- Coding conventions
- Porting guide
Major fixes:
- Fix implicit conversion of Flags
- Fix I2C master reception of 2B transfers
- Fix spelling of
SpiMaster::acquire
Known bugs:
GPIO connect on STM32F1 is broken. They can be remapped only in groups,
however, the API allows invalid remapping. This cannot be fixed without
introducing a new API for that. See #178 for discussion.
A solution has been tested for modm, but isn't ready for xpcc.
New development board targets:
- NUCLEO-F031K6 as
nucleo_f031k6 - NUCLEO-F303K8 as
nucleo_f303k8 - NUCLEO-F401RE as
nucleo_f401re - NUCLEO-F411RE as
nucleo_f411re - NUCLEO-F429ZI as
nucleo_f429zi - STM32F769I-DISCO as
stm32f769i_discovery - STM32F469I-DISCO as
stm32f469_discovery - STM32F103 board "Blue Pill" as
stm32f103c8t6_blue_pill
New device drivers:
- VL53L0X
- BME280
- ADNS9800
- FT6x06
Many thanks to all our contributors. A special shoutout to first timers (🎉🎊):
- Antal Szabó (@Sh4rK)
- Christopher Durand (@chris-durand) 🎉🎊
- Daniel Krebs (@daniel-k)
- Fabian Greif (@dergraaf)
- Georgi Grinshpun (@georgi-g)
- Julia Gutheil 🎉🎊
- Kevin Läufer (@ekiwi)
- Michael Thies (@mhthies) 🎉🎊
- Nick Sarten (@genbattle) 🎉🎊
- Niklas Hauser (@salkinium)
- Raphael Lehmann (@rleh) 🎉🎊
- Sascha Schade (@strongly-typed)
- Tarik TIRE (@7Kronos) 🎉🎊
- Tomasz Chyrowicz (@tomchy) 🎉🎊
Detailed changelog
Adds get(), rget(), [] operator and appendOverwrite(),
prependOverwrite() to BoundedDeque to access elements by id, e.g.
to do a binary search on ordered elements in the deque and to use the
BoundedDeque as a ring buffer.
Adds --specs=nosys.specs to linker flags.
PR #235 -> 0e7e57f with low impact on ARM Cortex-M targets.
Tested in hardware by @salkinium.
This is some beautiful driver code.
PR #234 -> 553dceb.
Tested in hardware by @chris-durand.
PR #231 -> f472f7f.
Tested in hardware by @strongly-typed.
Conversion of Flags to an associated FlagsGroup will now work
correctly even when multiple enum constants or flag variables are
combined with logical operators.
The bool conversion of flags classes is implemented in terms of
explicit operator bool() to fix issues with function overloading
on Flags parameters.
The explicit operator will only allow implicit casts where contextual conversion takes place, which is more restrictive than the previous implementation. It will occur in the following contexts:
- conditions of if, while, for, do-while statements
- logical operators (&&, ||)
- negation (operator !)
- static_assert
This may break user code that requires implicit bool conversions on other occasions, for instance in return statements.
PR #230 -> fcf27a1 with high impact due to breaking API change.
This prevents confusion over which buffer to use when also inheriting from an
I2cTransaction class.
PR #194 -> e1efaf4 with high impact on display drivers due to breaking API change.
They've temporarily been lost.
PR #221 -> f780c2a.
Tested in hardware by @genbattle.
This replaces the STM32 device headers in ext/st/ with a git subtree of modm-io/cmsis-header-stm32 and updates the DFG to work for STM32L devices and adds all available device files.
PR #226 -> da784bd with medium impact on STM32 targets.
Tested in hardware by @salkinium.
This fixes several issues in the ZeroMQ backend.
PR #194 -> a8a2322 with low impact.
In the progress of adding raw Ethernet frames as a backend for XPCC communication, each container requires a unique id.
When using CAN as a backend filtering is done by component id. Normally, each CAN controller has enough filters to accommodate up to ten components per container. E.g. STM32F4 has 14 CAN filters.
When moving to Ethernet, the Ethernet MAC controller only has two or six filters which may be not enough. The filters are more difficult to configure.
The fifth byte of the MAC address will be used for the container Id and the sixth byte for the component Id. MAC filtering then can be easily implemented by filtering for the first five bytes of the MAC address.
There is no overhead for CAN communication as container Id is omitted.
PR #204 -> 5f5934a with low impact.
PR #202 -> dd3639b with low impact.
Tested in hardware by @7Kronos.
Adds macros for a unified interrupt declaration across all platforms and regardless of being declared in C or C++ source code. This allows us to change the interrupt invocation mechanism in the future without modifying the source code.
In total four macros are added:
XPCC_ISR(vector, attributes...)for declaring a static ISR with attributes (e.g.xpcc_fastcode).XPCC_ISR_NAME(vector)for getting the platform specific ISR name.XPCC_ISR_DECL(vector)for forward declarations of ISRs.XPCC_ISR_CALL(vector)for calling ISRs manually from code.
XPCC_ISR_NAME(vector) is backwards compatible, mapping to
{vector}_vect on AVR and {vector}_IRQHandler on ARM Cortex-M.
Consequently, the vector name is now used without _vect or
_IRQHandler suffixes and all occurrences have been renamed.
PR #185 -> 13904f8 with low impact.
This adds a mechanism for asserting runtime conditions on all platforms. The application can specify failure handlers that get called on assertion failure and can specify abandonment behavior depending on the failure. The abandonment handler can also be overwritten to provide application specific behavior, like blinking an LED or logging the failure.
For details see: http://blog.salkinium.com/xpccs-error-model
PR #185 -> 13904f8 with low impact.
Tested in hardware by @salkinium.
The optimization level can be set in project.cfg as
build.optimization=level and overwritten using the command line
argument optimization=level.
PR #195 -> 5e547ab.
Tested in hardware by @strongly-typed.
This feature adds a ZeroMQ implementation of the XPCC backend as a replacement for TIPC on hosted targets and examples to show this new functionality.
PR #176 -> a00d3cc.
Tested in hardware by @strongly-typed.
PR #194 -> b21f502.
Tested in hardware by @strongly-typed.
Adds a 'naming-schema' and 'invalid-device' tag to the device files to allow to enumerate all valid device names from the device files alone. Removes the size_id attribute for AVRs because it is redundant with the name and not used by the AVR DFG merger. Uses local imports in the Python code and therefore removes the need to update the python path in every file.
PR #189 -> d949fee with low impact.
Deduplication by using Jinja2 macros to deduplicate the linker script formatting followed by clean up of unused linker sections.
PR #188 -> a379e61 with low impact on ARM Cortex-M targets.
Tested in hardware by @salkinium.
Adds --specs=nano.specs to linker flags.
This saves up to 2kB of static data and ~1.5kB of code.
PR #187 -> cb0a11e with medium impact on ARM Cortex-M targets.
Tested in hardware by @salkinium.
This change updates the device file generator (DFG) to generate the patches we added to the device files manually now automatically. Any drivers that needed minor changes due to this were updated.
PR #183 -> 08784cd with low impact.
The xpcc/architecture/util.hpp macros have been renamed and
properly documented.
A new header xpcc/architecture/legacy_macros.hpp contains backwards
compatible mappings for application code. All occurrences of the non-
namespaced macros in xpcc have been replaced. The backwards-compatible
mapping can be disabled by declaring the XPCC_DISABLE_LEGACY_MACROS
macro to the compiler.
- ALWAYS_INLINE -> xpcc_always_inline
- ATTRIBUTE_UNUSED -> xpcc_unused
- ATTRIBUTE_WEAK -> xpcc_weak
- ATTRIBUTE_ALIGNED(n) -> xpcc_aligned(n)
- ATTRIBUTE_PACKED -> xpcc_packed
- ATTRIBUTE_FASTCODE -> xpcc_fastcode
- ATTRIBUTE_FASTDATA -> xpcc_fastdata
- ATTRIBUTE_MAY_ALIAS -> xpcc_may_alias
- CONCAT(a,b) -> XPCC_CONCAT(a,b)
- STRINGIFY(a) -> XPCC_STRINGIFY(a)
- XPCC__ARRAY_SIZE(x) -> XPCC_ARRAY_SIZE(x)
- likely(x) -> xpcc_likely(x)
- unlikely(x) -> xpcc_unlikely(x)
Note that the ENUM_CLASS_FLAG was replaced with xpcc::Flags32 and
is not completely backwards compatible (Interrupt vs Interrupt_t).
PR #182 -> 9940a65 with high impact due to breaking API change.
Includes better handling of platform specific startup code, a better location for linkerscripts and minor code cleanup.
PR #180 -> 0dbf73c with low impact on ARM Cortex-M targets.
Tested in hardware by @salkinium.
PR #175 -> 26471ab.
Tested in hardware by @strongly-typed.
PR #173 -> 3c7cd31.
Tested in hardware by @strongly-typed.
Adds build system and startup script support for ARM Cortex-M7 with double precision FPU as well as CI tests.
PR #173 -> c605416 with low impact on STM32 devices.
Tested in hardware by @strongly-typed.
Update to the latest CMSIS device headers for STM32 and adds a few new device files.
PR #168 -> 84d5bd0 with medium impact on STM32 devices.
Tested in hardware by @salkinium.
Apparently acquire is spelled with a c. This fix breaks the API, sorry!
PR #167 -> fd1b109 with high impact on drivers due to breaking API change.
There are more than one STM32F7 Discovery board available, this renames
the stm32f7_discovery board target to stm32f746g_discovery
PR #165 -> 637e074 with high impact on STM32F7 targets.
Add board support for STM32F103C8T6 Minimum System Development, aka. "Blue Pill", and examples.
PR #154 -> 7ab0132.
Tested in hardware by @strongly-typed.
PR #155 -> 63ad1d3.
Tested in hardware by @salkinium.
Adds initialization code and examples for the DSI and display found on the board.
PR #155 -> 0118a13.
Tested in hardware by @salkinium.
A heap table in the linkerscript describes the memory regions with their traits. The allocator implementation reads this table to initialize the heaps. To allocate memory, the heap that fits the requested traits best is chosen.
Three heap algorithms can be chosen from using the xpcc parameters:
- newlib's dlmalloc (default): Chooses largest continuous heap from page table.
- xpcc's block allocator: Chooses largest heap from page table.
- TLSF: Uses all heaps in the table.
Overloading of the new operator in C++ is provided:
Foo *foo = new (xpcc::MemoryFastData) Foo(args);Finally, linkerscripts can be extended to include additional memory regions that include static data and bss as well as heap sections.
PR #147 -> e2f9b4a with low impact on ARM Cortex-M targets with TLSF allocator.
Tested in hardware by @salkinium.
PR #145 -> 6c1a111.
Tested in hardware by @salkinium.
PR ? -> 2504682.
Tested in hardware by @salkinium.
This replaces the very dynamic xpcc::stm32::SystemClock with a fake
SystemClock class that is hardcoded to a specific clock speed.
This makes porting to new boards easier.
PR #144 -> 170f53a with medium impact on STM32 board targets.
Tested in hardware by @salkinium.
This introduces the FlagsOperators class which contains nothing else but the bitwise operators overloads and comparison functions. This class in then inherited from for the Flags, Configurations and Value classes, enabling transparent use of these operator overloads between the classes.
PR #143 -> a6519c3 with low impact.
PR #138 -> e346020.
Tested in hardware by @salkinium.
Overwriting the weak functions in newlib regarding malloc does not work correctly.
This bug was discovered on the F103 platform, where the first byte of 2B receive transfers was not acknowledged by the master. This resulted in the slave device never placing the data for the 2nd byte on the bus, effectively "sending" 0xff as the second byte.
PR #129 -> 408c309.
Tested in hardware by @strongly-typed.
These changes fix the embedded test runners for AVR and STM32 targets, and fixes bugs in the unit test source code that come from using the cross compilers (float vs. double tolerances, type promotions, etc).
These changes add the TLSF implementation from http://tlsf.baisoku.org and enable it by default, completely replacing the newlib allocator.
Up to three arenas are constructed:
- SRAM: with
.heap1,.heap2if available and.heap3if available - CCM or DTCM: with
.heap0if available - ITCM: with
.heap4if available
These three functions are provided:
malloc: Uses SRAM by default, falls back to CCM if SRAM is fullrealloc: determines source arena by pointer addressfree: determines source arena by pointer address
PR #115 -> ffa4e1b with medium impact on ARM Cortex-M targets.
Tested in hardware by @salkinium.
Please interpret the git history for older changes.