Рекомендации по работе с сенсорами на планшетах Android* с процессорами Intel Atom

Аннотация

В данной статье даются краткие рекомендации по созданию приложения для платформы Android* Sensor. Здесь описывается использование некоторых сенсоров, которыми часто оснащаются планшеты с процессорами Intel® Atom™. Рассматриваются датчики движения, положения и окружающей среды, а также GPS, хотя GPS не является датчиком в строгом смысле этого слова.

Сенсоры на планшетах Android* с процессорами Intel® Atom™

Планшеты, построенные на основе процессоров Intel® Atom™, поддерживают широкий набор аппаратных датчиков. Эти датчики служат для обнаружения движения устройств и изменения их положения в пространстве, а также определяют параметры окружающей среды. На следующей схеме показана возможная конфигурация датчиков на планшете с операционной системой Android* на основе процессора Intel Atom:


Рисунок 1-1. Датчики на планшете Android* с процессором Intel® Atom™

Все сенсоры можно разделить на следующие классы и типы по данным, представляемым ими:

Таблица 1-1. Типы датчиков, поддерживаемые платформой Android

КатегорияДатчикОписаниеИспользование
Датчики движения Акселерометр (TYPE_ACCELEROMETER) Измеряет ускорение устройства (м/с2) Обнаружение движения
Гироскоп (TYPE_GYROSCOPE) Измеряет поворот устройства Обнаружение вращения
Датчики положения Магнитометр (TYPE_MAGNETIC_FIELD) Измеряет силу геомагнитного поля Земли (в µT) Компас
Датчик близости (TYPE_PROXIMITY) Измеряет расстояние до ближайших объектов (в см) Обнаружение находящихся рядом объектов
GPS (не тип android.hardware.Sensor) Получает точные географические координаты устройства Точное определение расположения
Датчики окружающих условий Датчик освещенности (TYPE_LIGHT) Измеряет уровень освещенности Автоматическая регулировка яркости экрана

Платформа Android* Sensor

2.1 Общие сведения

Платформа Android* предоставляет механизмы для доступа к сенсорам, за исключением GPS: доступ к его данным осуществляется посредством служб геопозиционирования Android*. Все это будет подробнее рассмотрено далее в статье. Платформа сенсоров входит в состав пакета android.hardware. В следующей таблице перечислены основные классы и интерфейсы в составе платформы:

Таблица 2.1. Обработка сенсоров в Android*

ИмяТипОписание
SensorManager Класс Используется для создания экземпляра службы датчиков. Предоставляет различные методы для доступа к различным датчикам, регистрации и отмены регистрации прослушивателей событий датчиков и т.п.
Sensor Класс Используется для создания экземпляра определенного датчика.
SensorEvent Класс Используется системой для публикации данных датчика. Включает необработанные значения данных датчика, тип датчика, точность данных и штамп времени.
SensorEventListener Класс Предоставляет методы обратного вызова для получения уведомлений от класса SensorManager при изменении данных датчика или точности датчика.

2.2 Получение конфигурации датчиков

Набор датчиков, которыми комплектуется устройство, выбирается исключительно по желанию изготовителя устройства. Чтобы обнаружить датчики во время выполнения, можно вызвать метод SensorManager getSensorList() с параметром ‘Sensor.TYPE_ALL’. В следующем фрагменте кода приложение получает список доступных датчиков и информации об их поставщиках, мощности и точности каждого датчика:

Пример 2-1. Приложение получает список датчиков

2.3 Система координат датчиков

Платформа передает данные с сенсоров через стандартную 3-осевую систему координат, в которой координаты по осям X, Y и Z представлены соответственно значениями values[0], values[1], and values[2] объекта SensorEvent.

Некоторые датчики, например, датчик освещенности, датчик температуры и датчик близости, возвращают только одно значение. Для этих датчиков используется только значение values[0] объекта SensorEvent.

