背景
我司最近有款轮式巡检机器人用到了海康机器人的工业相机MV-CA060-10GC,我们的开发平台是树莓派(运行Ubuntu Server 1804),开发语言是Java,但该相机没有Java SDK,于是我决定自己开发一个。
好消息是海康机器人提供了C语言的SDK,这样我就能通过JNA直接调用,而不必写一行C代码。
问题的提出
开发过程中发现,有2个API在Windows下正常运行,在树莓派下却总是报错误的参数,错误码80000004
第一个API负责获取原始图像,第二个负责将原始图像压缩编码成jpg或bmp等文件格式,都是必须要用的API
int MV_CC_GetOneFrameTimeout( void *handle,
unsigned char *pData, unsigned int nDataSize,
MV_FRAME_OUT_INFO_EX *pFrameInfo, int nMsec);
int MV_CC_SaveImageEx2( IN void* handle,
MV_SAVE_IMAGE_PARAM_EX *pSaveParam);
向厂商的技术支持求助,技术支持问样例代码在树莓派上运行正常吗?我试了试,发现正常,技术支持说那就是你们代码写得有问题,仔细查查吧。
走过的弯路
我的Java代码应该不会有问题,否则Windows上就报错了,平台差异JNA已经帮我屏蔽了呀,除非JNA屏蔽得有问题。
换64位Ubuntu
注意到JNA在不通平台有相应的jnidispatch动态库,而树莓派是armhf
架构,会不会是因为JNA没有linux-armhf版jnidispatch所致?