Запись в 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
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Запись в 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
- Откуда: Днепропетровск
- Имя: Алексей
- Поблагодарили: 1 раз
Запись в 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;
Спасибо за помощь.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя