Robofun 機器人論壇
標題:
有關Arduino 結構(struct)大小的問題
[打印本頁]
作者:
adolclistin
時間:
2017-9-7 15:16
標題:
有關Arduino 結構(struct)大小的問題
各位前輩 大家好
目前使用Arduino ethernet shield 與電腦互傳資料,其中以是tcp的通訊協定來傳送結構(struct)
其中結構如下:
typedef unsigned char uchar;
#pragma pack(1)
typedef struct Motorinfo{
uchar structure_start;
uchar MotorNo;
int rpm;
int deg;
bool dir;
uchar structure_end;
}Motorinfo;
#pragma pack()
對齊方式是以一個byte進行對齊
在電腦裡顯示此結構大小是12byte
但是在arduino 的程式裡只顯示出此結構大小是8byte
所以資料傳過來後,最後一個成員structure_end沒有值,deg和dir這兩個成員的數值是錯的。
且我也測試過,電腦傳電腦是沒有問題。初步可以排除電腦傳送的錯誤問題。
想請教在Arduino裡的struct是否有什麼跟一般電腦裡的c++不同,或是需要注意的。
先謝過各位前輩。
作者:
超新手
時間:
2017-9-7 16:56
本帖最後由 超新手 於 2017-9-7 17:03 編輯
int 的長度定義和 MCU 的種類有關
而不是固定的
所以, 比較簡單的做法
就是直接指定大小即可
也就是把 int 改成 int32_t
typedef struct Motorinfo{
uchar structure_start;
uchar MotorNo;
int32_t rpm;
int32_t deg;
bool dir;
uchar structure_end;
}Motorinfo;
其實不管在 PC 端或 Arduino 都可以直接這樣定義
PC 端有可能需要 #include <stdint.h>
而最好的寫法應該是
typedef struct Motorinfo{
uint8_t structure_start;
uint8_t MotorNo;
int32_t rpm;
int32_t deg;
uint8_t dir;
uint8_t structure_end;
}Motorinfo;
作者:
adolclistin
時間:
2017-9-8 09:02
感謝 超新手幫忙
經過測試後,真的是這個問題,所以我把電腦端的變數也都改為您的建議。
再樣做之後,arduino 所接收到的資料就沒有問題了。
再次謝謝!
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2