From 27b3c69e8eaa7381ed846d39e5bbd2ba451f71b6 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 1 Jan 2020 01:52:21 -0500 Subject: [PATCH] Fix parity calculation --- Firmware/MotorControl/encoder.cpp | 8 ++------ Firmware/Tests/test_runner.cpp | 9 ++++++--- Firmware/Tupfile.lua | 2 +- ODrive_Workspace.code-workspace | 9 ++++++++- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Firmware/MotorControl/encoder.cpp b/Firmware/MotorControl/encoder.cpp index c1223d07..6de18e9c 100644 --- a/Firmware/MotorControl/encoder.cpp +++ b/Firmware/MotorControl/encoder.cpp @@ -366,7 +366,7 @@ uint8_t parity(uint16_t v){ v ^= v >> 4; v ^= v >> 2; v ^= v >> 1; - return v & 1; + return (~v) & 1; } void Encoder::abs_spi_cb(){ HAL_GPIO_WritePin(abs_spi_cs_port_, abs_spi_cs_pin_, GPIO_PIN_SET); @@ -379,11 +379,7 @@ void Encoder::abs_spi_cb(){ if (parity_calc == parity_bit) { pos_abs_ = rawVal & 0x3FFF; - // We are going to ignore values all high or low - // This might happen in normal operation, but its unlikely - // The filter will handle these cases - if (pos_abs_ != 0 && pos_abs_ != 0x3FFF) - abs_spi_pos_updated_ = true; + abs_spi_pos_updated_ = true; } } break; case MODE_SPI_ABS_AEAT: { diff --git a/Firmware/Tests/test_runner.cpp b/Firmware/Tests/test_runner.cpp index cae2441c..7d38c29f 100644 --- a/Firmware/Tests/test_runner.cpp +++ b/Firmware/Tests/test_runner.cpp @@ -295,7 +295,7 @@ TEST_SUITE("vel_ramp") { v ^= v >> 4; v ^= v >> 2; v ^= v >> 1; - return v & 1; + return (~v) & 1; } TEST_CASE("Blah") { @@ -321,7 +321,10 @@ TEST_SUITE("vel_ramp") { } TEST_CASE("Parity") { - CHECK(parity(0x0DDF) == 0); - CHECK(parity(0x8DDF) == 1); + CHECK(parity(0x0DDF & 0x7FFF) == 1); + CHECK(parity(0x8DDF & 0x7FFF) == 1); + CHECK(parity(0x5BFF & 0x7FFF) == 0); + CHECK(parity(0x0 & 0x7FFF) == 1); + CHECK(__builtin_parity(0x5BFF & 0x7FFF) == 1); } } \ No newline at end of file diff --git a/Firmware/Tupfile.lua b/Firmware/Tupfile.lua index 16e3aa2a..d329e4e7 100644 --- a/Firmware/Tupfile.lua +++ b/Firmware/Tupfile.lua @@ -191,6 +191,6 @@ build{ if tup.getconfig('DOCTEST') == 'true' then TEST_INCLUDES = '-IC:/Tools/doctest/doctest' - tup.frule{inputs='Tests/test_runner.cpp', command='g++ -std=gnu++17 '..TEST_INCLUDES..' %f -o %o', outputs='Tests/test_runner.exe'} + tup.frule{inputs='Tests/test_runner.cpp', command='g++ -O3 -std=gnu++17 '..TEST_INCLUDES..' %f -o %o', outputs='Tests/test_runner.exe'} tup.frule{inputs='Tests/test_runner.exe', command='%f'} end \ No newline at end of file diff --git a/ODrive_Workspace.code-workspace b/ODrive_Workspace.code-workspace index 6e9385a0..2012b56e 100644 --- a/ODrive_Workspace.code-workspace +++ b/ODrive_Workspace.code-workspace @@ -57,7 +57,14 @@ "fstream": "cpp", "iomanip": "cpp", "optional": "cpp", - "sstream": "cpp" + "sstream": "cpp", + "atomic": "cpp", + "iterator": "cpp", + "memory_resource": "cpp", + "ratio": "cpp", + "string": "cpp", + "mutex": "cpp", + "thread": "cpp" } } }