![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Rất đơn giản thôi bạn ah, trên C bạn dùng struct lưu 3 số integer 16 bit để chứa dữ liệu
Code:
typedef struct{
unsigned int16 ADC0;
unsigned int16 ADC1;
unsigned int16 ADC2;
} USBAdc;
Còn trên C# bạn làm việc ngược lại, khai báo 1 struct hoặc class tương ứng nhưng nhớ dùng thêm chỉ thị alignment từng byte 1(để đảm bảo đúng thứ tự dữ liệu): Code:
using System.Runtime.InteropServices;
...
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public class USBAdc
{
public UInt16 ADC0;
public UInt16 ADC1;
public UInt16 ADC2;
....
static public USBAdc FromByteArray(byte[] byte_Array)
{
USBAdc ret;
GCHandle handle = GCHandle.Alloc(byte_Array, GCHandleType.Pinned);
ret = (USBAdc)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(USBAdc));
handle.Free();
return ret;
}
}
Code:
USBAdc adc= USBAdc.FromByteArray(usb_array_data); ... adc.ADC0 adc.ADC1 adc.ADC2
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
|
|
|
|
|
#2 |
|
Đệ tử 1 túi
Tham gia ngày: Mar 2010
Bài gửi: 14
: |
Cảm ơn anh, em sẻ nghiên cứu thuật toán của anh nói, có gì mới em sẻ hồi âm lại.
Chào anh! |
|
|
|
![]() |
|
|