1. Скачайте последнюю версию Eclipse с официального сайта [1]. На момент написания статьи это была версия Eclipse Luna SR2 (4.4.2). На странице загрузки выложено множество пакетов для разных целей. Выберите пакет "Eclipse IDE for C/C++ Developers" или "Eclipse IDE for Automotive Software Developers". Я скачал пакет eclipse-cpp-luna-SR2-win32-x86_64.zip.
2. В архиве находится папка eclipse. Распакуйте её в папку Program Files. Сделайте ярлычок для запуска исполняемого файла C:\Program Files\eclipse\eclipse.exe.
Если у Вас уже установлена среда выполнения кода Java (Java Runtime Environment, JRE), то базовая установка на этом завершена (шаг 3 можно пропустить). Если же нет, и Вы попытаетесь запустить eclipse.exe, то отобразится окно с сообщением об ошибке:
Eclipse написана на Java, так что нужно также установить JRE (JVM).
Примечание: Java Runtime Environment (JRE) иногда называют как Java virtual machine (JVM), а иногда Java Development Kit (JDK), что в данном контексте по сути одно и то же. Нам нужна просто среда выполнения кода Eclipse подходящей версии.
3. Установка JRE. Java сегодня используется во многих программах, поэтому наверняка JRE у Вас где-то уже есть на диске, просто нужно прописать путь запуска до его исполняемых файлов (например, надо добавить каталог C:\Program Files (x86)\Java\jre1.5.0_11\bin в переменную окружения %Path%; этот путь показан только для примера, реальный путь будет отличаться). Однако Java настолько глючная и бажная вещь, что программисты постоянно в ней что-то исправляют, переделывают, добавляют новые баги... И далеко не факт, что свежеустановленная Eclipse радостно заработает с Вашей JRE. Поэтому во избежание лишних ошибок лучше всего будет установить еще одну копию JRE, которая наиболее совместима с Вашей версией Eclipse (на одном компьютере могут мирно сосуществовать несколько версий JRE без особых проблем, потому что это по сути тела простая компьютерная программа). К сожалению, в установочном пакете Eclipse почему-то отсутствует JRE. Наличие множества версий Eclipse и множества версий JRE создает определенные проблемы. Обычно имеет смысл загрузить последнюю, самую свежую версию JRE на тот момент, когда Вы выбрали последнюю версию Eclipse для установки.
На странице загрузки Eclipse [1] Вы найдете ссылки для установки необходимой версии JRE. Для Eclipse Luna 4.4 нужна Java 7 JRE/JDK или более свежей версии. JRE бывает 32-битное и 64-битное, так что будьте внимательны, и установите JRE именно той версии, которая соответствует установленной у Вас версии Eclipse, поскольку Eclipse бывает тоже 32-разрядная и 64-разрядная. Общий принцип выбора пакетов один - выбирайте наиболее свежие версии, и выбирайте их совместимого по разрядности типа. Я скачал JRE с сайта Oracle - инсталлятор jre-8u45-windows-x64.exe.
На новых системах Window 7 и Windows 8 проблем с установкой JRE/JVM/JDK нет. Но если у Вас старая система Windows XP 32-bit, то инсталлятор может не запуститься. Возможный вариант решения см. по ссылке [3]. Также есть очень хорошая статья по установке Eclipse и JRE [4].
4. После первого запуска eclipse.exe будет предложено выбрать папку для хранения проектов Eclipse (workspace, рабочее пространство). Выберите удобное для Вас место на диске.
После этого запустится сама среда Eclipse, и Вы увидите приветственное окно системы.
В принципе, если Вы имеете хотя бы минимальное представление об утилите make и принципах работы makefile, то все уже готово для работы - можно использовать Eclipse для проектов AVR точно так же, как Microsoft Visual Studio, AVR Studio (или любую другую систему, работающую на основе makefile-проектов с тулчейном avr-gcc). Но для дополнительного удобства нужно установить AVR Eclipse Plugin [5].
[AVR Eclipse Plugin]
Плагин AVR позволяет просто работать с чипами AVR в среде Eclipse. После того, как он будет установлен, можно будет легко создавать и собирать C-проекты для выбранного Вами микроконтроллера AVR. Есть также некие вкусные возможности наподобие получения данных по чипу без обращения к его даташиту.
5. Чтобы установить AVR plugin, выберите в Eclipse меню Help -> Install New Software..., запустится новое окно Install. Сверху будет выпадающий список "Work with:". Кликните на поле ввода и введите ссылку http://avr-eclipse.sourceforge.net/updatesite/, затем кликните на кнопку Add.
Появится окно Add Repository, в поле Name: введите AVR Eclipse Plugin, кликните OK (при этом требуется подключение к Интернет).
После небольшой задержки ниже появится новая запись "AVR Eclipse Plugin". Поставьте галочку в чекбокс слева от этой записи, и кликните Next.
На следующем экране будет показана информация об устанавливаемом плагине - Вы можете проверить, что все правильно, и если что-то не так, то отказаться от установки. В нашем случае все правильно, будет установлена последняя версия плагина AVR Eclipse Plugin 2.4.1, нужно просто нажать Next.
На следующем экране попросят принять лицензионное соглашение. Переведите радиокнопку у положение "I accept ..." и кликните Finish.
Появится окно с прогрессом установки. Закачка и установка будет продолжаться несколько десятков секунд, в зависимости от скорости подключения к Интернет.
Если в процессе установки появится предупреждение безопасности о неподписанном содержимом (unsigned content), просто кликните OK или Continue. Это предупреждение относится к факту, что плагин не аутентифицирован должным образом (разработчики плагина не заморачивались с сертификатами), но большой проблемы тут нет.
После окончания установки откроется окно диалога, приглашающее перезапустить Eclipse. Выберите перезапуск: Yes или Restart Now. Eclipse завершится и сразу перезапустится.
AVR Plug установлен.
[Тулчейн AVR-GCC]
Это компилятор avr-gcc, утилита make и другие вспомогательные программы, которые используются для компилирования и генерации исполняемого кода (прошивок firmware) микроконтроллеров AVR. Если у Вас тулчейн AVR-GCC не установлен, то его можно установить в пакете WinAVR. Чтобы узнать, установлен ли у Вас тулчейн, можно открыть командную строку, и выполнить следующую команду:
В результате будет получен номер версии (в данном примере 4.3.3). Если тулчейн не установлен, или в переменной %Path% не прописаны пути до его исполняемых файлов, то будет выведено сообщение об ошибке.
Тулчейн установить довольно просто. Скачайте себе пакет WinAVR [6] и установите. Установка заключается в простом запуске инсталлятора наподобие WinAVR-20100110-install.exe.
Примечание: если у Вас уже установлена система программирования Arduino IDE, то её тулчейн находится в каталоге наподобие C:\Program Files\Arduino\hardware\tools\avr\bin\. Если установлена среда Atmel Studio, то вместе с ней тоже устанавливается тулчейн avr-gcc. В этом случае Вам просто нужно проверить переменную окружения %Path% на наличие в ней пути запуска утилит avr-gcc, и если этого пути там нет, то просто добавить его.
[Пример создания нового проекта AVR]
Выберите в меню Eclipse пункт File -> New -> Project..., откроется окно визарда нового проекта. Выберите в дереве C/C++ -> C Project, кликните Next.
В поле ввода Project name: введите имя проекта, например HelloWorld, в дереве Project type: выберите AVR Cross Target Application -> Empty Project, в списке Toolchains выберите нужный тулчейн (тулчейнов может быть несколько, но в данном примере он у нас один - AVR-GCC Toolchain). Кликните Next.
На следующем экране настраиваются конфигурации для компиляции проекта. Уже настроены 2 конфигурации Debug (предназначена для отладки) и Release (для конечной рабочей версии программы). Кликните Next.
Выберите тип микроконтроллера (MCU Type) и тактовую частоту (MCU Frequency), кликните Finish.
Примечание: тип микроконтроллера следует выбрать согласно Вашему электронному устройству, которое разрабатываете. Например, Вы пишете программу для платы Arduino Mega 2560. Тогда надо выбрать ATmega2560 и тактовую частоту 16 МГц.
Теперь у нас получился готовый пустой проект, куда нужно добавить модули исходного кода и заголовки. Они могут быть уже готовые (например, какие-нибудь уже готовые подпрограммы или библиотеки в исходном коде), либо новые, которые Вы создаете и пишете. Давайте создадим новый модуль исходного кода, который просто мигает светодиодом.
Раскройте дерево проекта в Project Explorer. Кликните правой кнопкой на имя проекта HelloWorld и выберите в контекстном меню New -> File. Откроется диалог New File. В поле File name: введите main.c и кликните Finish.
Выберите в меню Project -> Build all (Ctrl+B). Проект скомпилируется.
[Настройка конфигурации программатора]
Рассмотрим, как настроить перепрошивку памяти программ микроконтроллера на примере использования UART-загрузчика Arduino Mega 2560 R3. Для поддержки функции автосброса понадобится исправленная версия AVRDUDE, которая находится в каталоге Arduino IDE (путь наподобие C:\Program Files (x86)\Arduino\hardware\tools\avr\bin) и дополненная конфигурация AVRDUDE (которая находится в файле наподобие C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf).
1. В Eclipse зайдите в меню Windows -> Preferences - AVR -> AVRDude, поставьте галочку Use custom configuration file for AVRDude, кликните Browse... и выберите конфигурационный файл (например C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf).
Примечание: если Вы хотели бы также видеть в консоли Eclipse вывод утилиты avrdude, то поставьте галочку Log internal AVRDude output to console.
2. Paths -> AVRDude -> кнопка Edit -> Path source: Custom, Custom value: введите полный путь каталога, где находится avrdude.exe (например C:\Program Files (x86)\Arduino\hardware\tools\avr\bin) -> OK.
Кликните OK.
3. Откройте свойства проекта, выберите секцию AVR -> AVRDude, создайте новую конфигурацию для программатора (Programmer configuration), для этого кликните кнопку New..., откроется окно для редактирования конфигурации программатора. Установите здесь следующие опции:
Configuration name. Введите произвольное имя, например Arduino-MEGA2560-autoreset.
Programmer Hardware (-c). Выберите Arduino.
Override default port (-P). Введите системный путь до порта, например //./COM19 (COM19 это имя виртуального COM-порта, который появляется при подключении платы Arduino через USB, имя порта можно подсмотреть в Диспетчере Устройств).
Override default baudrate (-b). Выберите из выпадающего списка скорость 115200.
Other options. Добавьте в поле ввода строку -patmega2560 -cwiring. Здесь выбирается секция конфигурации avrdude.conf, где используется автосброс платы перед загрузкой кода.
5. Для проверки, как работает выгрузка программы в плату, выберите в меню AVR -> Upload Project to Target Device (Ctrl+Alt+U). В результате в консоль будет выведен примерно следующий лог:
Launching C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude -pm2560 -carduino -P//./COM19 -b115200 -patmega2560
-cwiring -F -Uflash:w:HelloWorld.hex:a "-CC:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf"
Output:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "HelloWorld.hex"
avrdude: input file HelloWorld.hex auto detected as Intel Hex
avrdude: writing flash (326 bytes):
Writing | ################################################## | 100% 0.07s
avrdude: 326 bytes of flash written
avrdude: verifying flash memory against HelloWorld.hex:
avrdude: load data flash data from input file HelloWorld.hex:
avrdude: input file HelloWorld.hex auto detected as Intel Hex
avrdude: input file HelloWorld.hex contains 326 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.04s
avrdude: verifying ...
avrdude: 326 bytes of flash verified
avrdude done. Thank you.
avrdude finished
[Краткий обзор некоторых интересных возможностей Eclipse]
Меню Refactor. Идея рефакторинга состоит в том, чтобы улучшать код. К примеру, он должен становиться понятнее, более читаемым. Основной пункт в этом меню, которым я пользуюсь, это Rename. Он позволяет дать новое имя функции или переменной, и автоматически изменить это имя везде, где оно встречается. Таким образом, Вам уже не надо искать все места, где стоит старое имя переменной, и вручную менять её имя на новое. Это действительно экономит много времени. Refactor также можно использовать для преобразования куска кода в метод (функцию), и для других действий, связанных с модификацией кода.
Custom Perspectives. Вы уже наверняка сталкивались с тем, что у Eclipse чрезвычайно перегруженное меню, в рабочем окне может быть открыто много разных вкладок, областей, выведено множество кнопок. Большинством функций Вы наверняка не пользуетесь, или пользуетесь от случая к случаю - в зависимости от того, что делаете. Ненужные области можно закрыть крестиком, а ненужные кнопки удалить перетаскиванием и отбрасыванием. Однако есть также способ настроить несколько внешних видов рабочего пространства Eclipse, это называется перспективами. Вы можете сохранить по-новому организованное окно как перспективу, и быстро переключаться на нужный вид окна выбором нужной перспективы. Управление перспективами доступно через меню Windows.
AVR Device Explorer, AVR Supported MCUs. AVR plugin также добавляет две новых вида, один из которых содержит список совместимости устройств AVR, и еще один позволяет просматривать функциональные возможности (периферийные устройства) выбранного микроконтроллера AVR. Эти два вида очень полезны для получения быстрой справки по чипу, так что не нужно открывать для этого даташит. Доступ к ним осуществляется через меню Window -> Show View -> Other... -> AVR.
Минимизация и максимизация панелей двойным щелчком. Панели в Eclipse могут быть развернуты в полный экран двойным щелчком на закладке панели (в верхней её части), и можно вернуть панель в прежний вид повторным двойным щелчком. Это означает, что если Вы хотите просмотреть код в полный экран, или хотите увидеть полный список ошибок в программе, то можете воспользоваться этой возможностью.
Есть также множество возможностей, которые тут не рассмотрены (например, иерархия вызовов функций call hierarchy и т. д.). Чтобы больше узнать о новых функциях, ознакомьтесь с системой справки меню Help (например, Help Contents, Key Assist..., Tips and Tricks...). Особенно обратите внимание на секции справки по функциям Refactor и Source.
Переключитесь на конфигурацию Release: сделайте правый клик на имя проекта, выберите в контекстном меню Build Configurations -> Manage..., выберите конфигурацию Release, кликните Set Active и OK.
Можно также быстро выбрать конфигурацию с помощью панельки меню с иконкой шестеренки:
Перед компиляцией сохраните все файлы исходного кода, которые Вы изменили (File -> Save All), после чего выполните компиляцию (Project -> Build All Ctrl+B). Помогает также очистка перед компиляцией (Clean... -> Clean all projects -> OK).
10:32:47 **** Build of configuration Debug for project UARTtest ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -ffunction-sections
-fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega2560
-DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
Finished building: ../main.c
Building target: UARTtest.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,UARTtest.map -mmcu=atmega2560 -o "UARTtest.elf" ./main.o
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr6/crtm2560.o:(.init9+0x0):
undefined reference to `main'
make: *** [UARTtest.elf] Error 1
10:32:47 Build Finished (took 610ms)
Причина может быть та же самая, как и в предыдущем совете - не сохранены примеры кода. Перед компиляцией сохраните все файлы исходного кода, которые Вы изменили (File -> Save All), после чего выполните компиляцию (Project -> Build All Ctrl+B). Помогает также очистка перед компиляцией (Clean... -> Clean all projects -> OK).
Свойства проекта -> C/C++ Build -> Settings -> AVR C Linker -> General, на закладке Tool Settings отредактируйте поле ввода Other Arguments, подставив туда нужные опции.
Например, для максимальной версии форматера нужно добавить следующие опции (поддержка %f, самые большие требования к памяти):
-Wl,-u,vfprintf -lprintf_flt -lm
Например, для минимальной версии форматера нужно добавить следующие опции (не будет работать %x, %f, зато меньше всего потребуется памяти):
-Wl,-u,vfprintf -lprintf_min
Если оставить строку Other Arguments пустой, то будет работать средний обработчик формата (обработчик по умолчанию, есть поддержка %i, %x, нет поддержки %f).
Симптомы следующие: после переименования проекта (в дереве Project Explorer правый клик на имени проекта -> Rename) перестали в редакторе кода распознаваться символы. Пример вывода в консоли Problems:
Symbol '_FDEV_SETUP_WRITE' could not be resolved main.c /FatFS-test line 6 Semantic Error
Symbol 'DDRB' could not be resolved main.c /FatFS-test line 35 Semantic Error
Symbol 'NULL' could not be resolved main.c /FatFS-test line 6 Semantic Error
Symbol 'PB7' could not be resolved main.c /FatFS-test line 35 Semantic Error
...
При попытке повторного переименования появляется окно "Resource 'имя_проекта' is out of sync with file system.":
При этом нет проблем ни с очисткой проекта (Clean), ни со сборкой (Build).
Как исправить: меню Window -> Preferences -> General -> Workspace -> поставить галочку Refresh using native hooks or polling:
[Ссылки]
1. Eclipse Downloads site:eclipse.org. 2. Java SE Runtime Environment Downloads site:oracle.com. 3. Установка JDK (Java) вручную. 4. Eclipse+AVR+ARM: первые шаги site:simple-devices.ru. 5. The AVR Eclipse Plugin site:avr-eclipse.sourceforge.net. 6. WinAVR latest version site:sourceforge.net. 7. How to get started with Eclipse and AVR site:instructables.com.
Не могу поменять тип контроллера, постоянно atmega16. Target Configuration пишет Failed to create the part's controls. А в Devices No devices available, install packs first.
microsin: либо доустановите (или обновите) пакеты для поддержки AVR, либо переустановите последнюю сборку Eclipse, где уже все включено для AVR.
Подскажите пожалуйста, уже замучался. Эклипс компилирует даже самые пустые проекты под AVR минимум 20 секунд. Это так бесит меня, уже не могу. Он просто останавливается на 12 процентах примерно, ждет 20 секунд, а потом продолжает компиляцию.
Что можно проверить, в чем может быть проблема? товарищи советовали откомпилировать вручную, через командную строку, но я не умею так.
Мне кажется что то с GCC, но я не уверен. Буду очень благодарен за любые советы.
microsin: проверьте пути запуска утилит AVR GCC (переменная окружения %PATH%), отключите антивирус. А компилировать через командную строку довольно просто. Для этого нужно заглянуть в файл makefile проекта, либо в файл readme.txt, там обычно пишут команды, которые нужно вводить в командной строке для компиляции. Обычно это make clean и make, либо make all, или что-то наподобие. Если утилиты GCC не запускаются, то настройте путь до них в переменной окружения %PATH%.
Еще на windows 8.1 eclipse выдавал ошибку: 0xc0000142 make: *** [main.o] Error -1073741502 Решилось заменой файла в c:WinAVR-20100110utilsbinmsys-1.0.dll взятым от сюда файлом http://www.madwizard.org/download/electronics/msys-1.0-vista64.zip
Добрый день. Подскажите пожалуйста. После настройки Eclipse на windows 8.1 он отказался компилировать. Заменил старую библиотеку msys на новую в winavr - теперь работает, но каждая компиляция занимает 22 секунды, причем большинство времени ничего не происходит и только под конец быстренько компилирует. Что с этим можно сделать?
А так вроде все работает. Но каждый раз ждать 20 секунд нереально.
microsin: проверьте пути запуска компилятора и утилиты make (переменная окружения %PATH%). Попробуйте временно отключить антивирус, чтобы убедиться, что задержка не из-за него.
Опять вернулся к eclipse avr, и вот что у меня было. Оказывается ошибка в пробелах между угловыми скобками, где встречается #include.
Для eclipse пробелов в скобках быть не должно иначе avr/io.h: No such file or directory...
microsin: да, так и есть, надо без пробелов. Пробелы в статье вставлены потому, что код Joomla воспринимает текст в угловых скобках как теги, и удаляет его.
Заметил странную вещь, если записать не #include < avr/io.h > а #include (без пробелов между < и avr/io.h) то тогда предупреждения исчезают с этой строки.
microsin: все правильно, никаких пробелов в угловых скобках #include здесь быть не должно. В тексте статьи пробелы оставлены, чтобы CMS Joomla не вырезала текст в угловых скобках как теги.
Установил Eclipse в папку на диске D, установил Java и WinAVR. Сделал пример мигания, но компиляция выдает ошибки (Symbol 'DDRB' could not be resolved main.c/mRTOS line 10 Semantic Error) и т. д. Похоже что подключаемые файлы (для #include) не нашел. В Eclipse я новичок. Подскажите, где настроить?
microsin: Вам нужно:
1. Правильно установить тип микроконтроллера в проекте. Это делается в настройках проекта, либо настраивается через правку в makefile переменной наподобие MCU или DEVICE. Пример:
DEVICE = atmega32
2. В коде программы, где используете регистры наподобие DDRB, надо подключить заголовочный файл io.h. Пример:
#include
Подробнее см. в статье: "Доступ к портам I/O AVR на языке C (GCC, WinAVR)".
3. Если среда Eclipse или компилятор не могут найти заголовочные файлы (io.h или другие, которые Вы используете), проверьте настройки Eclipse, где задают пути поиска заголовочных файлов. Если не знаете, где это настраивается, то прогуглите: eclipse AVR include path.
Комментарии
Target Configuration пишет Failed to create the part's controls. А в Devices No devices available, install packs first.
microsin: либо доустановите (или обновите) пакеты для поддержки AVR, либо переустановите последнюю сборку Eclipse, где уже все включено для AVR.
Что можно проверить, в чем может быть проблема? товарищи советовали откомпилировать вручную, через командную строку, но я не умею так.
Мне кажется что то с GCC, но я не уверен.
Буду очень благодарен за любые советы.
microsin: проверьте пути запуска утилит AVR GCC (переменная окружения %PATH%), отключите антивирус. А компилировать через командную строку довольно просто. Для этого нужно заглянуть в файл makefile проекта, либо в файл readme.txt, там обычно пишут команды, которые нужно вводить в командной строке для компиляции. Обычно это make clean и make, либо make all, или что-то наподобие. Если утилиты GCC не запускаются, то настройте путь до них в переменной окружения %PATH%.
0xc0000142 make: *** [main.o] Error -1073741502
Решилось заменой файла в c:WinAVR-20100110utilsbinmsys-1.0.dll
взятым от сюда файлом
http://www.madwizard.org/download/electronics/msys-1.0-vista64.zip
А так вроде все работает. Но каждый раз ждать 20 секунд нереально.
microsin: проверьте пути запуска компилятора и утилиты make (переменная окружения %PATH%). Попробуйте временно отключить антивирус, чтобы убедиться, что задержка не из-за него.
Для eclipse пробелов в скобках быть не должно иначе avr/io.h: No such file or directory...
microsin: да, так и есть, надо без пробелов. Пробелы в статье вставлены потому, что код Joomla воспринимает текст в угловых скобках как теги, и удаляет его.
(без пробелов между < и avr/io.h) то тогда предупреждения исчезают с этой строки.
microsin: все правильно, никаких пробелов в угловых скобках #include здесь быть не должно. В тексте статьи пробелы оставлены, чтобы CMS Joomla не вырезала текст в угловых скобках как теги.
microsin: Вам нужно:
1. Правильно установить тип микроконтроллер а в проекте. Это делается в настройках проекта, либо настраивается через правку в makefile переменной наподобие MCU или DEVICE. Пример:
DEVICE = atmega32
2. В коде программы, где используете регистры наподобие DDRB, надо подключить заголовочный файл io.h. Пример:
#include
Подробнее см. в статье: "Доступ к портам I/O AVR на языке C (GCC, WinAVR)".
3. Если среда Eclipse или компилятор не могут найти заголовочные файлы (io.h или другие, которые Вы используете), проверьте настройки Eclipse, где задают пути поиска заголовочных файлов. Если не знаете, где это настраивается, то прогуглите: eclipse AVR include path.
RSS лента комментариев этой записи