From 10779303306ba619393d584a757532cf6a454531 Mon Sep 17 00:00:00 2001 From: Jay Robson Date: Tue, 1 Oct 2024 13:39:28 +1000 Subject: [PATCH] add forced inlines --- .gitignore | 1 + soft_twi.cpp | 6 +++--- soft_twi.hpp | 25 +++++++++++++------------ tone.hpp | 7 ++++--- util.hpp | 1 + 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index b8da58f..304204a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ sketch.yaml midi_data.hpp +build diff --git a/soft_twi.cpp b/soft_twi.cpp index 9658a08..9cbc404 100644 --- a/soft_twi.cpp +++ b/soft_twi.cpp @@ -4,11 +4,11 @@ void SoftTWI::set_pin(uint8_t pin, bool state) { uint8_t bitmask = digitalPinToBitMask(pin); - volatile uint8_t& reg = *portModeRegister(digitalPinToPort(pin)); + volatile uint8_t* reg = portModeRegister(digitalPinToPort(pin)); if(state) { - reg &= ~bitmask; + *reg &= ~bitmask; } else { - reg |= bitmask; + *reg |= bitmask; } } diff --git a/soft_twi.hpp b/soft_twi.hpp index d060f94..9c25faa 100644 --- a/soft_twi.hpp +++ b/soft_twi.hpp @@ -2,36 +2,37 @@ #pragma once #include +#include "util.hpp" struct SoftTWI { constexpr SoftTWI(unsigned sda, unsigned scl, unsigned delay = 0); void begin(); - inline void sleep(uint8_t=1) {} - inline void wait_scl(); + inline void sleep(uint8_t=1) AW_IN {} + inline void wait_scl() AW_IN; void set_pin(uint8_t, bool); - inline void set_sda(bool); - inline void set_scl(bool); + inline void set_sda(bool) AW_IN; + inline void set_scl(bool) AW_IN; bool read_pin(uint8_t); - inline bool read_sda(); - inline bool read_scl(); + inline bool read_sda() AW_IN; + inline bool read_scl() AW_IN; - inline void write_bit(bool); + inline void write_bit(bool) AW_IN; bool write(uint8_t); unsigned write(const uint8_t*, unsigned); - inline bool read_bit(); + inline bool read_bit() AW_IN; uint8_t read(bool=true); void read(uint8_t*, unsigned, bool=false); - inline bool start_read(uint8_t); - inline bool start_write(uint8_t); + inline bool start_read(uint8_t) AW_IN; + inline bool start_write(uint8_t) AW_IN; - inline void start(); - inline void end(); + inline void start() AW_IN; + inline void end() AW_IN; private: unsigned _sda; diff --git a/tone.hpp b/tone.hpp index f318f33..87bf949 100644 --- a/tone.hpp +++ b/tone.hpp @@ -2,6 +2,7 @@ #pragma once #include +#include "util.hpp" struct Tone { uint32_t phase; @@ -12,15 +13,15 @@ struct Tone { static void init(); - inline bool active() const { + inline bool active() const AW_IN { return amplitude > 0; } - inline void update(uint32_t t) { + inline void update(uint32_t t) AW_IN { phase += t * frequency; } - inline int get() const { + inline int get() const AW_IN { uint8_t id = phase >> 12; return (int)sin_lookup[id] * amplitude; } diff --git a/util.hpp b/util.hpp index d99ad73..3e5a0cd 100644 --- a/util.hpp +++ b/util.hpp @@ -26,4 +26,5 @@ inline void debug_blink() { #define bm(V) (((uint64_t)1 << V) - 1) #define size(V) (sizeof(V) / sizeof(V[0])) +#define AW_IN __attribute__((always_inline))