Cypress技术论坛
直播中

钱杨静

7年用户 222经验值
私信 关注
[问答]

将结构缓冲区指针转换为struct不起作用?

我想把一个字节数组指针转换成以下结构:
TyBuffsStult{
UIT1616T数据1;
UIT1616T DATA2;
UIT1616T数据3;
Uti1616T数据4;
UIT88T数据5;
BuleRevisValueSut;
我这样做:
无效函数(UTI8*T*缓冲器){
BeleRevsValueSt**值;
值=(BuleReVESeValueSt**)和缓冲器〔1〕;
函数2(值-gt;DATA1);
}
在调试时,一切看起来都很好,但是当我进入函数2时,程序跳转到StuttuppPoSoC63YMCMPLUS S中的故障处理程序。
有没有人理解这为什么不起作用?

以上来自于百度翻译


     以下为原文
  I want to cast a byte array pointer to the following structure:

typedef struct {
    uint16_t    data1;
    uint16_t    data2;
    uint16_t    data3;
    uint16_t    data4;
    uint8_t     data5;
} BleServicesValues_t;

I do something like this:

void func1(uint8_t* buffer) {
    BleServicesValues_t* values;
    values = (BleServicesValues_t*) &buffer[1];
    func2(values->data1);
}

While debugging, everything looks fine, but when I step into func2, the program jumps to Fault_Handler in startup_psoc63_cm0plus.S.

Does anyone understand why this is not working?

回帖(1)

刘浩

2018-9-28 15:51:59
这是一个对齐问题。应该将BuleReVESeValueStt强制转换为4(32位架构)的多个地址。您可能正在访问一个终止于1的地址。
如果你在缓冲区(0)抛锚,你可能会很好。

以上来自于百度翻译


     以下为原文
  That's an alignment problem. The BleServicesValues_t cast should be set to an address that is multiple of 4 (32-bit architecture). You are probably accessing an address ending to 1.
 
If you cast at buffer[0] you probably be fine.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分