前提・実現したいこと
ARM32BitのCPUにC言語の直書きしています。
メンバーのTypeが異なる構造体があり、構造体の先頭メンバーのAddressを取得したうえ、
sizeof(メンバーaddress)でメンバーTypeの大きさを取得し、Address + sizeというふうにpointerを増やしながらBufferを書き換えしようとします。
しかし、sizeof(address)でメンバーのおおきさを得ようとすると全て4byteが返ってきます。もちろん、sizeof(メンバー名)を入れたら正しいbyte値が返ってきます。
どうしてでしょうか。
sizeof()にaddressを当ててtype sizeを得るためにはどうすればよいでしょうか。
sizeofではなくても他の良い方法があればアドバイスください。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
typedef struct{
uint8_t mem_a;
uint16_t mem_b;
}buffer;
uint8_t * pntbuff;
uint8_t * pntbuff2;
uint8_t size;
pntbuff = (uint8_t*)&buffer.mem_a; //mem_aのAddressを取得
*pntbuff = 100;
size = sizeof(pntbuff); //mem_aのtype sizeを取得、しかし1byteではなく4byteが得られる
pntbuff2 = pntbuff+size; //addressの増加
*pntbuff2 = 200; // 4byte前へ飛んでしまう。
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー