From 78d357cb0cb3611b0b693abe52a6b94a96e03ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Sat, 4 Jun 2016 17:23:20 +0200 Subject: [PATCH] logger: free up ~200B stack size we now use the already existing buffer for logging messages, which is allocated on the heap. In fact, stack usage was too high before this, now it's ok again. --- src/modules/logger/logger.cpp | 20 ++++++++++++++------ src/modules/logger/messages.h | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 38cd944cf9..f43ada64c9 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -476,6 +476,10 @@ void Logger::run() max_msg_size += sizeof(ulog_message_data_header_s); + if (sizeof(ulog_message_logging_s) > max_msg_size) { + max_msg_size = sizeof(ulog_message_logging_s); + } + if (max_msg_size > _msg_buffer_len) { if (_msg_buffer) { delete[](_msg_buffer); @@ -596,16 +600,20 @@ void Logger::run() //check for new mavlink log message if (mavlink_log_sub.check_updated()) { mavlink_log_sub.update(); - ulog_message_logging_s log_msg; - log_msg.log_level = mavlink_log_sub.get().severity + '0'; - log_msg.timestamp = mavlink_log_sub.get().timestamp; const char *message = (const char *)mavlink_log_sub.get().text; int message_len = strlen(message); if (message_len > 0) { - strncpy(log_msg.message, message, sizeof(log_msg.message)); - log_msg.msg_size = sizeof(log_msg) - sizeof(log_msg.message) - ULOG_MSG_HEADER_LEN + message_len; - write(&log_msg, log_msg.msg_size + ULOG_MSG_HEADER_LEN); + uint16_t write_msg_size = sizeof(ulog_message_logging_s) - sizeof(ulog_message_logging_s::message) + - ULOG_MSG_HEADER_LEN + message_len; + _msg_buffer[0] = (uint8_t)write_msg_size; + _msg_buffer[1] = (uint8_t)(write_msg_size >> 8); + _msg_buffer[2] = static_cast(ULogMessageType::LOGGING); + _msg_buffer[3] = mavlink_log_sub.get().severity + '0'; + memcpy(_msg_buffer+4, &mavlink_log_sub.get().timestamp, sizeof(ulog_message_logging_s::timestamp)); + strncpy((char*)(_msg_buffer+12), message, sizeof(ulog_message_logging_s::message)); + + write(_msg_buffer, write_msg_size + ULOG_MSG_HEADER_LEN); } } diff --git a/src/modules/logger/messages.h b/src/modules/logger/messages.h index 4ce963c1dc..a38692db0d 100644 --- a/src/modules/logger/messages.h +++ b/src/modules/logger/messages.h @@ -115,7 +115,7 @@ struct ulog_message_logging_s { uint8_t log_level; //same levels as in the linux kernel uint64_t timestamp; - char message[255]; + char message[200]; }; struct ulog_message_parameter_header_s {