Сижу, разбираю примеры, которые разработчики CVAVR любезно предоставили в комплекте с компилятором. Понятное дело- тексты писаны профессионалами, и кое-что в них совсем не понятно:
1) Файл ds18b20.с, есть строки:
#define MAX_DEVICES 8 //Тут всё ясно
unsigned char rom_code[MAX_DEVICES][9] /* а здесь непонятен синтаксис, вроде бы объявляется массив, но как-то интересно указывается количество членов. Компилятор потом же вместо MAX_DEVICES подставит цифру 8 и получится
unsigned char rom_code[8[9] Как это работает?
2) Код, в котором происходит инициализация термометров и настройка их на 12 битное разрешение, я если честно, мало не понял как сие работает.
for(i=0;i<devices)
if(!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
далее всего лишь вывод результатв на дисплей.
Насколько я понял, идет поочередная инициализация всех найденных девайсов и их настройка. Для этого тут есть цикл for, непонятно вот что:
а) Почему счетчик i++ вынесен в функцию if? неужели помимо проверки условия в скобках if(условие) сразу может исполняться код записанный в этих скобках?
б) для чего стоит ! и DS18B20_12BIT_RES- понятно. Объясните, пожалуйста как работает остальное, для чего, к примеру [0], 10, 20, 30- что это такое? Почему 0 в квадр. скобках, а остальное -нет?
А для чего стоит & перед rom_code?