Прочие датчики передают данные в стандартной трехосевой системе координат. Вот список таких датчиков:

  • Акселерометр
  • Датчик гравитации
  • Гироскоп
  • Датчик геомагнитного поля

Трехосевая система координат определяется относительно экрана устройства в его стандартном (исходном) положении. Для планшетов стандартным положением обычно считается альбомная ориентация, а для телефонов — книжная. Когда устройство находится в стандартной ориентации, ось X является горизонтальной и направлена вправо, ось Y, а ось Z проходит через устройство и «выходит наружу» из лицевой стороны (т.е. стороны, где находится экран) устройства. На следующей схеме показана система координат датчиков планшета:


Рисунок 2-1. Система координат датчиков

Наиболее важным моментом в отношении системы координат датчиков является то, что система координат никогда не меняется при перемещении или изменении положения устройства.

2.4 Отслеживание событий сенсоров

Платформа передает данные с датчиков через SensorEvent. Можно отслеживать данные определенного датчика путем реализации интерфейса SensorEventListener и регистрации в SensorManager для определенного датчика. Платформа сообщает классу об изменениях состояния датчиков с помощью следующих двух методов обратного вызова SensorEventListener, реализуемых этим классом:

onAccuracyChanged()

и

onSensorChanged()

В следующем фрагменте кода реализуется SensorDialog для SensorInfoFragment, который мы рассмотрели в разделе 2.2.

package com.intel.deviceinfo;
 
import android.app.Dialog;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
 
public class SensorDialog extends Dialog implements SensorEventListener {
    Sensor mSensor;
    TextView mDataTxt;
    private SensorManager mSensorManager;
     
 
    public SensorDialog(Context ctx, Sensor sensor) {
        this(ctx);
        mSensor = sensor;
    }
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
        mDataTxt.setText("...");
        setTitle(mSensor.getName());
    }
     
    @Override
    protected void onStart() {
        super.onStart();
        mSensorManager.registerListener(this, mSensor,  SensorManager.SENSOR_DELAY_FASTEST);
    }
         
    @Override
    protected void onStop() {
        super.onStop();
        mSensorManager.unregisterListener(this, mSensor);
    }
 
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
 
    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != mSensor.getType()) {
            return;
        }
        StringBuilder dataStrBuilder = new StringBuilder();
        if ((event.sensor.getType() == Sensor.TYPE_LIGHT)||
            (event.sensor.getType() == Sensor.TYPE_TEMPERATURE)) {
            dataStrBuilder.append(String.format("Data: %.3fn", event.values[0]));
        }
        else{         
            dataStrBuilder.append( 
                String.format("Data: %.3f, %.3f, %.3fn", 
                event.values[0], event.values[1], event.values[2] ));
        }
        mDataTxt.setText(dataStrBuilder.toString());
    }
}

Пример 2-2. Диалоговое окно, показывающее значения датчиков

2.5 Датчики движения

Датчики движения служат для измерения различных движений устройства: встряхивание, поворот, наклон и т.п. Многие планшеты и телефоны оснащаются акселерометрами и гироскопами.

Датчики движения передают данные с помощью системы координат датчиков с 3 значениями в объекте SensorEvent: values[0], values[1] и values[2].

Чтобы понять принцип работы датчиков движения и научиться использовать полученные данные в приложениях, нужно разобраться в некоторых физических формулах, связанных с силой, массой, ускорением и законами динамики.

2.5.1 Акселерометр

Акселерометр измеряет ускорение устройства.

Таблица 2-2. Акселерометр

ДатчикТипДанные SensorEvent (м/с2)Описание
Акселерометр TYPE_ACCELEROMETER values[0]
values[1]
values[2]
Ускорение вдоль оси x
Ускорение вдоль оси y
Ускорение вдоль оси z

Принцип работы акселерометра основан на втором законе Ньютона:

a = F / m

В нашем коде мы не используем приведенное выше уравнение напрямую, а вычисляем результат приложения ускорения за определенное время: влияние ускорения на скорость и положение устройства. Следующее уравнение описывает взаимосвязь между текущей скоростью объекта v1, начальной скоростью объекта v0, ускорением a и временем t:

