ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
4 июля
104536 Топик полностью
Pruvet (08.11.2007 14:09, просмотров: 71) ответил Al Volovich на Читаем даташит. На 2561 правда под рукой нет, но во всех, что просмотрел - одинаково: рекомендуют запретить прерывания.
Всем спасибо за помощь. Даташит прочитал. Но не в этом дело, декомпиляция показала, что IAR все соблюдает. Кусок памяти где расположена error_cnt портился при выполнении другого кода, который как я думаю некорректно воспринимался компилятором. Было пример: __no_init __eeprom unsigned int error_count; __no_init __eeprom unsigned long long saveerr[10]; void error_set(char error) { unsigned long long __eeprom *err = saveerr + 5; ... *err = (1ull<<error);//Значение сохранялось по 0 адресу вместо err } Заработало пример: //Записывает в EEPROM процессора n байт void __eeprom *ememcpy(void __eeprom *d,const void *s,size_t n){ void __eeprom *result=d; while (n--) { *(char __eeprom *)d=*(char*)s;d=(char __eeprom *)d+1;s=(char*)s+1; } return result; } __no_init __eeprom unsigned int error_count; __no_init __eeprom unsigned long long saveerr[10]; void error_set(char error) { unsigned long long __eeprom *err = saveerr + 5; ... unsigned long long error_state=(1ull<<error); ememcpy(err,&error_state,8);//Корректно сохраняется }