реклама на сайте
подробности

 
 
> Хранение integer во внутреннем EEPROM
BelTech
сообщение Feb 22 2007, 21:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 8-12-06
Пользователь №: 23 269



Проблема в следующем.
Есть переменная типа integer .Например unsigned int current_position=50000.
По ходу программы она меняется и при выключении устройства надо сохранить эту переменную во внутреннем EEPROM.
Но так как ячейки байтовые , то как я понимаю эту переменную надо разделить на 2 по 8 бит и записать по двум адресам.

С этим вот проблем вроде нет.Делаю так:

#define LOW(int) (unsigned char)(*((char*)&(int)+0)) //returns lowbyte
#define HIGH(int) (unsigned char)(*((char*)&(int)+1)) //returns highbyte

unsigned int current_position=50000;
unsigned char current_position_msb; //highbyte
unsigned char current_position_lsb; //lowbyte

current_position_msb=HIGH(current_position); // возвращает 195
current_position_lsb=LOW(currentr_position); // возвращает 80
И эти значения пишу в EEPROM.

При включении надо восстановить эту переменную.
Читаю current_position_msb и current_position_lsb,но как соеденить их в Integer,чтобы получилось current_position=50000, не знаю.
Или может есть решение по проще?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex11
сообщение Feb 24 2007, 02:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Sorry, не доглядел. А то, что он догадывается за программиста что требуется, это, скорее, баг компилятора, чем фича.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 24 2007, 11:31
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex11 @ Feb 24 2007, 01:26) *
А то, что он догадывается за программиста что требуется, это, скорее, баг компилятора, чем фича.
Он не догадывается. Он скорее следует стандарту, где сказано что-то вроде такого: типы, меньшие int на время арифметических операций приводятся к int. Хотя зачем это придумали - для меня загадка.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 24 2007, 20:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Сергей Борщ @ Feb 24 2007, 12:31) *
Цитата(Alex11 @ Feb 24 2007, 01:26) *

А то, что он догадывается за программиста что требуется, это, скорее, баг компилятора, чем фича.
Он не догадывается. Он скорее следует стандарту, где сказано что-то вроде такого: типы, меньшие int на время арифметических операций приводятся к int. Хотя зачем это придумали - для меня загадка.


smile.gif

Не знаю зачем. Возможно для меня. smile.gif Практически всё написанное в последнем проекте не требывало уточнений. Лишь в одном месте где по операции с несколькими указателями надо было получить данные расположенные во флэш - пришлось явно указывать.

Вообще, в этом смысле Си мне очень понравился. Практически никаких ограничений. А я уже вполне взрослый чтобы понимать что пишу. smile.gif

Например в паскале не пролез бы оператор
i = c + '0'; или i = c-'A';
а он очень нагляден и смысл его очевиден.
То же и с указателями. Так например я ввожу данные побайтно, а потом интерпретирую их как структуры. Конечно в паскале есть нетипизированные указатели, но работать с ними сложнее.
Ну и т.д. и т.п.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- BelTech   Хранение integer во внутреннем EEPROM   Feb 22 2007, 21:51
- - SasaVitebsk   Цитата(BelTech @ Feb 22 2007, 22:51) Проб...   Feb 22 2007, 22:00
- - BelTech   Я работаю в Codevision и попробовав: unsigned ...   Feb 22 2007, 22:21
- - smk   В CVAVR можно объявить так переменную (а я так дел...   Feb 22 2007, 22:40
- - WHALE   Дык и обьявите ее eeprom unsigned int curr_pos; а...   Feb 22 2007, 22:46
- - Leen   Довольно некорректно, промежду прочим. Цитатаunsig...   Feb 23 2007, 03:48
|- - SasaVitebsk   Цитата(Leen @ Feb 23 2007, 04:48) Довольн...   Feb 23 2007, 13:40
- - BelTech   WHALE и smk Про такое объявление переменной я знаю...   Feb 23 2007, 10:43
- - smk   Цитатаcurr_pos в программе постоянно меняется и ес...   Feb 23 2007, 10:50
- - defunct   Один из вариантов: Кодtypedef unsigned char U8; ...   Feb 23 2007, 13:59
- - Alex11   Для IAR выражение curr_pos = curr_pos_lsb + curr_p...   Feb 23 2007, 15:18
|- - SasaVitebsk   Цитата(Alex11 @ Feb 23 2007, 16:18) Для I...   Feb 23 2007, 22:28
- - Сергей Борщ   Цитата(SasaVitebsk @ Feb 24 2007, 19:45) ...   Feb 24 2007, 21:39
- - SasaVitebsk   Цитата(Сергей Борщ @ Feb 24 2007, 22:39) ...   Feb 25 2007, 14:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 06:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016