v1 = v0 + at

Чтобы вычислить расстояние s, на которое переместился объект, мы используем следующее уравнение:

s = v0t + (1/2)at2

Во многих случаях начальная скорость v0 равна 0 (т.е. изначально устройство неподвижно), что упрощает наше уравнение:

s = at2/2

Поскольку существует гравитация, то ускорение гравитации, обозначаемое буквой g, воздействует на все объекты на Земле. Ускорение g (гравитационная постоянная) не зависит от массы объекта, а зависит только от географической широты объекта на Земле. Значение g теоретически может находиться в диапазоне 9,78–9,82 м/с2. Мы используем общепринятое стандартное значение гравитационной постоянной:

g = 9.80665 (m/s2)

Акселерометр возвращает значения с помощью многомерной системы координат устройства, поэтому мы можем вычислить расстояния по осям x, y и z с помощью следующих уравнений:

Sx = AxT2/2

Sy = AyT2/2

Sz = AzT2/2

Здесь Sx, Sy и Sz — расстояния, на которые переместилось устройств, вдоль осей x, y и z, а Ax, Ay и Az — ускорения, направленные вдоль осей x, y и z. T — это период времени, за который проводятся измерения.

В следующем примере показано создание обработчика акселерометра:

public class SensorDialog extends Dialog implements SensorEventListener {
    …   
    private Sensor mSensor;
    private SensorManager mSensorManager;
     
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    …
}

Пример 2-3 Создание обработчика акселерометра

Иногда мы не используем значения данных всех трех измерений - иногда можно учесть только ориентацию устройства. Например, при разработке приложения «Лабиринт» нужно использовать только ускорение гравитации по осям x и y, чтобы вычислить направление движения шарика и пройденное им расстояние в зависимости от ориентации устройства. Эта логика реализована в следующем фрагменте кода:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
        return;
    } 
float accelX, accelY;
…
//detect the current rotation currentRotation from its “natural orientation”
//using the WindowManager
    switch (currentRotation) {
        case Surface.ROTATION_0:
            accelX = event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_90:
            accelX = -event.values[0];
            accelY = event.values[1];
            break;
        case Surface.ROTATION_180:
            accelX = -event.values[0];
            accelY = -event.values[1];
            break;
        case Surface.ROTATION_270:
            accelX = event.values[0];
            accelY = -event.values[1];
            break;
    }
    //calculate the ball’s moving distances along x, and y using accelX, accelY and the time delta
        …
    }
}

Пример 2-4. Обработка данных ориентации устройства при использовании данных акселерометра в игре «Лабиринт»

2.5.2 Гироскоп

Гироскоп измеряет скорость вращения устройства вокруг осей x, y и z. Значения данных гироскопа могут быть положительными или отрицательными. Рассмотрим начальное положение объекта со стороны положительной половины оси, вокруг которой будет вращаться объект. Если объект вращается вокруг этой оси против часовой стрелки, значение будет положительным. Если объект вращается вокруг этой оси по часовой стрелке, значение будет отрицательным. Также можно определить направление вращения гироскопа по «правилу правой руки»:


Рисунок 2-2. Определение положительного направления вращения по правилу «правой руки»

Таблица 2-3. Гироскоп

ДатчикТипДанные (rad/s)Описание
Гироскоп TYPE_GYROSCOPE values[0]
values[1]
values[2]
Скорость поворота вокруг оси x
Скорость поворота вокруг оси y
Скорость поворота вокруг оси z

В следующем примере показано создание обработчика гироскопа:

public class SensorDialog extends Dialog implements SensorEventListener {
    …   
    private Sensor mGyro;
    private SensorManager mSensorManager;
     
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mGyro = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    …
}

Пример кода 2-5. Создание экземпляра гироскопа

2.6 Датчики положения

