|
Как разбить 2 байта по байту)) |
|
|
|
Oct 17 2008, 11:59
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Палыч @ Oct 17 2008, 15:29)  Например: unsigned int A; unsigned char b, c; b= A&0xFF; c= A>>8; A=(c<<8)|b;
или через union... У меня A становится просто b и все. Допустим A = 2008 после выполнения этого кода b = 216 c = 7 A = 216
|
|
|
|
|
Oct 17 2008, 12:09
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Xenom0rph @ Oct 17 2008, 15:24)  Вообщем задача такая, у меня есть число типа unsigned int; Мне надо записать его в ячейку eeprom. Ячейка это один байт, значит для хранения типа unsigned int требуется две ячейки. Так вот как мне разбить это число по байту и записать в ячейки, а когда мне потребуется это число я его обратно склеил? Знаю, что как то делается это просто, там страший и младший разряд... и т.д. но вот что то немогу никак вьехать в эти разряды. Не нужно усложнять. eeprom с логической точки зрения ничем не отличается от "обычной" памяти. Поэтому и хранить там данные можно байтами, словами и целыми структурами. А о правильном расположении байтов пусть заботится компилятор. Код unsigned int __eeprom MyArray[10]; unsigned int A, B; ... MyArray[0] = A; // тут компилятор сам разложит переменную A побайтно и вставит инструкции побайтного сохранения в eeprom ... B = MyArray[0]; // тут будет проделана обратная работа. Примечание: в разных компиляторах квалификатор __eeprom может называться по-разному, но смысл тот же - указать компилятору, что память выделяется в зоне eeprom.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Oct 17 2008, 12:54
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(Палыч @ Oct 17 2008, 16:07)  Ошибочка вышла...
A=((unsigned int)c<<8) | b; 2Пылыч Спасибо. А по поводу прямо назначить область eeprom, что то не очень у меня это получаеться, компилятор CVAVR, там есть типо unsigned char eeprom a[10] только вот что то не заносит он туда ничего(( а пишет в data stack.
|
|
|
|
|
Oct 18 2008, 10:25
|
Частый гость
 
Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646

|
Цитата(DiMomite @ Oct 18 2008, 02:52)  В CVAVR надо писать так: eeprom unsigned char a[10]; Вот спасибо, "Век живи, век учись"
|
|
|
|
|
Oct 19 2008, 13:29
|
Местный
  
Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143

|
Цитата(Палыч @ Oct 17 2008, 15:29)  или через union... Ну да. union LOG { unsigned char aa[2], unsigned int dd; }ff; unsigned char bb, сс; unsigned int big; dd.ff = big; bb = ff.aa[0]; cc = ff.aa[1]; Вроде бы так должно быть?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|