FreeEMS Issues - Firmware
|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0000462||Firmware||Init & Config||public||2011-12-03 13:50||2014-02-18 23:05|
|Target Version||0.2.1||Fixed in Version|
|Issue Type||New Feature|
|Risk of Breakage||high|
|Summary||0000462: Design And Implement Space-Efficient Flexible Tables|
|Description||Current adjustable 3D tables have hard coded axis sizes and locations in terms of storage.|
The new way should use a normal struct with the DEFAULT dimensions setup, but the actual code should NOT use the struct at all, in fact, the struct typedef should only be exposed to the data initialisation code.
Instead the new code should be passed a pointer and a size. From that it should read the first two bytes to determine axis lengths, with the first byte specifying the RPM axis length and the RPM axis data being first after the two specifier bytes. The second byte should specify the load axis length and that should be next, all remaining data can be used for table data, thus it's more efficient, always. Code handling this can simply use pointer arithmetic to access the appropriate fields.
This is related to 0000162 which will effectively get implemented at the same time.
Additionally, each set of handlers of this nature will probably need a hard coded axis field size and data field size.
Right now axis are in 16 bit numbers. This could change to give us even larger data area for tables. The following thread goes over the size changes in detail.
I currently see the firmware using 1k (uint8, uint8, uint8, uint8, uint16) for VE tables and 512 byte (uint8, uint8, uint8, uint8, uint8) for lambda and ignition timing tables. Fuel timing tables could be in the form (uint8, uint8, uint8, uint8, uint16) using 512 bytes to provide full timing tuning in a single table and UI simplicity. However any size combo is possible within the memory allowances.
Validation methods would need to be updated too. And the calculator spreadsheet.
It probably makes sense to implement this with the existing data sizes first to miminise change inside a single block of work. Then the axis can be changed later as a separate block.
|Steps To Reproduce|
|Tags||No tags attached.|