CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):unsigned int indication_IND;
Если вывести число a[0] = 186; то оно правильно выводится, а остальные неправильно... Что то я не догоняю...
А вы уверены, что unsigned int? Похоже на восмиразрядную переменную. Поэтому все ваши числа, начиная с 279 отображаются неверно. Так 372 будет 116; 465 - 209, и т. д.
Это может быть даже не здесь, а при обработке вывода на индикатор.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):если я объявляю массив как flash unsigned int a[100]; то как потом мне в нем изменить значение элементов?
Насколько известно, только при программировании МК. Если нужно, записывайте в EEPROM. Там оперативные изменения возможны.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

Нужно решить это математическое действие зная все переменные.
indication_IND = (y1 + ((y2-y1)/(x2-x1))*(x-x1));

float y1, y2, x, x1, x2, ;
unsigned int indication_IND;

Почему то у меня на индикаторе indication_IND всегда горит Ноль! Почему? Я же ведь использую переменные с плавающей точкой!!!

indication_IND = (30+((45-30)/(465-372))*(418-372)) = 37,419

Или нельзя сразу много действий делать?
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):Почему то у меня на индикаторе indication_IND всегда горит Ноль! Почему? Я же ведь использую переменные с плавающей точкой!!!
indication_IND = (30+((45-30)/(465-372))*(418-372)) = 37,419
У вас результат записывается в переменную unsigned int, несмотря на то, что в правой части используются переменные float
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

ValBag писал(а):
Amstron писал(а):Почему то у меня на индикаторе 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
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

Ноль выводил, потомуто накосячил с выводом числа x1 и тому подобных.

А вопщих чертах работает!!! и нет ни какой ругани с unsigned int, несмотря на то, что в правой части используются переменные float!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):А почему если я делаю так, то у меня на индикаторе пишется число 6 ??? По Вашему умузаключению же такого быть не может!
x1 = 93;
y1 =15 ;
indication_IND = x1/y1; //indication_IND = 6,2
Соответствие типов переменных, это не мое умозаключение, а правила СИ. Я не сказал, что 0 на индикаторе будет всегда. Ругани не будет, а компилятор молча запишет результат в целочисленную (а не дробную) переменную int, а отрицательный "результат" вылезет потом.
Аватара пользователя
odesasha
Прорезались зубы
Сообщения: 237
Зарегистрирован: Пт фев 12, 2010 14:02:22
Откуда: Одесса

Re: CodeVision AVR в вопросах и ответах

Сообщение odesasha »

Amstron писал(а):
А вопщих чертах работает!!! и нет ни какой ругани с unsigned int, несмотря на то, что в правой части используются переменные float!

Выключены предупреждения в настройке Compiler по несоответствию типов.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

odesasha писал(а):
Amstron писал(а):
А вопщих чертах работает!!! и нет ни какой ругани с unsigned int, несмотря на то, что в правой части используются переменные float!

Выключены предупреждения в настройке Compiler по несоответствию типов.

Ну, да так и есть... Пока не вижу смысла паниковать...(((
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

Помогите разобраться! Если я создаю массив приведеный ниже то у меня программа занмает 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 раз.
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: CodeVision AVR в вопросах и ответах

Сообщение radio-kot »

как в Хелпе CVAVR написано в примерах
Будете проходить мимо- проходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):Помогите разобраться!
Чтобы не было варнинга, объявление переменной в ЕЕPROM:

Код: Выделить всё

#pragma warn-
eeprom unsigned int massiv[100] = {...}; // инициализация, если нужно.
#pragma warn+
Ну а дальше, обращение как к обычной переменной, без всякого EEPROM.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

ValBag писал(а):Ну а дальше, обращение как к обычной переменной, без всякого EEPROM.

Все отлично! Спасибо! Но есть одно НООО!
Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ...
Как быть???

Почитал Лебедева, там написано что ВСЕ элементы массива инициализируются нулями , если записать так:
#pragma warn-
eeprom unsigned int ddd[100];
#pragma warn+


У меня раньше так и было, пока я не стал использовать eeprom! Пойду в настройках компиля пошарюсь...
Последний раз редактировалось Amstron Пн янв 03, 2011 12:14:11, всего редактировалось 1 раз.
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: CodeVision AVR в вопросах и ответах

Сообщение radio-kot »

Начать думать.
Будете проходить мимо- проходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ... Как быть???
Устанавливаются в "0" неинициализированные ячейки глобального массива, а локального - могут содержать что угодно. Так-что, если необходимы нули, придется их "вставлять". Или, если не делали, попробуйте перед программированием стереть МК.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

ValBag писал(а):
Amstron писал(а):Те ячейки массива которые не были инициализированны имеют одно и тоже число 535 (по крайней мере у меня на семисегментнике 3-х разрядном), а должно быть НОЛЬ... Как быть???
Устанавливаются в "0" неинициализированные ячейки глобального массива, а локального - могут содержать что угодно. Так-что, если необходимы нули, придется их "вставлять". Или, если не делали, попробуйте перед программированием стереть МК.

Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!

Откройте страницу 477 в Лебедеве пособие для начинающих 2008 год. В низу есть два обзаца. ДАк в них говориться:
В последнем говорится, что все элементы массив инициализируются со значением НОЛЬ!

Почему то у меня не так, после того как я начал использовать eeprom ...
Последний раз редактировалось Amstron Пн янв 03, 2011 12:44:56, всего редактировалось 1 раз.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Amstron писал(а):Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

ValBag писал(а):
Amstron писал(а):Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.

Попробывал отдельно элемент масива запрограмировать нулем - ПОЛУЧИЛОСЬ!
Странное дело... почему же у меня неинициализированные элементы инициализируются не НУЛЯМИ... а совсем другими ОДИНАКОВЫМИ числами?
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: CodeVision AVR в вопросах и ответах

Сообщение Amstron »

ValBag писал(а):
Amstron писал(а):Я стирать пробывал. Проверил, все ли стерто!!! Все равно ни как... Он у меня глобальный!!! И раньше им был и все было в норме!
Если все стерто в EEPROM, ищите "косяк": или в программе или в "полудохлом" EEPROM-е. Можете еще проделать такой фокус: В цикле запрограммируйте все члены массива нулями, а затем прочитайте EEPROM. Если все нормально, инициализируйте нужное.

Считал еепром (сейчас вспомнил что в программаторе есть такое окно). Дак вот почти везде FF и только дасять элементов массива которые я инициализировал, записанны мои часла. Странно.... почему же у меня на индикацию выводится не НОЛЬ а совсем другое число((((
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

потому что вы юзаете CVAVR :))) очевидно, он считает, что неинициализированные явно "переменные" в eeprom сохраняют свое значение, а оно при стирании eeprom равно 0xFF
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

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