Переменные в Code Vision

Обсуждаем контроллеры компании Atmel.
Sasha Lauta
Родился
Сообщения: 11
Зарегистрирован: Пн апр 26, 2010 22:54:01

Переменные в Code Vision

Сообщение Sasha Lauta »

Надо сохранить 60000000000 (десятичное) в eeprom, какой тип переменной объявлять. Такая eeprom unsigned int freqense; не катит, это только 4 байта, а мне надо как минимум 5. Как объявить переменную на 8 байт. :cry:

Программу пишу в Code Vision
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

Re: Переменные в Code Vision

Сообщение Panda_Y2K »

А для чего???
Проще всего разбить значение на части и сохранить в двух переменных unsigned int
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Переменные в Code Vision

Сообщение blackx »

Ну или unsigned long / unsigned long long попробуйте...

ЗЫ пишите правильно - frequency а не freqense, если речь о частоте. Не заставляйте течь кровь из глаз читающих ваш код :twisted:
Изображение only pure true norwegian blackx Изображение
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Переменные в Code Vision

Сообщение pyzhman »

Если нужно сохранить именно 60000000000, о чем говорит ТС, то достаточно битовой переменной. Бит взведен - число есть, бит сброшен - там ноль.
Docendo discimus
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Переменные в Code Vision

Сообщение Jack_A »

pyzhman писал(а):Если нужно сохранить именно 60000000000, о чем говорит ТС, то достаточно битовой переменной. Бит взведен - число есть, бит сброшен - там ноль.


+ !! :)
Sasha Lauta
Родился
Сообщения: 11
Зарегистрирован: Пн апр 26, 2010 22:54:01

Re: Переменные в Code Vision

Сообщение Sasha Lauta »

Это число меняется и участвует в вычислениях. Long Long при компиляции выдает ошибку.
60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Переменные в Code Vision

Сообщение pyzhman »

Сохранить просто 60 в ансижнед, а при вычислениях не забывать степень десятки.
Docendo discimus
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Переменные в Code Vision

Сообщение Аlex »

60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца
А как Вы эту частоту храните в памяти после вычисления ? Узнав это, уже и будут советы по сохранению её в еепром.
Sasha Lauta
Родился
Сообщения: 11
Зарегистрирован: Пн апр 26, 2010 22:54:01

Re: Переменные в Code Vision

Сообщение Sasha Lauta »

Аlex писал(а):
60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца
А как Вы эту частоту храните в памяти после вычисления ? Узнав это, уже и будут советы по сохранению её в еепром.


В том то и проблема, что эта частота результат вычислений и пока результат не превышает 4 байта (гдето 4 с чемто мегагерца ) то все нормально, программа работает правильно. Когда переполняется регистр памяти (4 байта) то на дисплей уже сунет какой то бред. Регистр начинает заполнятся по второму кругу.
Думаю сделать дробную часть отдельно а целые будут помещаться в эту переменную, но это сильно усожняет жизнь, надо городить еще не малый кусок программы, плюс это надо еще придумать чтоб корректно работало. Проще было б использовать переменную куда б это число помещалось, но такого нет :cry:

Если есть идеи как разделить дробную часть и целые, пишите, буду благодарен за любой совет
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Переменные в Code Vision

Сообщение Аlex »

Если есть идеи как разделить дробную часть и целые, пишите, буду благодарен за любой совет
Ваши вычисления нам неизвестны, трудно что-то посоветовать.

ЗЫ: Может дробную часть сделать поменьше ? На порядок, к примеру.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Переменные в Code Vision

Сообщение a_skr »

60 МГц с разрешением в 0.001 Гц ? :shock:
Что ваш AVR тут делает? :dont_know:
Cheba
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Re: Переменные в Code Vision

Сообщение Cheba »

Можно использовать BСD представление. И тогда разрядность числа может быть какой угодно большой. Существует чуть ли не тысячи готовых библиотек с реализацией BCD арифметики. Но, в любом случае, если в каком-то устройстве в числах появляются 8-10 разрядов, это первый признак, что это устройство либо супердорогое и супернавороченное, либо сделанное ламером.
Аватара пользователя
mehanik_all
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 13, 2013 12:13:07

