Проблемы с внутреннем ОЗУ в ATmega 128
Добавлено: Ср окт 08, 2008 16:56:51
Здравствуйте!!! Проблемма такая, пытаюсь записать в ОЗУ константы и считать их после, при чтении, в регистр попадает другое число. Как выяснил, почемуто запись происходит в область ДРРВ - 160 байт, как я понимаю должно записываться в следующие 4 кБ.
Эти 160 байт ОЗУ преднозначено для служебных регистров, в AverStudio я наблюдаю там по разным адресам разные числа, это говорит о том что моя прога использует эту область и при чем очень хорошо, т.к. занято примерно процентов 70.
Что я заметил, сохранение в памяти некоторых моих констант происходит в те ячейки в которых уже есть запись. В результате происходит как бы сложение того что было записано с моей константой, при чтении я конечно же наблюдаю другое число.
Пытался записать по адресу в те 4 кБ ни чего не получается, запись не происходит, состояние ячейки не меняется.
Какие адреса использовал для принудительного определения?
0x1100
0x1101
0x1102
Использовал прямую запись в память и так же чтение.
sts
lds
Для определения компелятором области памяти использовал
.dseg
adr1: byte 1 ;выделяемая ячейка 0x61
adr2: byte 1 ;выделяемая ячейка 0x62
adr3: byte 1 ;выделяемая ячейка 0x63 ячейка уже была занята
adr4: byte 1 ;выделяемая ячейка 0x64
Эти 160 байт ОЗУ преднозначено для служебных регистров, в AverStudio я наблюдаю там по разным адресам разные числа, это говорит о том что моя прога использует эту область и при чем очень хорошо, т.к. занято примерно процентов 70.
Что я заметил, сохранение в памяти некоторых моих констант происходит в те ячейки в которых уже есть запись. В результате происходит как бы сложение того что было записано с моей константой, при чтении я конечно же наблюдаю другое число.
Пытался записать по адресу в те 4 кБ ни чего не получается, запись не происходит, состояние ячейки не меняется.
Какие адреса использовал для принудительного определения?
0x1100
0x1101
0x1102
Использовал прямую запись в память и так же чтение.
sts
lds
Для определения компелятором области памяти использовал
.dseg
adr1: byte 1 ;выделяемая ячейка 0x61
adr2: byte 1 ;выделяемая ячейка 0x62
adr3: byte 1 ;выделяемая ячейка 0x63 ячейка уже была занята
adr4: byte 1 ;выделяемая ячейка 0x64