2012-04-20 49 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