2012-04-20 46 views
0

一位朋友和我正在开发一个应用程序,用于从加速度计读取数据以便稍后处理。我们正在使用黑莓Playbook(基于Android)。从本机API检索时,加速度计的数据是否更准确?

我们需要尽可能准确的数据。他表示,与使用Java API获取的读数相比,使用本机C API完成后,他从Playbook加速计获得的读数更准确。我认为他可能从每个API读取数据的速度让他认为C代码读数更准确。

读取速率设置和数据这样的读取C:

/* 25000 microseconds = 25 miliseconds */ 
static const int ACCELEROMETER_RATE = 25000; 

sensor_set_rate(SENSOR_TYPE_ACCELEROMETER, ACCELEROMETER_RATE); 
sensor_set_skip_duplicates(SENSOR_TYPE_ACCELEROMETER, true); 

/* ...code ommited... */ 

/* gets the data */ 
sensor_event_get_xyz(event, &force_x, &force_y, &force_z); 

而且在Java中是这样的:

mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI); 

/* ...code ommited... */ 

public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) 
    return; 

mSensorX = event.values[0]; 
mSensorY = event.values[1]; 
mSensorZ = event.values[2]; 
} 

我之前SensorManager.SENSOR_DELAY_UI`套读阅读速度大约为20ms,但我不确定。

这是否有意义,这些C代码将获得比Java中的代码更准确的数据?

+0

你(或你的朋友)的意思是“更准确”吗?你怎么知道真正的价值?你的意思是它打印更多的数字? – byrondrossos 2012-04-20 15:00:05

+0

@byrondrossos根据他的要求,更精确的意思是当设备处于静止位置时,即数据不会发生太大变化,即设备放置在桌子上时,(x,y,z)读数加速度计不应该像疯了一样变化,就像在某些设备上发生的那样。 – AntonioJunior 2012-04-20 15:07:38

+0

如果传感器抖动是一个问题,您需要自己处理,除非驱动程序可以为您做。在C代码中,调用'sensor_set_skip_duplicates'可能会改变Java代码无法访问的内容。 – HonkyTonk 2012-04-20 15:13:18

回答

1

黑莓开发者可能也在Java实现中使用包含c代码的库。

不,该语言不应该扮演任何角色,因为无论如何c和java都被简化为字节码。

+0

我想说C和Java二进制文件之间有很大区别,因为Java二进制文件在JVM中运行,而C二进制文件不运行。 – HonkyTonk 2012-04-20 15:10:32

+0

@honkytonk是真的,但我的观点是,他们可以访问完全相同的资源,即使使用相同的驱动程序和可能的系统调用(我不知道JVM深深埋入到操作系统中).JVM代码将java字节码以机器指令:) – byrondrossos 2012-04-20 15:43:57

+0

Java代码仅限于它提供的接口。例如,如果与设备接口的本机粘合代码不提供影响抖动处理的方法,则Java代码将获得与C代码不同的信号。从JVM到本地的桥梁总是限制了Java代码中的可能性。 – HonkyTonk 2012-04-20 15:48:55