Многие планшеты Android оборудованы двумя датчиками положения: магнитометром и датчиком близости. Магнитометр измеряет силу магнитного поля Земли вдоль осей x, y и z, а датчик близости определяет расстояние от устройства до другого объекта.

2.6.1 Магнитометр

В системе Android* магнитометр используется главным образом для реализации функции компаса.

ДатчикТипДанные SensorEvent (µT)Описание
Магнитометр TYPE_MAGNETIC_FIELD values[0]
values[1]
values[2]
Сила магнитного поля Земли вдоль оси x
Сила магнитного поля Земли вдоль оси y
Сила магнитного поля Земли вдоль оси z

В следующем коде показано создание обработчика магнитометра:

public class SensorDialog extends Dialog implements SensorEventListener {
    …   
    private Sensor mMagnetometer;
    private SensorManager mSensorManager;
     
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    …
}

Пример 2-6. Создание экземпляра магнитометра

2.6.2 Датчик близости

Датчик близости определяет расстояние между устройством и другим объектом. Эту возможность можно использовать, чтобы обнаруживать случаи, когда устройство находится близко от пользователя, например, когда пользователь поднес телефон к уху, чтобы ответить на звонок.

ДатчикТипДанные SensorEventОписание
Датчик близости TYPE_PROXIMITY values[0] Расстояние до объекта в см. Некоторые датчики близости передают только логическое значение, указывающее, что объект находится достаточно близко.

В следующем коде показано создание обработчика датчика близости:

public class SensorDialog extends Dialog implements SensorEventListener {
    …   
    private Sensor mProximity;
    private SensorManager mSensorManager;
     
    public SensorDialog(Context context) {
        super(context);
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    …
}

Пример 2-7. Создание обработчика датчика близости

2.7 Датчики окружающей среды

Датчики окружающей среды обнаруживают и передают данные о параметрах окружения, в которой находится устройство: освещенности, температуре, давление, влажности. Наличие определенных датчиков определяется исключительно выбором изготовителя устройств. Датчик освещенности установлен на многие планшеты Android*.

2.7.1 Датчик освещенности

Датчик освещенности используется, чтобы определить уровень освещенности вокруг устройства и соответствующим образом отрегулировать яркость экрана.

ДатчикТипДанные SensorEventОписание
Датчик освещенности TYPE_LIGHT values[0] Уровень освещенности вокруг устройства

В следующем коде показано создание обработчика датчика освещенности:

…   
private Sensor mALS;
private SensorManager mSensorManager;
 
…   
    mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    mALS = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
…

Пример 2-8. Создание обработчика датчика освещенности

2.8 Рекомендации по оптимизации работы датчиков

При работе с датчиками в приложениях необходимо соблюдать следующие рекомендации:

