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

 
 
> адреса не выделенной памяти
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 20 2015, 08:47
Сообщение #2


Гуру
******

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



MMU - MPU на вас нету.
сохраняются данные туда же куда и при
int[10] Data;
Data[11] = 10;

то есть в память с адресом &Data[0] + 11*4, а что там лежит одному вам известно. Так можно спокойно загадить данные, другие переменные, даже если очень постараться можно код программы завалить.

Дальше больше если выбрать ячейку вне пределов вашей памяти, она свернеться и попадет куда-то в адрес который у вас есть.

Вообще это базовые понятия программирования, винды тут нет которая напишет приложение выполнила недопустимую ошибку и будет закрыто, или как она там писала?


Локальные массивы выделяются на стеке, стек кончиться начнут гадить оперативку. Глобальные массивы выделены сразу в оперативке, менять их размеры на лету не выйдет. Массивы динамические создаются на куче, со всеми делами по организации, дефрагментации и прочей байде с кучей. Потому вместо одноразового массива выделяемого на стеке придумать одноразовый массив в куче - это мучение кучи, созданием и удалением массивов, ее фрагментации и так далее...





хорошим тоном в вашем случае является проверка data на допустимые значения

а вторым хорошим тоном является создавать массив всегда одной величины с запасиком, и проверкой влезет ли дата в него или нет. А то так далеко можно уйти, в непредсказуемые дали...
Go to the top of the page
 
+Quote Post



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

 


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


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