Программу пишу в Code Vision
Переменные в Code Vision
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Переменные в Code Vision
Надо сохранить 60000000000 (десятичное) в eeprom, какой тип переменной объявлять. Такая eeprom unsigned int freqense; не катит, это только 4 байта, а мне надо как минимум 5. Как объявить переменную на 8 байт. 
Программу пишу в Code Vision
Программу пишу в Code Vision
- Panda_Y2K
- Грызет канифоль
- Сообщения: 258
- Зарегистрирован: Пт сен 23, 2011 06:44:41
- Откуда: ЮФО
- Контактная информация:
Re: Переменные в Code Vision
А для чего???
Проще всего разбить значение на части и сохранить в двух переменных unsigned int
Проще всего разбить значение на части и сохранить в двух переменных unsigned int
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: Переменные в Code Vision
Ну или unsigned long / unsigned long long попробуйте...
ЗЫ пишите правильно - frequency а не freqense, если речь о частоте. Не заставляйте течь кровь из глаз читающих ваш код
ЗЫ пишите правильно - frequency а не freqense, если речь о частоте. Не заставляйте течь кровь из глаз читающих ваш код
only pure true norwegian blackx 
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Переменные в Code Vision
Если нужно сохранить именно 60000000000, о чем говорит ТС, то достаточно битовой переменной. Бит взведен - число есть, бит сброшен - там ноль.
Docendo discimus
Re: Переменные в Code Vision
pyzhman писал(а):Если нужно сохранить именно 60000000000, о чем говорит ТС, то достаточно битовой переменной. Бит взведен - число есть, бит сброшен - там ноль.
+ !!
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Re: Переменные в Code Vision
Это число меняется и участвует в вычислениях. Long Long при компиляции выдает ошибку.
60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца.
60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Переменные в Code Vision
Сохранить просто 60 в ансижнед, а при вычислениях не забывать степень десятки.
Docendo discimus
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Переменные в Code Vision
А как Вы эту частоту храните в памяти после вычисления ? Узнав это, уже и будут советы по сохранению её в еепром.60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца
-
Sasha Lauta
- Родился
- Сообщения: 11
- Зарегистрирован: Пн апр 26, 2010 22:54:01
Re: Переменные в Code Vision
Аlex писал(а):А как Вы эту частоту храните в памяти после вычисления ? Узнав это, уже и будут советы по сохранению её в еепром.60000000000 это максимальная частота в герцах три последних разряда это дробная часть герца
В том то и проблема, что эта частота результат вычислений и пока результат не превышает 4 байта (гдето 4 с чемто мегагерца ) то все нормально, программа работает правильно. Когда переполняется регистр памяти (4 байта) то на дисплей уже сунет какой то бред. Регистр начинает заполнятся по второму кругу.
Думаю сделать дробную часть отдельно а целые будут помещаться в эту переменную, но это сильно усожняет жизнь, надо городить еще не малый кусок программы, плюс это надо еще придумать чтоб корректно работало. Проще было б использовать переменную куда б это число помещалось, но такого нет
Если есть идеи как разделить дробную часть и целые, пишите, буду благодарен за любой совет
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Переменные в Code Vision
Ваши вычисления нам неизвестны, трудно что-то посоветовать.Если есть идеи как разделить дробную часть и целые, пишите, буду благодарен за любой совет
ЗЫ: Может дробную часть сделать поменьше ? На порядок, к примеру.
Re: Переменные в Code Vision
60 МГц с разрешением в 0.001 Гц ?
Что ваш AVR тут делает?
Что ваш AVR тут делает?

Re: Переменные в Code Vision
Можно использовать BСD представление. И тогда разрядность числа может быть какой угодно большой. Существует чуть ли не тысячи готовых библиотек с реализацией BCD арифметики. Но, в любом случае, если в каком-то устройстве в числах появляются 8-10 разрядов, это первый признак, что это устройство либо супердорогое и супернавороченное, либо сделанное ламером.
- mehanik_all
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Вт авг 13, 2013 12:13:07
Re: Переменные в Code Vision
double - 8 b - -1.8E-308 ... 1.8E+308
Можно так и записать: 60000000.000 !
Можно так и записать: 60000000.000 !
- mehanik_all
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Вт авг 13, 2013 12:13:07
Re: Переменные в Code Vision
Не обратил внимания, что пишется в CodeVision. В нём 64-битные переменные double воспринимаются как 32-битные. Так что придётся разбивать на две части.
Re: Переменные в Code Vision
mehanik_all писал(а):Можно так и записать: 60000000.000
Угу, с 11-12 значащими разрядами. Записать то можно, но вот вопрос, что больше, 60000000.000 или 60000000.001 может поставить в тупик вашу программу. Кстати, типичная ошибка начинающего программиста, потеря точности при расчётах с плавающей арифметикой.
mehanik_all писал(а):В нём 64-битные переменные double воспринимаются как 32-битные. Так что придётся разбивать на две части.
Это как ?
- mehanik_all
- Открыл глаза
- Сообщения: 47
- Зарегистрирован: Вт авг 13, 2013 12:13:07
Re: Переменные в Code Vision
Cheba писал(а):Это как ?
Что как? Тип 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
Не совсем. Стандарт Си не оговаривает конкретный размер типа данных. Все зависит от реализации. В Си принято что 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
Стандарт Си не оговаривает конкретный размер типа данных - по-этому у каждого компилятора есть свои нюансы.
int является типом целочисленных данных. Со всеми спецификаторами и модификаторами я знаю 17 штук. Часть из них 2 байта, часть 4 байта, и ещё часть длинной не менее 2-ух байт в зависимости от длинны (с последним я сам не разобрался пока - возможно имелось ввиду зависимость от разрядности системы).
Здесь как раз int не менее 2-ух байт, long int 4 байта. Хотя в CVAVR int-2 и long int-4.
long это не тип данных, это модификатор типа. Может имелось ввиду double, который как раз 8 байт в Си.
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
Простой long, как и short, без явного типа, воспринимается компилятором как long int и short int.
double это вроде long float. По крайней мере считается дробным числом удвоенного размера.
Не знаю вот насколько много можно этих long поставить перед идентификатором. Ну там long long long int.
double это вроде long float. По крайней мере считается дробным числом удвоенного размера.
Не знаю вот насколько много можно этих long поставить перед идентификатором. Ну там long long long int.
Re: Переменные в Code Vision
А нельзя-ли как-то так сделать:
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-ом полюбому проще манипулировать
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 раза.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.