Многомерные массивы в AtmelStudio ЧЯДН?

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

Коллеги, прошу подсказки, есть код:
  • //Переменные
    uint8_t lev_red, lev_green, lev_blue;
    //Определяем массив
    uint8_t lev[3][3] = {{255,0,0 },{0,255,0},{0,0,255}};
    ....
    ....
    //Присваиваем значения из массива переменным
    lev_red=lev[0,0]; lev_green=lev[0,1];lev_blue=lev[0,2];
Вроде должно присвоится каждой переменной 255, но почему-то они получают, судя по дебагеру(да и в железе не то):96, 99, 102. Да я знаю, что массив 3 на 3, но определяю и использую только первую строку, пока.
Последний раз редактировалось Алексей bird Вт ноя 28, 2017 12:00:09, всего редактировалось 1 раз.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я могу ошибаться, но результат операции "запятая" определяется первым перечисляемым значением... поэтому 0,0 это 0, и соответственно [0,0] эквивалентно [0]. а для многомерных массивов это означает указатель... вот и странное значение.

правильно надо так: lev[0][0];
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

ARV
Спасибо!

Добавлено after 6 hours 3 minutes 40 seconds:
Ещё вопрос про массивы: как лучше поступить, использовать один большой массив [160][3] или разбить на меньшие восемь массивов [20][3]?
По идее в первом случае потребуется меньше памяти, но это мой дилетантский взгляд)))
ЗЫ Массивы планирую держать в EEPROM
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

размер массива в первом случае 160х3=480, во втором 20х3=60 - это как бы две большие разницы. ну и никак первый массив меньше памяти не займет...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Памяти должно уйти поровну, контроллер потом не будет знать что это массив, он будет брать адрес= адрес 0го + i, адрес 0го скорее всего будет константой, вычисленной при компиляции.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 134
Зарегистрирован: Вс дек 28, 2008 18:07:28
Откуда: Москва

Сообщение Алексей bird »

Ivanoff-iv спасибо!
ARV не забудь, что 60 ещё надо умножить на 8, тк. будет восемь массивов
Реклама
Ответить

Вернуться в «AVR»