Запись в EEPROM отрицательных значений
Запись в EEPROM отрицательных значений
Доброго времени суток.
Такая ситуация, использую штатные блоки чтения и записи EEPROM и переменную, у всех установлен тип данных integer.
Из переменной по сигналу значение записывается в EEPROM, затем при старте программы значение из EEPROM читается в переменную.
Если в переменной используются положительные значения все работает правильно. Но если из переменной в EEPROM передается отрицательное значение то в EEPROM оказывается совсем другое значение, например если в переменной -1 то в EEPROM записывается 65535.
Я не совсем понимаю как это вообще возможно, ведь у EEPROM установлен тип данных integer и такое число туда не должно влезать.
Вот этот кусок, здесь на EEPROM уже просто константой подаю -11 и после сигнала записи на выходе этой EEPROM через конвертацию числа в строку получаю 65525 Как такое возможно или, что я делаю не так?
			
			
						Такая ситуация, использую штатные блоки чтения и записи EEPROM и переменную, у всех установлен тип данных integer.
Из переменной по сигналу значение записывается в EEPROM, затем при старте программы значение из EEPROM читается в переменную.
Если в переменной используются положительные значения все работает правильно. Но если из переменной в EEPROM передается отрицательное значение то в EEPROM оказывается совсем другое значение, например если в переменной -1 то в EEPROM записывается 65535.
Я не совсем понимаю как это вообще возможно, ведь у EEPROM установлен тип данных integer и такое число туда не должно влезать.
Вот этот кусок, здесь на EEPROM уже просто константой подаю -11 и после сигнала записи на выходе этой EEPROM через конвертацию числа в строку получаю 65525 Как такое возможно или, что я делаю не так?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
			
						- Sancho
 - Полковник
 - Сообщения: 4066
 - Зарегистрирован: 25 дек 2015, 17:32
 - Откуда: Ярославль.
 - Имя: Александр
 - Поблагодарили: 5 раз
 - Контактная информация:
 
Запись в EEPROM отрицательных значений
Тип данных - просто сделайте, после чтения, присвойте переменной с типом инт, и её на дисплей.
Отправлено спустя 27 секунд:
Завтра посмотрю другие варианты.
Отправлено спустя 7 минут 9 секунд:
Ха, внутри вот так!
			
			
									
						Отправлено спустя 27 секунд:
Завтра посмотрю другие варианты.
Отправлено спустя 7 минут 9 секунд:
Ха, внутри вот так!
Код: Выделить всё
 int readIntegerFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte hight = readByteFromEEPROM( addres,  bitAddres,  chipAddres);
byte low = readByteFromEEPROM( (addres+1),  bitAddres,  chipAddres);
return  word(hight, low);мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
			
						Запись в EEPROM отрицательных значений
Я правильно понял
была у меня такая мысль, но результат тот же.
Там ведь и так везде тип данных integer.
Искал решение проблемы в интернете и наткнулся вот на такую формулировку
"одни и теже 16 бит памяти если смотреть на них как на int это -11, а если смотреть на них же как на unsigned int то это 65525"
Вроде как вот оно, но только не понятно как это применить то, ведь как я уже писал у всех элементов установлен один и тот же тип данных, это integer
			
			
						Там ведь и так везде тип данных integer.
Искал решение проблемы в интернете и наткнулся вот на такую формулировку
"одни и теже 16 бит памяти если смотреть на них как на int это -11, а если смотреть на них же как на unsigned int то это 65525"
Вроде как вот оно, но только не понятно как это применить то, ведь как я уже писал у всех элементов установлен один и тот же тип данных, это integer
У вас нет необходимых прав для просмотра вложений в этом сообщении.
			
						Запись в EEPROM отрицательных значений
Утверждение верное, так и есть. Не в тему, но как показала практика, помимо знакового и беззнакового int,  бывает еще и int 16 bit и int 32 bit
			
			
									
						когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
			
						не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
- 
				Ingwar
 - Полковник
 - Сообщения: 1928
 - Зарегистрирован: 28 окт 2015, 22:47
 - Откуда: Ленобласть
 - Имя: Игорь
 - Поблагодарили: 3 раза
 
Запись в EEPROM отрицательных значений
Проверил с записью через переменную, но не в железе.
[spoiler][/spoiler]
[spoiler][/spoiler]
			
			
						[spoiler][/spoiler]
[spoiler][/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
			
						Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
			
						Запись в EEPROM отрицательных значений
Да, в протеусе порой все работает идеально.
Не знаю имеет ли это значение в данном случае, в качестве железа у меня ESP8266-01
			
			
									
						Не знаю имеет ли это значение в данном случае, в качестве железа у меня ESP8266-01
- Sancho
 - Полковник
 - Сообщения: 4066
 - Зарегистрирован: 25 дек 2015, 17:32
 - Откуда: Ярославль.
 - Имя: Александр
 - Поблагодарили: 5 раз
 - Контактная информация:
 
Запись в EEPROM отрицательных значений
[ref]hsl[/ref], Найдите в коде, внизу, строки как я писал выше, и замените последние три строки на  
int16_t i = readByteFromEEPROM( addres, bitAddres, chipAddres);
i = i<<8 | readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return i;
Отправлено спустя 2 минуты 10 секунд:
			
			
									
						int16_t i = readByteFromEEPROM( addres, bitAddres, chipAddres);
i = i<<8 | readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return i;
Отправлено спустя 2 минуты 10 секунд:
80 MHz 32-bit процессор
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
			
						- RedSky
 - Лейтенант
 - Сообщения: 576
 - Зарегистрирован: 19 дек 2016, 20:07
 - Откуда: Днепропетровск
 - Имя: Алексей
 - Поблагодарили: 2 раза
 
Запись в EEPROM отрицательных значений
Помню сталкивался с таким. Попробуйте ваши 65 тысяч привести к типу int.  Создайте простой блок out = int(in), должно помочь.
			
			
									
						- Sancho
 - Полковник
 - Сообщения: 4066
 - Зарегистрирован: 25 дек 2015, 17:32
 - Откуда: Ярославль.
 - Имя: Александр
 - Поблагодарили: 5 раз
 - Контактная информация:
 
Запись в EEPROM отрицательных значений
[ref]RedSky[/ref], 8266 интерпретирует данные как 32 бита, поэтому так не поможет. наверно.
			
			
									
						мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
			
						Запись в EEPROM отрицательных значений
тогда в данном случае у вас инт это + - 2147483647hsl писал(а): 22 мар 2019, 23:54 знаю имеет ли это значение в данном случае, в качестве железа у меня ESP8266
Запись в EEPROM отрицательных значений
Я только пробую работать с FLProg и не совсем понял, что это за простой блок такой, в стандартных не нашел.RedSky писал(а): 23 мар 2019, 08:22 Помню сталкивался с таким. Попробуйте ваши 65 тысяч привести к типу int. Создайте простой блок out = int(in), должно помочь.
А вот такое решение
Помогло, все заработало как надо.Sancho писал(а): 23 мар 2019, 08:15
Найдите в коде, внизу, строки как я писал выше, и замените последние три строки на
int16_t i = readByteFromEEPROM( addres, bitAddres, chipAddres);
i = i<<8 | readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return i;
Спасибо за помощь.
Кто сейчас на конференции
Сейчас этот форум просматривают: tema и 1 гость