Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

StackOverflow Point

StackOverflow Point Navigation

  • Web Stories
  • Badges
  • Tags
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Web Stories
  • Badges
  • Tags
Home/ Questions/Q 185532
Alex Hales
  • 0
Alex HalesTeacher
Asked: June 10, 20222022-06-10T00:44:05+00:00 2022-06-10T00:44:05+00:00

c++ – Bit fields not storing the assigned value on Arduino Feather M0

  • 0

[ad_1]

I am creating a struct of bit fields to organize a message I am converting into a uint8_t array to send over 900 MHz.

I have created the following class:

Message.h:

class message {
private:
 static const int PAYLOAD_LENGTH; // Length of payload in bytes

 struct Payload
    {
        uint8_t partA: 2;
        uint8_t partB: 2;
        uint8_t partC: 2;
        uint8_t partD: 3;
        uint8_t partE: 5;
        uint8_t partF: 5;
        uint8_t partG: 7;
        uint8_t partH: 7;
        uint8_t partI: 7;
        uint8_t partJ: 8;
        uint8_t partK: 8;
    };

public:
    Message();
    uint8_t *buildTransmission();
    boolean readMessage(uint8_t *message);

    Payload *m_payload;
};

Message.cpp

#include "Message.h"

const int Message::PAYLOAD_LENGTH = 7;

Message::Message()
{
    memset(m_payload, 0, PAYLOAD_LENGTH);
}

uint8_t *Message::buildTransmission()
{
    uint8_t *transmission = (uint8_t *)m_payload;
    return transmission;
}

boolean Message::readMessage(uint8_t *message)
{
    m_payload = (Payload *)message;
    return false;
}

payload.ino:

#include "Message.h"

Message message;
void setup()
{
    Serial.begin(115200);
  
    message.m_payload->partG = 127;
    
    Serial.print("Set as: ");
    Serial.println(message.m_payload->partG);
    Serial.println("Converting to character array");
    uint8_t *trans = message.buildTransmission();
    message.readMessage(trans);
    Serial.print("After conversions: ");
    Serial.println(message.m_payload->angle);
}

void loop()
{
   
}

Result:

Set as: 30
Converting to character array
After conversions: 30

My issue is that I am setting message.m_payload->partG to 127 and it is displaying as 30. To my unknowledagble eyes it seems as if the struct is packed incorectly. I have tried re-ordering my struct fields to biggest size to smallest, adding the __attribute__((__packed__)) to my struct. I have also tried removing the bit field from the 8-bit bit fields, and switching the type to unsigned int. Any help, or suggestions is appreciated.

[ad_2]

  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report
Leave an answer

Leave an answer
Cancel reply

Browse

Sidebar

Ask A Question

Related Questions

  • xcode - Can you build dynamic libraries for iOS and ...

    • 0 Answers
  • bash - How to check if a process id (PID) ...

    • 399 Answers
  • database - Oracle: Changing VARCHAR2 column to CLOB

    • 371 Answers
  • What's the difference between HEAD, working tree and index, in ...

    • 366 Answers
  • Amazon EC2 Free tier - how many instances can I ...

    • 0 Answers

Stats

  • Questions : 43k

Subscribe

Login

Forgot Password?

Footer

Follow

© 2022 Stackoverflow Point. All Rights Reserved.

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.