2013-08-05 2 views
1

вместо ответа. Я ищу идею здесь.Планирование латентности обработчиков датчиков Android

Я хотел бы измерить задержку планирования выборки сенсоров в Android. В частности, я хочу измерить время от запроса прерывания датчика до того, как будет выполнена нижняя половина, которая отвечает за чтение данных.

Нижняя половина уже имеет, помимо данных, прочитанную инструкцию по установлению даты. На самом деле образцы собираются приложениями (являющимися java или native, без разницы) в качестве кортежа [измерение, временная метка]. Временная метка следует за источником тактовых импульсов clock_gettime(CLOCK_MONOTONIC, &t); Итак, предполагая, что нижняя половина не выгружена, как-то эта временная метка дает указание на мгновение планирования задачи. Отсутствует прямой или косвенный способ узнать его соответствующий irq-момент.

Безопасно предположить, что мы можем запросить любую частоту дискретизации для датчика. Каркас драйвера заключается в следующем (S3 гироскоп Галактики)

err = request_threaded_irq(data->client->irq, NULL, 
     lsm330dlc_gyro_interrupt_thread\ 
     , IRQF_TRIGGER_RISING | IRQF_ONESHOT,\ 
      "lsm330dlc_gyro", data); 

static irqreturn_t lsm330dlc_gyro_interrupt_thread(int irq\ 
    , void *lsm330dlc_gyro_data_p) { 
    ... 
    struct lsm330dlc_gyro_data *data = lsm330dlc_gyro_data_p; 
    ... 
    res = lsm330dlc_gyro_read_values(data->client, 
     &data->xyz_data, data->entries); 
    ... 
    input_report_rel(data->input_dev, REL_RX, gyro_adjusted[0]); 
    input_report_rel(data->input_dev, REL_RY, gyro_adjusted[1]); 
    input_report_rel(data->input_dev, REL_RZ, gyro_adjusted[2]); 
    input_sync(data->input_dev); 
    ... 
} 

основным сдерживающим фактором является то, что мне нужно (ну, у меня только есть достаточно ресурсов для) выполнить это измерение из пользовательского пространства, на коммерческом устройстве, без касаются и перекомпилируют ядро. Надеемся, что с точностью до эксперимента будет ограниченный mpact. Я не знаю, возможен ли такой эксперимент с этим ограничением, и до сих пор я не мог найти разумного метода.

Я мог бы также перекомпилировать ядро, если эксперимент станет простым.

Спасибо.

+0

Хотели бы вы открыть телефон? Если да, тогда вы всегда можете исследовать гироскоп irq pin на осциллографе? ... – TheCodeArtist

ответ

0

Первый Невозможно выполнить это измерение без касания ядра.

Во-вторых, я не видел ни одной нижней половины, настроенной в вашем коде ISR.

Третий, если вообще, нижняя половина запланирована, и ядро ​​можно перекомпилировать, вы можете выбрать значение jiffie в ISR и снова выставить его в нижней половине. возьмите разницу между двумя образцами и вычтите это смещение от метки времени, которая экспортируется в U-пространство.

+1

Спасибо за подсказку, это решение, о котором я думал, только если бы я мог перекомпилировать. Нижняя половина - это обработчик прерываний с резьбой, больше информации [здесь] (http://lwn.net/Articles/302043/) – hanswe

Смежные вопросы