typedef struct __attribute__((__packed__))
{
uint8_t op_code;
uint8_t flags;
uint32_t logical_block_addr;
uint8_t group_num;
uint16_t tx_length;
uint8_t control;
} SCSI_READ10_t;
when I am assigning some value to tx_length core is showing some exception. Is the assembly of tx_length assignment compiler is putting strh/ldrh(half-byte) instruction throwing error its not 2 byte aligned . But not aligned accesses are enabled. So my question is : -
Q1. Can I access not aligned memory with strh/ldrh (suppose addr :- 0xxxx37) if non aligned accesses are enabled for core ?
Q2. Do compiler take care of these no aligned access and will convert not aligned half word into two 1 byte accesses ?
Generally speaking, enable data caching of that memory space is a good solution.
As Yasuhiko showed, GCC may refine the assembly code for unaligned access.
But I think it may rely on GCC version or build options and may impact performance.
So my suggestion is:
If you can, enable data cache and map that space to cacheable.
If you cannot enable cache for that space:
1 Search GCC documents for unaligned access conversion
2 Byte copy this packed field to a buffered unpacked structure if it doesn't update frequently.