Re: Переменные в Code Vision

Сообщение mehanik_all »

double - 8 b - -1.8E-308 ... 1.8E+308

Можно так и записать: 60000000.000 !
Аватара пользователя
mehanik_all
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 13, 2013 12:13:07

Re: Переменные в Code Vision

Сообщение mehanik_all »

Не обратил внимания, что пишется в CodeVision. В нём 64-битные переменные double воспринимаются как 32-битные. Так что придётся разбивать на две части.
Cheba
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Re: Переменные в Code Vision

Сообщение Cheba »

mehanik_all писал(а):Можно так и записать: 60000000.000

Угу, с 11-12 значащими разрядами. Записать то можно, но вот вопрос, что больше, 60000000.000 или 60000000.001 может поставить в тупик вашу программу. Кстати, типичная ошибка начинающего программиста, потеря точности при расчётах с плавающей арифметикой.
mehanik_all писал(а):В нём 64-битные переменные double воспринимаются как 32-битные. Так что придётся разбивать на две части.

Это как ? :shock:
Аватара пользователя
mehanik_all
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 13, 2013 12:13:07

Re: Переменные в Code Vision

Сообщение mehanik_all »

Cheba писал(а):Это как ? :shock:


Что как? Тип double в Си/С++ это 8 байт.
В CodeVisionAVR:
long int - длинное целое 32 бит
unsigned long int - длинное целое без знака 32 бит
signed long int - длинное целое со знаком 32 бит
float - с плавающей точкой 32 бит
double - двойное 32 бит

Или как разбивать на две части?
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Переменные в Code Vision

Сообщение COKPOWEHEU »

Не совсем. Стандарт Си не оговаривает конкретный размер типа данных. Все зависит от реализации. В Си принято что char 1 байт, short 2 байта, int 4 байта, long 8 байт ну и так далее. Я так понимаю что int равняется одному машинному слову а char по традиции 1 байт. Но еще раз, все зависит от реализации. В контроллерах частенько int 2 байта. Впрочем, при проверке выяснилось что мой компилятор не видит разницы между int и long int, считая обоих по 4 байта.
Аватара пользователя
mehanik_all
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 13, 2013 12:13:07

Re: Переменные в Code Vision

Сообщение mehanik_all »

Стандарт Си не оговаривает конкретный размер типа данных - по-этому у каждого компилятора есть свои нюансы.
int является типом целочисленных данных. Со всеми спецификаторами и модификаторами я знаю 17 штук. Часть из них 2 байта, часть 4 байта, и ещё часть длинной не менее 2-ух байт в зависимости от длинны (с последним я сам не разобрался пока - возможно имелось ввиду зависимость от разрядности системы).
Здесь как раз int не менее 2-ух байт, long int 4 байта. Хотя в CVAVR int-2 и long int-4.

long это не тип данных, это модификатор типа. Может имелось ввиду double, который как раз 8 байт в Си.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Переменные в Code Vision

Сообщение COKPOWEHEU »

Простой long, как и short, без явного типа, воспринимается компилятором как long int и short int.
double это вроде long float. По крайней мере считается дробным числом удвоенного размера.
Не знаю вот насколько много можно этих long поставить перед идентификатором. Ну там long long long int.
Аватара пользователя
vek
Вымогатель припоя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Re: Переменные в Code Vision

Сообщение vek »

А нельзя-ли как-то так сделать:
X = 60000000000 = 0xD F847 5800
ТЕМР - unsigned int резервирует 2 байта


TEMP = X>>32 =0xD
TEMP--> eep // старшую часть запрятали в епрум
TEMP2 = TEMP<<32 = 0xD 0000 0000
TEMP3 = X - TEMP2 = 0xD F847 5800 - 0xD 0000 0000 = F847 5800
TEMP = TEMP3>>16 = 0xF847
TEMP-->eep //прячем медиум-часть
TEMP2=ТЕМР<<16 = F847 0000
TEMP = TEMP2 - TEMP = 0x5800
TEMP-->eep //прячем лоу-часть

int-ом полюбому проще манипулировать
Последний раз редактировалось vek Пн сен 09, 2013 16:36:40, всего редактировалось 4 раза.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Ответить

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