Цитата
unsigned char t1, t2, t3, t4;
unsigned long int F, Freq = 103500;
t1= (Freq);
t2= (Freq>>8);
t3= (Freq>>16);
t4= (Freq>>24);
F = (t4<<24)|(t3<<16)|(t2<<8)|t1;
t1 = sizeof(F);
printf("\n%li",F);
unsigned long int F, Freq = 103500;
t1= (Freq);
t2= (Freq>>8);
t3= (Freq>>16);
t4= (Freq>>24);
F = (t4<<24)|(t3<<16)|(t2<<8)|t1;
t1 = sizeof(F);
printf("\n%li",F);
С успехом работает на компьютерном компиляторе С-Free(он 32-х разрядный), но нихрена не работает в AvrStudio, выдавая ошибку в строке F = (t4<<24)|(t3<<16)|(t2<<8)|t1;: ../main.c:84: warning: left shift count >= width of type. Подозреваю что это из - за разрядности.
Второй вариант - воспользоваться стандартными средствами:
Цитата
void eeprom_write_dword ( uint32_t *addr , uint32_t value )
Но я не пойму что такое uint32_t *addr. По идее это должен быть адрес флэш, куда я пишу эти 4 байта. Тогда почему он 4-разрядный?
Третий вариант - найти в памяти адрес это переменной и побайтово записать во флэш. Но я не знаю как это сделать. Помогите советом.
Сделал так:
Цитата
char K;
K = eeprom_read_byte ((uint8_t*) 0xff0);
eeprom_write_dword ((uint32_t*)&K,Freq);
K=K+4;
eeprom_write_byte ((uint8_t*)0xff0,K);
K = eeprom_read_byte ((uint8_t*) 0xff0);
eeprom_write_dword ((uint32_t*)&K,Freq);
K=K+4;
eeprom_write_byte ((uint8_t*)0xff0,K);
Пока не работает. Разбираюсь.