Am 29.07.2015 um 14:34 schrieb Karel Gardas:
  Once it boots, tell me how to find the asnwers to your
questions.

compile with gcc test.cpp and run

-----------
#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#include <assert.h>

int main()
{
  uint16_t value = 0x1234;

  {
    volatile uint8_t* ptr = (uint8_t*)&value;
    printf("endianess: %s\n", ptr[0]==0x34 ? "little":"big");
  }

  uint8_t buffer[1+sizeof(value)]={0};
  uint8_t* ptr = buffer;
  if(ptrdiff_t(ptr) % 2 == 0)
  {
    ++ptr;
  }
  uint16_t* unaligned_word = (uint16_t*)ptr;

  ::memcpy(unaligned_word, &value, sizeof(value));

  printf("try to access unaligned word\n");
uint16_t read = *unaligned_word; // here can happen Bus-Errors, Exceptions, whatever your architecture likes printf(" equal to 0x%04X: %s\n", value, read == value ? "YES":"!!NO!!"); // sometimes you get the value - but its still wrong
  printf("  value: 0x%04X\n", read);
  printf("done\n");

  return 0;
}
-----------


Reply via email to