  • Перед использованием любого определенного датчика необходимо проверять его наличие.
    На платформе Android* нет требований к наличию или отсутствию определенных датчиков в устройствах. Наличие определенных датчиков определяется исключительно выбором изготовителя устройств. Поэтому перед использованием датчика в приложении всегда следует проверять, оснащено ли данное устройство этим датчиком.
  • Следует всегда отменять регистрацию прослушивателей датчиков.
    Если действие, реализовавшее прослушиватель датчика, стало невидимым, или диалоговое окно остановлено, нужно отменить регистрацию прослушивателя. Это можно сделать с помощью метода onPause() или с помощью метода onStop(). В противном случае датчик будет по-прежнему получать данные и расходовать электричество.
  • Не следует загромождать метод onSensorChanged().
    Метод onSensorChanged() часто вызывается системой для передачи данных датчиков. Внутри этого метода должно быть как можно меньше логических конструкций. Все сложные вычисления, применяемые к данным датчиков, следует вынести за пределы этого метода.
  • Приложения, работающие с датчиками, всегда следует тестировать на реальных устройствах.
    Все датчики, описанные в этом разделе, являются аппаратными. Применение Android Emulator может оказаться недостаточным для полноценного моделирования функций и работы датчиков.

GPS и координаты расположения

Глобальная система позиционирования GPS — это спутниковая система, предоставляющая точные географические координаты в любом месте на Земле. Приемник сигналов GPS устанавливается на многие планшеты Android*. В определенном смысле GPS работает аналогично датчику положения. Приемник GPS может предоставить точные данные о расположении приложениям, запущенным на устройстве. На платформе Android* платформа датчиков не управляет работой GPS. Служба геопозиционирования the Android* получает доступ и передает данные GPS приложениям с помощью обратных вызовов прослушивателей расположения.

3.1 Службы геопозиционирования Android*

ДатчикТипОписание
LocationManager Class Используется для доступа к службам расположения. Предоставляет различные методы для периодических запросов расположения приложениями и для отправки предупреждений о близости
LocationProvider Abstract class Абстрактный класс используемый службами GPS
Location Class Используется для упаковки географических данных
LocationListener Interface Используется для получения уведомлений о расположении от класса LocationManager

3.2 Получение обновлений данных GPS о расположении

Для получения обновленных данных GPS о расположении приложение реализует несколько методов обратного вызова, реализованных в интерфейсе LocationListener. Этот механизм подобен механизму работы платформы для доступа к данным других сенсоров.

Для доступа к данным GPS в приложении необходимо запросить разрешение для доступа к точным данным расположения в файле манифеста Android*:

< manifest … >
…
    < uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
…  
< /manifest >

Пример 3-1. Запрос разрешения для доступа к точным данным расположения в файле манифеста

В следующем примере показано получение обновленных данных GPS и отображение географических координат (широты и долготы) в текстовом поле диалогового окна:

package com.intel.deviceinfo;
 
import android.app.Dialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
 
public class GpsDialog extends Dialog implements LocationListener {
    TextView mDataTxt;
    private LocationManager mLocationManager;
     
    public GpsDialog(Context context) {
        super(context);
        mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           mDataTxt = (TextView) findViewById(R.id.sensorDataTxt);
          mDataTxt.setText("...");
         
        setTitle("Gps Data");
    }
     
    @Override
    protected void onStart() {
        super.onStart();
        mLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 0, 0, this);
    }
         
    @Override
    protected void onStop() {
        super.onStop();
        mLocationManager.removeUpdates(this);
        }
 
    @Override
    public void onStatusChanged(String provider, int status, 
        Bundle extras) {
    }
 
    @Override
    public void onProviderEnabled(String provider) {
    }
 
    @Override
    public void onProviderDisabled(String provider) {
    }
 
    @Override
    public void onLocationChanged(Location location) {
        StringBuilder dataStrBuilder = new StringBuilder();
        dataStrBuilder.append(String.format("Latitude: %.3f,   Logitude%.3fn", location.getLatitude(), location.getLongitude()));
        mDataTxt.setText(dataStrBuilder.toString());
         
    }
}

Пример 3-2. Диалоговое окно, показывающее данные геопозиционирования GPS

3.3 Рекомендации по оптимизации работы с GPS

С помощью GPS можно получить самые точные данные о расположении устройства. С другой стороны, приемник GPS, будучи аппаратным компонентом, потребляет дополнительную электроэнергию. Кроме того, первоначальное получение координат занимает определенное время, т.к. для этого требуется поиск и обработка данных спутников GPS в зоне видимости устройства. Ниже приведены рекомендации, которые следует соблюдать при разработке приложений, работающих с GPS и данными геопозиционирования:

  • Используйте все доступные способы определения положения. Помимо GPS_PROVIDER существует также NETWORK_PROVIDER. Если для приложений достаточно грубых данных о расположении, рассмотрите возможность использования NETWORK_PROVIDER.
  • Кэшируйте данные геопозиционирования. Первоначальное получение координат с помощью GPS занимает определенное время. Пока приложение дожидается получения от GPS обновленных точных данных о расположении, можно сначала использовать данные, предоставленные методом getlastKnownLocation() класса LocationManager, чтобы выполнить часть работы.
  • Следует свести к минимуму частоту и длительность запросов на получение обновленных данных расположения. Запрашивать обновленные данные следует лишь в необходимых случаях; нужно сразу отменять регистрацию в классе LocationManager, если обновленные данные больше не нужны.

