在嵌入式编程中,当描述硬件时,通常需要将结构元素放置在HW工程师设计它们的已知预定义位置.例如,让我们定义一个结构FPGA,它有大约100个寄存器/区域,如下面的简化示例所示:
struct __attribute__ ((__packed__)) sFPGA {
uchar Spare1[0x24];
ushort DiscreteInput;
uchar Spare2[0x7A];
//CPLD_Version is required to be at offset 0xA0, so 0xA0-0x24-2=0x7A
ushort CPLD_Version;
};
Run Code Online (Sandbox Code Playgroud)
现在,我对手动计算感到沮丧和愤怒,并且在结构发生变化时可能出现错误.有没有办法做得更健壮/方便?我试着这样写:
uchar Spare2[0xA0 - offsetof(sFPGA, Spare2)];
Run Code Online (Sandbox Code Playgroud)
但这不会编译抱怨不完整的结构...注意,我的例子是简化的.实际上,必须定义大约20-30个这样的备用字段 - 结构非常大.
我正在使用称为Secugen Pro 20的设备捕获指纹,它拥有自己的Linux SDK,并且我想捕获指纹图像并将其保存为任何图像格式。
他们有这个 typedef unsigned char BYTE;
我声明了我的imageBuffer
BYTE *CurrentImageBuffer;
然后我使用设备规格为其分配内存
CurrentImageBuffer = malloc(device_info.ImageWidth*device_info.ImageHeight);
在我的代码的某个点上,我捕获图像并将其CurrentImageBuffer
作为参数传递给捕获函数:
SGFPM_GetImageEx(m_hFPM, CurrentImageBuffer, GET_IMAGE_TIMEOUT, NULL, GET_IMAGE_DESIRED_QUALITY)
那就是该行代码之后变量的外观(我可以确认它抓住了一根手指):
我只是不明白如何从该缓冲区继续创建图像,因为它看起来不像ByteArray
我什至不知道那是从中获取我的图像的正确地方,但是那看起来像正确的地方,因为它有缓冲区,对吧?
OBS:我是C新手