Мне интересно, как ATTiny, в частности ATTiny24, хранит в памяти 32-битные целые числа без знака. Я пытаюсь взять 32-битное значение и записать его в 32-битное место в EEPROM. Я попытался использовать простую маску, но каждый раз, когда я пытаюсь, я получаю два нижних байта (lsb) правильно, а два верхних байта - все нули. Например, когда я пытаюсь написать: 0x12345678, вывод будет: 0x00005678. Есть ли параметр в Atmel Studio, который мне нужно установить, или мне нужно использовать другой метод, кроме маскирования.
В конечном итоге я хочу иметь возможность читать значение 32-битного счетчика и записывать его в определенное место в EEPROM. Я работаю над изменением существующей схемы и, таким образом, не могу позволить себе отладку с последовательным выводом.
Фрагменты кода:
В основном:
unsigned long test_val = 305419896; //0x12345678
EEprom_Long_Write(0x25,test_val);
Функции:
EEprom_Long_Write:
void EEprom_Long_Write(unsigned char eeadr, unsigned long EE_Data)
{
unsigned char temp=0;
unsigned char count= eeadr + 3;
unsigned long mask=0;
unsigned char position=24;
while (eeadr <= count)
{
mask = ((1<<8)-1) << position;
temp = (EE_Data & mask) >> position;
EEPROM_write(eeadr, temp);
position = position-8;
eeadr++;
}
}
EEPROM_write:
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
while(EECR & (1<<EEPE)); //Wait for completion of previous write
EECR =(0<<EEPM1) | (0>>EEPM0); // Set Programming mode
EEARL = ucAddress; // Setup address and data registers
EEDR = ucData; // Load Data Register
EECR |= (1<<EEMPE); // Write logical one to EEMPE
EECR |= (1<<EEPE); // Start eeprom write be setting EEPE
}
stdint.h
типы, а не встроенные имена, чтобы иметь типы с определенной шириной. - person too honest for this site   schedule 14.07.2015