Выводы

На платформе Android* для разработчиков предусмотрены интерфейсы API, обеспечивающие доступ к датчикам, встроенным в устройства. Датчики предоставляют необработанные данные о движении устройства, его положении и условиях окружающей среды с высокой точностью. При разработке приложений для датчиков необходимо следовать рекомендациям, чтобы повысить производительность приложений и их экономичность в отношении потребления электроэнергии.

Благодарности

Автор выражает благодарность своему коллеге Нейтану Тотура (Nathan Totura), предоставившему исходный код, использованный в примерах в данной статье.

Об авторе

Miao Wei работает инженером по программному обеспечению в отделе корпорации Intel по разработке ПО и обслуживанию.

Примечания

ИНФОРМАЦИЯ В ДАННОМ ДОКУМЕНТЕ ПРИВЕДЕНА ТОЛЬКО В ОТНОШЕНИИ ПРОДУКТОВ INTEL. ДАННЫЙ ДОКУМЕНТ НЕ ПРЕДОСТАВЛЯЕТ ЯВНОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ЛИЦЕНЗИИ, ЛИШЕНИЯ ПРАВА ВОЗРАЖЕНИЯ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ. КРОМЕ СЛУЧАЕВ, УКАЗАННЫХ В УСЛОВИЯХ И ПРАВИЛАХ ПРОДАЖИ ТАКИХ ПРОДУКТОВ, INTEL НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ И ОТКАЗЫВАЕТСЯ ОТ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ В ОТНОШЕНИИ ПРОДАЖИ И/ИЛИ ИСПОЛЬЗОВАНИЯ СВОИХ ПРОДУКТОВ, ВКЛЮЧАЯ ОТВЕТСТВЕННОСТЬ ИЛИ ГАРАНТИИ ОТНОСИТЕЛЬНО ИХ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОБЕСПЕЧЕНИЯ ПРИБЫЛИ ИЛИ НАРУШЕНИЯ КАКИХ-ЛИБО ПАТЕНТОВ, АВТОРСКИХ ПРАВ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ.

КРОМЕ СЛУЧАЕВ, СОГЛАСОВАННЫХ INTEL В ПИСЬМЕННОЙ ФОРМЕ, ПРОДУКТЫ INTEL НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ В СИТУАЦИЯХ, КОГДА ИХ НЕИСПРАВНОСТЬ МОЖЕТ ПРИВЕСТИ К ТРАВМАМ ИЛИ ЛЕТАЛЬНОМУ ИСХОДУ.

Корпорация Intel оставляет за собой право вносить изменения в технические характеристики и описания своих продуктов без предварительного уведомления. Проектировщики не должны полагаться на отсутствующие характеристики, а также характеристики с пометками «зарезервировано» или «не определено». Эти характеристики резервируются Intel для будущего использования, поэтому отсутствие конфликтов совместимости для них не гарантируется. Информация в данном документе может быть изменена без предварительного уведомления. Не используйте эту информацию в окончательном варианте дизайна.

Продукты, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу.

Перед размещением заказа получите последние версии спецификаций в региональном офисе продаж Intel или у местного дистрибьютора.

Номерные копии документов, на которые имеются ссылки в данном документе, а также другие материалы Intel можно заказать по телефону 1-800-548-4725 или загрузить по адресу: http://www.intel.com/design/literature.htm

Intel и эмблема Intel являются товарными знаками корпорации Intel в США и в других странах.

*Другие наименования и торговые марки могут быть собственностью третьих лиц

**This sample source code is released under the Intel Sample Source Code License Agreement

Copyright© 2012 Intel Corporation. All rights reserved.

Reportez-vous à notre Notice d'optimisation pour plus d'informations sur les choix et l'optimisation des performances dans les produits logiciels Intel.