реклама на сайте
подробности

 
 
> адреса не выделенной памяти
RLC
сообщение Jan 15 2015, 07:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 19-11-14
Из: СПб
Пользователь №: 83 740



Использую NIOS II econom. При отладке в дебагере замечаю что сохранения данных регистров(r2,r3,ra...) просходит по адресам в памяти которые не выделял. Язык программирования "С".

То есть происходит вход в функцию и выпоняетя команда сохранения адреса возврата(stw ra,24(sp)). А SP равен 0xee4bf4c8. При этом адресное пространство RAM у меня 0x800020-0x80A000. При этом в одной и той же функции иногда сохранение происходит(адреса в котором сохраняется и не сохраняется состояние регистров разное, 0xee4bf4c8 и 0xee4c4888 ) а иногда не происходит. и при выходе из функции регитр ra(возврата из функции) равен 0, что при выполнении ret вызывает перезагрузку процесора.
Вопроса 3:
что за адреса?(предполагаю что кэш процессора)
Почему не всегда происходит сохранение?
Что с этим делать?=)

Сообщение отредактировал RLC - Jan 15 2015, 07:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jan 22 2015, 14:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ПИПЕЦ!!!!!
просото пипец!!!

вы что нибудь про шины адреса знаете?
если у вас шина 2 бита и программа занимает адреса 0, 1, 2, 3

то запись в адрес 4, 5, 6, 7 - это запись в 3 битную шину
4 = 100
5 = 101
6 = 110
7 = 111
, а теперь представьте что это 3 бита выставлдяются на 2 битной шине, что будет, откинеться старший бит и что убдет?
100 = 00
101 = 01
110 = 10
111 = 11
понято что стало?
0 1 2 3

когда у вас что-то за пределами РАМ для ниос, это что-то ограничено разрядностью шины адреса, и запись туда, это запись в младшие адреса.


Нельзя так делать, нельзя писать туда, куда надеетесь программа не дотянется! Для этого есть линкеры, можно выделить область памяти, регион, запретить линкеру туда лезть, и использовать для своих нужд, зная что там точно не будет программы, но только так! никак иначе...

Можно взять большой массив выделить 1000 элементов, и по указателю обращаться в него как в память, и знать что это не загадиться, а так как вы решили эту проблемму - это ПИПЕЦ!!!!


Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 00:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.02216 секунд с 7
ELECTRONIX ©2004-2016