From 94368b458aad401f704dfa844ffc1f25ae03b212 Mon Sep 17 00:00:00 2001 From: Erki Date: Wed, 29 Jun 2022 16:22:02 +0300 Subject: [PATCH] Remove new-ing from radio instance handling --- main.cpp | 20 ++++++++++++++++---- radio/include/radio_hw_instance.hpp | 8 +++++--- radio/src/radio_hw_instance.cpp | 26 +++++++++++++------------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/main.cpp b/main.cpp index 3857541..959748b 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,7 @@ #include #include +#include #include "radio_hw_instance.hpp" #include "app_logging.hpp" @@ -11,25 +12,36 @@ namespace Hal = Peripherals::Hal::Samd; namespace { +[[noreturn]] void m_faultHandler(const char* file, const int line) +{ + SKULLC_LOG_FATAL("Fault: %s:%d", file, line); + + __asm__("BKPT"); + + while (true); } -int main(void) +} + +int main() { /* Initializes MCU, drivers and middleware */ atmel_start_init(); + Utility::Assert::setHandler(m_faultHandler); + gpio_set_pin_level(OUT_LED_TX, false); App::Logging::setup(); - radio::HwInstance* radio_hw = radio::HwInstance::create_instance(); + radio::HwInstance radio_hw; /* Replace with your application code */ - while (1) + while (true) { gpio_toggle_pin_level(OUT_LED_RX); - const int16_t radio_num = radio_hw->register_read(0x1C); + const int16_t radio_num = radio_hw.register_read(0x1C); SKULLC_LOG_INFO("Reg 0x1C: %d", radio_num); diff --git a/radio/include/radio_hw_instance.hpp b/radio/include/radio_hw_instance.hpp index 435a575..f501893 100644 --- a/radio/include/radio_hw_instance.hpp +++ b/radio/include/radio_hw_instance.hpp @@ -12,7 +12,11 @@ namespace radio struct HwInstance { - static HwInstance* create_instance(); + HwInstance(); + HwInstance(const HwInstance&) = delete; + HwInstance(HwInstance&&) = delete; + HwInstance& operator=(const HwInstance&) = delete; + HwInstance& operator=(HwInstance&&) = delete; void irq_handler(); @@ -21,8 +25,6 @@ struct HwInstance private: spi_m_sync_descriptor* m_spi = nullptr; io_descriptor* m_spi_io = nullptr; - - HwInstance(); }; } diff --git a/radio/src/radio_hw_instance.cpp b/radio/src/radio_hw_instance.cpp index 7fa75e4..8d03d69 100644 --- a/radio/src/radio_hw_instance.cpp +++ b/radio/src/radio_hw_instance.cpp @@ -10,6 +10,7 @@ #include #include +#include namespace { @@ -39,9 +40,19 @@ void _startup() namespace radio { -HwInstance* HwInstance::create_instance() +HwInstance::HwInstance() { - return new HwInstance{}; + SKULLC_ASSERT_SAFE(!_INSTANCE); + + radio_gpio_init(); + + m_spi = radio_spi_init(); + spi_m_sync_get_io_descriptor(m_spi, &m_spi_io); + spi_m_sync_enable(m_spi); + + _INSTANCE = this; + + _startup(); } void HwInstance::irq_handler() @@ -78,15 +89,4 @@ void HwInstance::register_write(const uint8_t address, const uint8_t value) gpio_set_pin_level(OUT_RADIO_CS, true); } -HwInstance::HwInstance() -{ - radio_gpio_init(); - - m_spi = radio_spi_init(); - spi_m_sync_get_io_descriptor(m_spi, &m_spi_io); - spi_m_sync_enable(m_spi); - - _startup(); -} - }