From b51ec04938412d01e8ae17ae3a086d3b4525eefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Sat, 4 Jun 2016 10:15:03 +0200 Subject: [PATCH] logger: fix alignment issue in data message header --- src/modules/logger/logger.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 4e486ab957..555245ba41 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -546,10 +546,14 @@ void Logger::run() for (uint8_t instance = 0; instance < ORB_MULTI_MAX_INSTANCES; instance++) { if (copy_if_updated_multi(sub, instance, buffer + sizeof(ulog_message_data_header_s))) { - ulog_message_data_header_s *header = reinterpret_cast(buffer); - header->msg_type = static_cast(ULogMessageType::DATA); - header->msg_size = static_cast(msg_size - ULOG_MSG_HEADER_LEN); - header->msg_id = sub.msg_ids[instance]; + uint16_t write_msg_size = static_cast(msg_size - ULOG_MSG_HEADER_LEN); + //write one byte after another (necessary because of alignment) + buffer[0] = (uint8_t)write_msg_size; + buffer[1] = (uint8_t)(write_msg_size >> 8); + buffer[2] = static_cast(ULogMessageType::DATA); + uint16_t write_msg_id = sub.msg_ids[instance]; + buffer[3] = (uint8_t)write_msg_id; + buffer[4] = (uint8_t)(write_msg_id >> 8); //PX4_INFO("topic: %s, size = %zu, out_size = %zu", sub.metadata->o_name, sub.metadata->o_size, msg_size);