From 8d67483d182990d54fd348a8b4fb6c5c7de85795 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sun, 23 Aug 2015 21:28:47 +0300 Subject: [PATCH 1/2] UAVCAN: using only primary interface for servers --- src/modules/uavcan/uavcan_main.cpp | 2 +- src/modules/uavcan/uavcan_servers.cpp | 11 ++++++----- src/modules/uavcan/uavcan_servers.hpp | 13 +++++++------ 3 files changed, 14 insertions(+), 12 deletions(-) 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); From ae83543b63e3e9410dd2a9d6aab93367189fc19e Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sun, 23 Aug 2015 18:12:51 +0200 Subject: [PATCH 2/2] Save RAM on UART buffer size --- nuttx-configs/px4fmu-v2/nsh/defconfig | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/nuttx-configs/px4fmu-v2/nsh/defconfig b/nuttx-configs/px4fmu-v2/nsh/defconfig index e828e42be0..59abc22fb6 100644 --- a/nuttx-configs/px4fmu-v2/nsh/defconfig +++ b/nuttx-configs/px4fmu-v2/nsh/defconfig @@ -564,7 +564,7 @@ CONFIG_USART1_2STOP=0 # USART2 Configuration # CONFIG_USART2_RXBUFSIZE=600 -CONFIG_USART2_TXBUFSIZE=1860 +CONFIG_USART2_TXBUFSIZE=1100 CONFIG_USART2_BAUD=57600 CONFIG_USART2_BITS=8 CONFIG_USART2_PARITY=0 @@ -575,8 +575,8 @@ CONFIG_USART2_OFLOWCONTROL=y # # USART3 Configuration # -CONFIG_USART3_RXBUFSIZE=400 -CONFIG_USART3_TXBUFSIZE=400 +CONFIG_USART3_RXBUFSIZE=300 +CONFIG_USART3_TXBUFSIZE=300 CONFIG_USART3_BAUD=57600 CONFIG_USART3_BITS=8 CONFIG_USART3_PARITY=0 @@ -587,8 +587,8 @@ CONFIG_USART3_OFLOWCONTROL=y # # UART4 Configuration # -CONFIG_UART4_RXBUFSIZE=400 -CONFIG_UART4_TXBUFSIZE=400 +CONFIG_UART4_RXBUFSIZE=300 +CONFIG_UART4_TXBUFSIZE=300 CONFIG_UART4_BAUD=57600 CONFIG_UART4_BITS=8 CONFIG_UART4_PARITY=0 @@ -599,8 +599,8 @@ CONFIG_UART4_2STOP=0 # # USART6 Configuration # -CONFIG_USART6_RXBUFSIZE=400 -CONFIG_USART6_TXBUFSIZE=400 +CONFIG_USART6_RXBUFSIZE=300 +CONFIG_USART6_TXBUFSIZE=300 CONFIG_USART6_BAUD=57600 CONFIG_USART6_BITS=8 CONFIG_USART6_PARITY=0 @@ -611,8 +611,8 @@ CONFIG_USART6_2STOP=0 # # UART7 Configuration # -CONFIG_UART7_RXBUFSIZE=400 -CONFIG_UART7_TXBUFSIZE=400 +CONFIG_UART7_RXBUFSIZE=300 +CONFIG_UART7_TXBUFSIZE=300 CONFIG_UART7_BAUD=57600 CONFIG_UART7_BITS=8 CONFIG_UART7_PARITY=0 @@ -623,8 +623,8 @@ CONFIG_UART7_2STOP=0 # # UART8 Configuration # -CONFIG_UART8_RXBUFSIZE=400 -CONFIG_UART8_TXBUFSIZE=400 +CONFIG_UART8_RXBUFSIZE=300 +CONFIG_UART8_TXBUFSIZE=300 CONFIG_UART8_BAUD=57600 CONFIG_UART8_BITS=8 CONFIG_UART8_PARITY=0 @@ -667,7 +667,7 @@ CONFIG_CDCACM_NWRREQS=4 CONFIG_CDCACM_NRDREQS=4 CONFIG_CDCACM_BULKIN_REQLEN=96 CONFIG_CDCACM_RXBUFSIZE=600 -CONFIG_CDCACM_TXBUFSIZE=5000 +CONFIG_CDCACM_TXBUFSIZE=4000 CONFIG_CDCACM_VENDORID=0x26ac CONFIG_CDCACM_PRODUCTID=0x0011 CONFIG_CDCACM_VENDORSTR="3D Robotics"