Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 02, 2011 14:50:46
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Amstron писал(а):
unsigned int indication_IND; Если вывести число a[0] = 186; то оно правильно выводится, а остальные неправильно... Что то я не догоняю...
А вы уверены, что unsigned int? Похоже на восмиразрядную переменную. Поэтому все ваши числа, начиная с 279 отображаются неверно. Так 372 будет 116; 465 - 209, и т. д. Это может быть даже не здесь, а при обработке вывода на индикатор.
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 02, 2011 15:39:03
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Amstron писал(а):
Почему то у меня на индикаторе indication_IND всегда горит Ноль! Почему? Я же ведь использую переменные с плавающей точкой!!! indication_IND = (30+((45-30)/(465-372))*(418-372)) = 37,419
У вас результат записывается в переменную unsigned int, несмотря на то, что в правой части используются переменные float
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Почему то у меня на индикаторе indication_IND всегда горит Ноль! Почему? Я же ведь использую переменные с плавающей точкой!!! indication_IND = (30+((45-30)/(465-372))*(418-372)) = 37,419
У вас результат записывается в переменную unsigned int, несмотря на то, что в правой части используются переменные float
А почему если я делаю так, то у меня на индикаторе пишется число 6 ??? По Вашему умузаключению же такого быть не может! x1 = 93; y1 =15 ; indication_IND = x1/y1; //indication_IND = 6,2
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 02, 2011 16:10:23
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Amstron писал(а):
А почему если я делаю так, то у меня на индикаторе пишется число 6 ??? По Вашему умузаключению же такого быть не может! x1 = 93; y1 =15 ; indication_IND = x1/y1; //indication_IND = 6,2
Соответствие типов переменных, это не мое умозаключение, а правила СИ. Я не сказал, что 0 на индикаторе будет всегда. Ругани не будет, а компилятор молча запишет результат в целочисленную (а не дробную) переменную int, а отрицательный "результат" вылезет потом.
Помогите разобраться! Если я создаю массив приведеный ниже то у меня программа занмает 1537 слов 0% eeprom unsigned int massiv[100];
А если создам в eeprom, то eeprom unsigned int massiv[100]; 1569 слов, 200 байт eeprom 39,1 % от eeprom.
Вопрос: я как пологаю 1569 это общий размер файла прошивки. При создании массива в области eeprom у меня добавилось еще 32 слова - я пологаю это вектора адресов на массив коорый находится в eeprom???
Второе: При создании массива в eeprom компиль ругнулся следующей фразой: Warning : L40: uninitialized EEPROM Что бы это могло значить? Переводчик говорит что неинициализированный EEPROM.
Скажите, если я делаю массив в памяти eeprom, то где его инициализировать? Точнее как в этот массив записать значения? Далаю вот такую запись eeprom massiv[5] = 279; не проканывает! Тоесть все как и раньше, только вставляю слово eeprom - но не получается.
Последний раз редактировалось Amstron Пн янв 03, 2011 10:45:46, всего редактировалось 1 раз.
Ну а дальше, обращение как к обычной переменной, без всякого EEPROM.
Все отлично! Спасибо! Но есть одно НООО! Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ... Как быть???
Почитал Лебедева, там написано что ВСЕ элементы массива инициализируются нулями , если записать так: #pragma warn- eeprom unsigned int ddd[100]; #pragma warn+
У меня раньше так и было, пока я не стал использовать eeprom! Пойду в настройках компиля пошарюсь...
Последний раз редактировалось Amstron Пн янв 03, 2011 12:14:11, всего редактировалось 1 раз.
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 03, 2011 12:21:48
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Amstron писал(а):
Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ... Как быть???
Устанавливаются в "0" неинициализированные ячейки глобального массива, а локального - могут содержать что угодно. Так-что, если необходимы нули, придется их "вставлять". Или, если не делали, попробуйте перед программированием стереть МК.
Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ... Как быть???
Устанавливаются в "0" неинициализированные ячейки глобального массива, а локального - могут содержать что угодно. Так-что, если необходимы нули, придется их "вставлять". Или, если не делали, попробуйте перед программированием стереть МК.
Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Откройте страницу 477 в Лебедеве пособие для начинающих 2008 год. В низу есть два обзаца. ДАк в них говориться: В последнем говорится, что все элементы массив инициализируются со значением НОЛЬ!
Почему то у меня не так, после того как я начал использовать eeprom ...
Последний раз редактировалось Amstron Пн янв 03, 2011 12:44:56, всего редактировалось 1 раз.
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн янв 03, 2011 12:42:04
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Amstron писал(а):
Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.
Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.
Попробывал отдельно элемент масива запрограмировать нулем - ПОЛУЧИЛОСЬ! Странное дело... почему же у меня неинициализированные элементы инициализируются не НУЛЯМИ... а совсем другими ОДИНАКОВЫМИ числами?
Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.
Считал еепром (сейчас вспомнил что в программаторе есть такое окно). Дак вот почти везде FF и только дасять элементов массива которые я инициализировал, записанны мои часла. Странно.... почему же у меня на индикацию выводится не НОЛЬ а совсем другое число((((
потому что вы юзаете CVAVR очевидно, он считает, что неинициализированные явно "переменные" в eeprom сохраняют свое значение, а оно при стирании eeprom равно 0xFF
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения