diff --git a/src/modules/uavcan/uavcan_main.cpp b/src/modules/uavcan/uavcan_main.cpp index ed3ba5e445..5e4c8b228f 100644 --- a/src/modules/uavcan/uavcan_main.cpp +++ b/src/modules/uavcan/uavcan_main.cpp @@ -194,7 +194,7 @@ int UavcanNode::start_fw_server() if (_servers == nullptr) { - rv = UavcanServers::start(2, _node); + rv = UavcanServers::start(_node); if (rv >= 0) { /* diff --git a/src/modules/uavcan/uavcan_servers.cpp b/src/modules/uavcan/uavcan_servers.cpp index 1713b282e7..52f0ce9697 100644 --- a/src/modules/uavcan/uavcan_servers.cpp +++ b/src/modules/uavcan/uavcan_servers.cpp @@ -76,7 +76,7 @@ UavcanServers *UavcanServers::_instance; UavcanServers::UavcanServers(uavcan::INode &main_node) : _subnode_thread(-1), - _vdriver(UAVCAN_STM32_NUM_IFACES, uavcan_stm32::SystemClock::instance()), + _vdriver(NumIfaces, uavcan_stm32::SystemClock::instance()), _subnode(_vdriver, uavcan_stm32::SystemClock::instance()), _main_node(main_node), _tracer(), @@ -101,7 +101,7 @@ UavcanServers::~UavcanServers() _main_node.getDispatcher().removeRxFrameListener(); } -int UavcanServers::stop(void) +int UavcanServers::stop() { UavcanServers *server = instance(); @@ -123,7 +123,7 @@ int UavcanServers::stop(void) return 0; } -int UavcanServers::start(unsigned num_ifaces, uavcan::INode &main_node) +int UavcanServers::start(uavcan::INode &main_node) { if (_instance != nullptr) { warnx("Already started"); @@ -140,7 +140,7 @@ int UavcanServers::start(unsigned num_ifaces, uavcan::INode &main_node) return -2; } - int rv = _instance->init(num_ifaces); + int rv = _instance->init(); if (rv < 0) { warnx("Node init failed: %d", rv); @@ -174,7 +174,7 @@ int UavcanServers::start(unsigned num_ifaces, uavcan::INode &main_node) return rv; } -int UavcanServers::init(unsigned num_ifaces) +int UavcanServers::init() { errno = 0; @@ -268,6 +268,7 @@ int UavcanServers::init(unsigned num_ifaces) return OK; } + __attribute__((optimize("-O0"))) pthread_addr_t UavcanServers::run(pthread_addr_t) { diff --git a/src/modules/uavcan/uavcan_servers.hpp b/src/modules/uavcan/uavcan_servers.hpp index 9a68a8cc25..9d21b8f93f 100644 --- a/src/modules/uavcan/uavcan_servers.hpp +++ b/src/modules/uavcan/uavcan_servers.hpp @@ -72,9 +72,11 @@ */ class UavcanServers { + static constexpr unsigned NumIfaces = 1; // UAVCAN_STM32_NUM_IFACES + static constexpr unsigned MemPoolSize = 64 * uavcan::MemPoolBlockSize; - static constexpr unsigned MaxCanFramsPerTransfer = 63; + static constexpr unsigned MaxCanFramesPerTransfer = 63; /** * This number is based on the worst case max number of frames per interface. With @@ -84,7 +86,7 @@ class UavcanServers * 1 instead of UAVCAN_STM32_NUM_IFACES into the constructor of the virtual CAN driver. */ static constexpr unsigned QueuePoolSize = - (UAVCAN_STM32_NUM_IFACES * uavcan::MemPoolBlockSize *MaxCanFramsPerTransfer); + (NumIfaces * uavcan::MemPoolBlockSize * MaxCanFramesPerTransfer); static constexpr unsigned StackSize = 3500; static constexpr unsigned Priority = 120; @@ -96,8 +98,8 @@ public: virtual ~UavcanServers(); - static int start(unsigned num_ifaces, uavcan::INode &main_node); - static int stop(void); + static int start(uavcan::INode &main_node); + static int stop(); SubNode &get_node() { return _subnode; } @@ -116,8 +118,7 @@ private: pthread_t _subnode_thread; pthread_mutex_t _subnode_mutex; - int init(unsigned num_ifaces); - void deinit(void); + int init(); pthread_addr_t run(pthread_addr_t);