Commit Graph

47 Commits

Author SHA1 Message Date
tx_haggis 9bbd16c81b
Performance: optimize division (#1082)
* Add udiv_32_16

* Apply udiv_32_16() where possible

* Convert udiv_32_16 to assembler
It's worth 20 loop/s

* Remove unused functions

* Remove degreesPeruSx2048 - unused

* Remove angleToTime - replace with direct calls
1. Drop angleToTime()
It's slow, only partially implemented and adds zero value
(and has MISRA violations)
2. Consistent function naming
3. Doxygen

* triggerPri_Nissan360 shouldn't set timePerDegree.
It will be overwritten every loop by doCrankSpeedCalcs()

* Use angleToTimeMicroSecPerDegree() instead of timePerDegree
No loss in performance
Increased injection open/close time accuracy (so unit test values must change)
Can remove timePerDegree global.

* Hide (encapsulate) crank math globals.

* Base all angle to time conversions on decoder computed variables.
This is within 2us of the revolution based method
and is much faster - which is essentially zero percent change.

* Performance: move calculation of degreesPeruSx32768
into decoders.
Remove doCrankSpeedCalcs() - it's doing nothing
at the moment.

* Apply libdivide to triggerSetEndTeeth functions.
Since triggerToothAngle is set once at initialization
time, we can generate the libdivide struct
once and reuse it many times.

* Remove lastToothCalcAdvance - unused

* Replace 16-bit division with shift

* Replace 32-bit divison with 16-bit division

* Avoid 32-bit division; use div100()

* inline percentage()

* Optimize div100()

* MISRA fixes

* Replace magic numbers with #defs

* Replace libdivide structs with inline constants
No perf or memory changes

* Use fixed types for PWM max count variables

* Accurate rounded integer division
* Formalise rounding behavior (DIV_ROUND_CORRECT)
* Apply DIV_ROUND_CORRECT to DIV_ROUND_CLOSEST(),
UDIV_ROUND_CLOSEST(), div100(), div360(),
percentage() & halfPercentage()
* Add, fix & improve unit tests

* Add udiv_32_16_closest()

* Perf: Limit percentage calculations to 16-bits

* MISRA fixes

* Add compare_executiontime() to encapsulate common perf testing code

* Signed to unsigned division

* Convert ignitionLimits() to an inline function.
Slight speed up, probably due to removing
multiple evaluations of macro arguments.

* Split unit tests up.

* udiv_32_16 - check for valid parameters
2023-11-06 09:10:08 +11:00
Josh Stewart 2fc29ceef5 MISRA cleanup rule: misra-c2012-8.2 2022-11-06 09:43:29 +11:00
Afroboltski 75d6c2ff61
Air Conditioning Control - Feature Implementation (#665)
* 19.09.2021

* Final testing of AC Control, some idle features fixed

AC control feature added, better than the existing idle-up feature (which can still be used for other things, e.g. electrical load detection). Air conditioning is locked out with coolant temp, RPM high/low, and high TPS. So the A/C automatically cuts out when driving hard.

Idle step now works correctly with closed loop PWM, open loop PWM, and closed+open loop PWM. Untested with stepper motor, but no reason it shouldn't work.

* Fixed mistakenly incremented page sizes

* Initial changes as per HWright9

-Renamed engineRunSeconds to acAfterEngineStartDelay
-Formatted large if statements better
-Fixed acStartDelay overflow bug
-Improved readability of logic

* Final fixes as per HWright9's feedback

-Add high/low RPM lockout delay, similar to the high TPM lockout delay
-General tidy-up

* Added stand-alone fan, moved config data in EEPROM

-Added additional configurable stand-alone A/C fan output, for when there is dedicated cooling fan for the A/C compressor. This is independent of the engine cooling fan logic.
-Moved config storage in EEPROM to configPage9, as noisymime's SD card logging has used the (previously unused) bytes I had used in configPage13.
-Minor bug fix - rename Aux in 1-16 to Aux in 0-15

* Revert to current master branch - as of master commit 97f8ef795a

* A/C Control Re-Integrated from AC-Control-Clean-3 (@Corey-Harding). Tested & ready to merge.

Additionally, added @HazuTo25's lines into the update() routine to configure default A/C settings.

* Changed updates.ino to just set A/C to disabled

* Fix change reverted by mistake - master merge commit 73badbce8c

* Fix remaining mistakes from previous master merge

* Remove test statements left in by mistake

* define unusedBits

* Remove test statements left in by mistake

* Increase timing granularity to 0.1s

* idleUpRPMAdder

* Remove another line put in by mistake by auto merge

* idleUpRPMFixes

* Update speeduino.ino

* Tweak A/C idle up descriptions

* Tweak A/C TS descriptors again

* Fixed alignment bug that turned page 15 config values into gobbledegook.

This had the symptom of the A/C request never triggering, because when a pin was assigned in TS (e.g. I did 27), a completely different pin would be read from config15 (in my case 22 - connecting the button to pin 22 would work in this case, even though TS was set to 27).

* Fix bit count - should be 6 to match ini file

* Increase minimum RPM lockout granularity

* Change granularity of A/C minimum RPM lockout to 10 RPM; Inline some functions for readability

* Add static inline function prototypes to auxiliaries.h as per the style guide.

* Fixed page 15 merge errors

* Style changes to suit new pinIsUsed() checks in setPinMappings()

* Add PWM Fan Control Minimum Clamp Value when A/C Compressor Engaged

* Fix comment

* Fix bug with stand-alone fan initialisation

Pin was unable to be used in prog. I/O even if fan was disabled, because it was always initialised as an output even if it was disabled. Fixed in this commit.

* Correction to Fahrenheit temperature scaling

* Move A/C updates to correct next release

Co-authored-by: shiznit304 <62686180+shiznit304@users.noreply.github.com>
Co-authored-by: Josh Stewart <josh@noisymime.org>
2022-09-07 10:23:01 +10:00
tx_haggis 3009c39767
Narrow scope of EEPROM_MAX_WRITE_BLOCK to writeConfig (#881)
* EEPROM_MAX_WRITE_BLOCK can be local to writeConfig()
This saves a byte of memory ;-)

* Fix MISRA/lint warnings
Correctly cast address parameter of eeprom_read_block
Statically access table 3d type_key member

* Remove force burn code - unused

* Replace eepromWritesPending with bit set/check

* Refactor: chain write_location instances.
Clearer code.
2022-06-27 11:53:33 +10:00
Tjeerd 20c5e17756
Improve closedloop boost control (#736)
* First try on updating closedloop boost control

* added eeprom updates for backward comp[atibility

* fix merge conflict

* Change updates to next release EEPROM version.

* Fix some issues after merging master

* some cleanup to minimize changes and speedup review

* cleanup updates

* chances on updates to alaign with new table format

* move LUT to new config page in eeprom

* little cleanup

* Update storage.h comments

* fix some ini warnings

Co-authored-by: Tjeerd <tjeerdie@users.noreply.github.com>
2022-06-03 15:44:09 +10:00
Josh Stewart 87e21fc7e2 Increase O2 read frequency to 30Hz
Fixes #799
2022-02-25 15:13:35 +11:00
Josh Stewart b7901568a0 Write to EEPROM more aggressively when engine not running 2022-02-24 10:50:01 +11:00
Josh Stewart 3d627ded34 More efficient EEPROM write deferral 2022-02-22 23:29:41 +11:00
Josh Stewart ccfc344dc3 Move the calibration CRC value functions into storage.x 2022-02-11 11:59:36 +11:00
Josh Stewart c6a37f7347 Implement tableCrcCommand command. Fixes #786 until TS 3.1.07.1 is released
The tableCrcCommand is used by TS to determine what calibrations (IAT, CLT and O2) are currently on the board. This is an optional command, however v3.1.07 unintentionally assumed it was implemented on all boards and gave a 'null' error if the command was not present.
This adds the command for all future versions, but previous releases will need to wait for theTS fix release
2022-02-07 11:05:41 +11:00
Josh Stewart fe33785ec5 Some potential fixes for comms issues with large writes 2022-01-18 16:57:55 +11:00
Josh Stewart e2dd7a388e Fix for O2 calibration not working on mega2560 2022-01-09 17:05:05 +11:00
Josh Stewart 300c8699cc New Comms change to prevent lockup during large table writes 2022-01-07 16:49:04 +11:00
Daniel Tobias b0acb92742
update documentation of EEPROM layout (#694) 2021-10-26 10:01:13 +11:00
tx_haggis 5e409445a4
Use table iterator for EEPROM read/write (#620)
* refactor: use a loop for writeAllConfig.

Future proofing: new pages will get automatically
written

* Call existing [read|store]EEPROMVersion functions

* Common function to compute CRC address

* Bulk write calibration tables

* Use EEPROM get/put instead of hand rolled code

* Typedef the EEPROM address

I.e. the EEPROM.read() parameter type

* Encapsulate eepromWritesPending

* Remove C++ namespaces

* Use table iterators for read/write

* Rename storage.ino to .cpp

This fixes a warning
2021-09-14 16:51:26 +10:00
Pasi Kemppainen 982e52db1b
VVT2 addition and closed loop VVT improvement (#551)
* VVT2 and closed loop VVT improvement

* Fix building for latest changes

* Fix CRC error

Co-authored-by: Josh Stewart <josh@noisymime.org>
2021-04-22 08:56:39 +10:00
tx_haggis 02cb7bebd6
Isolate table3D member access in comms.ino (#545)
* fix!: fix ODR violations

* refactor: move page specific code into a separate CPP file

* refactor: page getter/setter share mapping logic

Extract common page-to-entity mapping logic from
getPageValue() & setPageValue() - place in map_page_offset_to_entity()
and share.

* performance: optimize CRC calc

Calculate page CRC by iterating over entities & tables.

* CRC table calculation - use table iterator

* refactor: use iterators for sendPage()

Re-implement sendPage() using page & table iterators
Future proof & fast

* refactor: sendPageASCII()

Pull put shared code into functions.
Use table iterator

* refactor: use shared axis factor

This puts the axis factor usage in one place

* refactor: encapsulate page size & count

Added getPageCount() & getPageSize()

* Added static_assert for all pages.

* Remove C++ language elements

namesapces, scope resolution, enum struct

* Rename comms.ino to comms.cpp

Provides better encapsulation of non-global
data & functions.

INO files are all mashed together by some
custom process. So everything becomes global and
static functions/variables aren't really private to
 the translation unit. Thus breaking encapsulation :-(
2021-04-21 14:36:27 +10:00
Josh Stewart 57ebf498a1 Add fuel trim tables 5-8 2021-02-15 16:01:28 +11:00
Pasi Kemppainen f67817b4ad
Dwell map addition (#525)
* Add dwell map

* Add information about the dwell settings

* Fix copy/paste error

Co-authored-by: Pasi Kemppainen <pazi88@users.noreply.github.com>
2021-02-12 09:11:42 +11:00
Josh Stewart 414d664c03 Fix for excessive EEPROM writes causing disconnect when loading tune onto blank board 2021-02-03 11:51:17 +11:00
Vitor Moreno B. Sales c59153a9d7
Fix pages 13 and 14 EEPROM allocation (#487)
* Fix pages 13 and 14 EEPROM allocation

* Update must start from the end of EEPROM

* Fix allocation
2021-02-02 09:41:51 +11:00
Tjeerd 6078b7e32a
Changes to prevent board lockup with initial run. (EEPROM all 0xFF) (#463)
Co-authored-by: Tjeerd <tjeerdie@users.noreply.github.com>
Co-authored-by: Josh Stewart <josh@noisymime.org>
2020-12-02 11:04:37 +11:00
Josh Stewart fb15a565ea
Pr/435 (#445). Closes #435
* Add files via upload

* Add files via upload

* Update storage.h

* Update log size

Co-authored-by: DylanRooijakkers <69131866+DylanRooijakkers@users.noreply.github.com>
Co-authored-by: Dylan Rooijakkers <rooijakkersd@gmail.com>
2020-08-23 08:27:44 +10:00
Vitor Moreno B. Sales b29fa21775
Programmable outputs (#396)
* Programmable outputs

* Prevent array overflow

* Show fullStatus variables names on dialog

* Further fixes

* Update with master

Co-authored-by: Josh Stewart <josh@noisymime.org>
2020-08-12 14:21:36 +10:00
Josh Stewart 53c0dedde1 Complete new calibration routines for testing 2020-08-11 12:07:12 +10:00
Josh Stewart 0fe885344f Mostly working temp calibrations (See #422) 2020-08-07 14:30:56 +10:00
Mateusz Muszyński 5b342d27bd
Water methanol injection (#417). Refer #154
* Add water methanol injection

* Set signature back to default

* Set signature back to default

Co-authored-by: Josh Stewart <josh@noisymime.org>
2020-07-22 11:27:21 +10:00
Josh Stewart 90fe79a059 Only allow the oil pressure protection to enable if the oil pressure input is actually on 2020-07-07 16:47:28 +10:00
Tjeerd 1530bb892e
EEPROM emulation on internal flash for STM32F407 (#372)
* Added new Flash EEPROM emulation

# Conflicts:
#	platformio.ini
#	speeduino/board_stm32_official.ino
#	speeduino/init.ino
#	speeduino/src/SPIAsEEPROM/SPIAsEEPROM.cpp
#	speeduino/src/SPIAsEEPROM/SPIAsEEPROM.h

* changes to storage to make SPI flash work again

* cleanup
2020-05-06 15:22:48 +10:00
Josh Stewart 8df2c46833 Initial memory allocation for 2nd fuel map 2019-04-10 15:58:38 +10:00
Josh Stewart 0697819f9c Initial work on CRC32 calcs for pages 2019-03-17 22:14:29 +11:00
Josh Stewart 21cd8609ea Fix a bug where calibration routines could potentially overwrite the early memory areas in EEPROM 2019-02-14 19:53:16 +11:00
Josh Stewart 750d486276 VERY rough initial work on modular boards layout 2019-01-17 20:47:19 +11:00
Josh Stewart f1182d569d
Merge branch 'master' into local_auxin3 2018-07-25 16:38:07 +10:00
Josh Stewart ce0e399201 More warnings cleanup 2018-07-19 23:26:31 +10:00
darren siepka 8dd9ed9fbd improve TS ini selection options
fix bit masking
storage table fix
2018-07-04 01:16:35 +01:00
VitorBoss 27e22eef1b Merge branch 'master' of git://github.com/noisymime/speeduino 2018-02-01 18:28:53 -02:00
Josh Stewart 8e2e3f125b Convert all tables in code to match the numbering in the ini (Probably has bugs for now) 2018-01-24 12:05:50 +11:00
VitorBoss d746de22f8 Increase STM32 max write 2017-12-13 15:21:33 -02:00
Josh Stewart 2989e32f15 Memory adjustments for staging fuel table 2017-11-21 15:17:55 +11:00
Josh Stewart 9d89494666 Expand page 4 to 128 bytes 2017-09-20 12:15:41 +10:00
Josh Stewart 1cd2a0f296 Expand page 2 to 128 bytes in size 2017-09-19 15:09:32 +10:00
Josh Stewart 5b3df5ac4d Merge config pages 6 and 7 2017-09-19 14:51:33 +10:00
Josh Stewart ae780dc940 New per page based EEPROM writes 2017-09-19 14:05:43 +10:00
Josh Stewart ccb6e194b7 Initial work creating a new memory page (pg 11) 2017-07-20 16:54:50 +10:00
Josh Stewart f27f883a5c Add updater mechanism for translating data between firmware versions 2017-05-16 15:05:39 +10:00
Josh Stewart c555bbc060 Move to PlatformIO for project layout 2017-02-06 20:56:46 +11:00