相关疑难解决方法(0)

如何在所需的偏移量处设置结构元素

在嵌入式编程中,当描述硬件时,通常需要将结构元素放置在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个这样的备用字段 - 结构非常大.

c++ struct offsetof

6
推荐指数
1
解决办法
817
查看次数

从无符号字符缓冲区创建图像

我正在使用称为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)

那就是该行代码之后变量的外观(我可以确认它抓住了一根手指):

currentImageBuffer表示形式

我只是不明白如何从该缓冲区继续创建图像,因为它看起来不像ByteArray

我什至不知道那是从中获取我的图像的正确地方,但是那看起来像正确的地方,因为它有缓冲区,对吧?

OBS:我是C新手

c linux image fingerprint

4
推荐指数
1
解决办法
263
查看次数

标签 统计

c ×1

c++ ×1

fingerprint ×1

image ×1

linux ×1

offsetof ×1

struct ×1