* Change X axis in memory orientation to match Y
* X & Y axes can use the same type (Ie.e class)
* Table3D axis iterator: replace reverse() with rbegin()
* Use iterators as part of unit tests
* Doxygen fixes/corrections
* Missing include
* 1. Add int16_byte class
2. Add axis factory function for int16_byte instances
(flyweight pattern)
* Separate out axis iteration and I/O conversions
* Optimize for size and performance.
* Fix unit test
* Consistent set of div100 functions
* Add typedef for trimTable3d
* Performance: use div100() function
when applying fuel trim corrections
* Silly ARM compiler!
* Unit test fixes
* Fix tests: expected & actual parameters were swapped
* div100(): add 8-bit overloads for completeness
* Fix unit tests
1. Force call to correct div100() overload
2. Use appropriately typed assertion
* Restore use of USE_LIBDIVIDE preprocessor symbol
* Add div360() - encapsulate libdivide use
* Fix copy/paste issue.
* Bi-linear interpolation - round towards nearest integer
Add the equivalent of 0.5 to the final calculation pre-rounding.
This will have the effect of rounding to the nearest integer, rather
than truncating. I.e. rounding down
* Unit tests: isolate table tests and check interpolation x/y bins
* Unit tests: add native table3d tests
* Unit tests: derive min/max from axis test values
* Unit tests: more detailed messages
* Unit tests: fix rounding & unit tests
* Performance
* Performance: use uint16_t instead of unsigned long
for the fixed point math: we only need the fractional
part. I.e. 1.16 not 16.16
* Use narrowest possible type
* Optimise bin position logic for performance
* Only promote to uint32_t when really required.
* Simplify bin checks - no zero width bins
* Save memory: use a single byte for the last bin caches
* Performance: increment pointers instead of
repeatedly dereferncing array by index.
* Comments
* Incorrect array underrun logic
* Rename type, comments
* Fix unit tests
* Use table_row_iterator_t to adjust ignitionTable
* Separate 2d & 3d table code, abstract page to table iterator conversion.
This is just moving code around in preparation for future changes.
* Reduce table RAM (.bss) usage
Generate a separate type for each possible
3d axis & size combination.
This turns what was runtime information into
compile time data.
* Save 1 byte per table.
Use a flag value (INT16_MAX) instead of a separate boolean
flag
* File renaming
table_iterator -> table3d_iterator.h
table3d.h -> table3d_interpolate.h
table3d.cpp -> table3d_interpolate.cpp
table3d_types.h -> table3d.h
* Optimize page.cpp: reduce code clutter, maintain performance
* Reduce flash usage
* Encapsulate table metadata
* Performance - hoist if statement
* Replace function with macro
* Use a packed enum as a type identifier
Use a packed enum as a type identifier
Slimmer data types
* Use table iterators for random access to table
values and axis.
* Centralize write buffer check
* Encapsulate 16-bit reference concept
* Performance: make table iterators proper classes
This allows us to chain calls on temporaries - not possible
with regular function calls.
* Performance: encapsulate EEPROM update
& address increment
* Save flash - don't duplicate function
* Performance: directly invalidate table cache
* Separate out iterator reversal
* Separate out entity mapping & per-byte access
Much faster, smaller code footprint & easier to understand
* Code quality fixes
* Separate out axis metadata
* Doxygen comments
* Separate int16_ref into separate file
* Separate out table axies & values into separate types
No need for metadata types & more localised code.
E.g. creating iterators is now alongside the data over
which they iterate.
* Doxygen
* one test per function
* add tests
* use initialiseSchedulers in tests
* remove generic tests for schedules
* fix schedule accuracy tests
* fix warning static function never defined
* fix test_schedule not working
add temp test file to gitignore
improve schedule testing
add check for schedule delays and pending variants
move time sampling to callback methods
add comments and improve pending tests