工具/软件:TI C/C++编译器
大家好,
TI v 16.9 0 LTS编译器。
我在不对齐访问时遇到一些问题。 以下是一个示例:
typedef结构
{
uint8_t a_u8;
uint64_t b_u64;
uint8_t e_u8;
}__attribute__(packed) myStruct;
myStruct m_st;
uint8_t f_u8;
uint8_t *g_u8_ptr;
uint64_c;
uINT64_t *d_u64_ptr;
// uint8_t非对齐访问
f_u8 = 0xAA;
g_u8_ptr =&(m_st.e_u8);// e_u8不是32位对齐
的m_st.e_u8 = f_u8; //直接访问工作
*g_u8_ptr = g_u8_ptr; //间接访问工作
// uint64_t非对齐访问
c_u64 = 0xabcdabcdabcdabcdcd;
d_u64_ptr =&(m_st.b_u64);// b_u64未对齐32位。
m_st.b_u64 = c_u64; //直接访问工作
*d_u64_ptr = c_u64; //间接访问导致崩溃
指定(直接或间接)不对齐的uint8_t没有问题-编译器知道如何处理此问题。
但对于uint64_t,我发现间接分配会导致微系统崩溃。
我正在TIRTOS项目中运行此程序,所以我看到System_exit()带有以下转储:
FSR = 0x0100
HFSR = 0x4000万
DFSR = 0x0.0001万
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x0万
谢谢
朱利安