چطور میتونم یک متغیر 64 بیتی رو به دو متغیر 32 بیتی برای ارسال در بستر مدباس در کدویژن تبدیل کنم. میخوام اعدادی با حداکثر مقدار 999,999,999 رو با دوتا متغیر unsigned int ارسال کنم. لطفا اگه نمونه کد دارید برام بذارید. سپاس از راهنمایی*ها
اطلاعیه
Collapse
No announcement yet.
درخواست راهنمایی برای ارسال یک متغیر 64 بیتی با دو متغیر 32 بیتی
Collapse
X
-
پاسخ : درخواست راهنمایی برای ارسال یک متغیر 64 بیتی با دو متغیر 32 بیتی
نوشته اصلی توسط soleimani_m نمایش پست هاچطور میتونم یک متغیر 64 بیتی رو به دو متغیر 32 بیتی برای ارسال در بستر مدباس در کدویژن تبدیل کنم. میخوام اعدادی با حداکثر مقدار 999,999,999 رو با دوتا متغیر unsigned int ارسال کنم. لطفا اگه نمونه کد دارید برام بذارید. سپاس از راهنمایی*ها
دو مورد وجود داره که بهتره بهشون توجه داشته باشید. اول این که رجیسترهای مدباس 16 بیتی هستند و نه 32 بیتی. دوم هم اینکه تا جایی که من اطلاع دارم کدویژن متغیر 64 بیتی ساپورت نمیکنه!
فرض بگیریم کدویژن 64 بیتی ساپورت کنه و مدباس هم 16 بیتی باشه. با این کد میتونید این کار رو انجام بدید:
uint64_t MyU64Data;
uint16_t ModbusReg0;
uint16_t ModbusReg1;
uint16_t ModbusReg2;
uint16_t ModbusReg3;
typedef union u64toU16_u
{
uint64_t u64Data;
uint16_t u16Data[4];
} u64toU16_t;
u64toU16_t u64toU16;
u64toU16.u64Data = MyU64Data;
ModbusReg0 = u64toU16.u16Data[0];
ModbusReg1 = u64toU16.u16Data[1];
ModbusReg2 = u64toU16.u16Data[2];
ModbusReg3 = u64toU16.u16Data[3];
فقط باید حتما کتابخونه stdint.h رو به پروژه اضافه کنید.
- تشکرها 1
دیدگاه