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

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


Участник
*

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



1)
Код
writeBytes(alt_u8 array[], alt_u32 address,alt_u8 id, alt_u32 data){
    alt_u8
              tempArray[data],//тот самый статически выделенный массив(сейчас создаётся в tempArray). иногда data это размер в последствии пришедших данных а иногда это просто любое число(вот тогда и возникали непонятные адреса)
              
         ...
     switch(id){
        case(...):
        break;
        case(...):
        break;
        case(0x35):
            writeBlockData(array,data)//тут теперь процедура в которой создаётся массив c длинной дата
         break;
      }

}


2)
Код
     ....
      alt_u8 *memory=0;
      memory=address;
     for(index=0;index<(data+2);index++){
         *(memory+index)=IORD_DIRECT(....);
         ...
}


если честно то сейчас уже интересно только куда сохранялись данные по адресам которые я не выделял. В какое физическое место. т.к ситуация решена.

ну а с созданием массива я тупил, согласен. Ссылка на вершину масива теряется поле входа из функции. Где тут вымучивание кучи? Глобальные массивы не люблю. вообще глобальные не люблю. хотя тут наверное оптимально было бы. Но опять же я только минимальный массив создать смогу, а при приходе точного необходимого размера мне придётся вызывать каждый раз malloc. Либо создавать сразу гиганский массив на всю доступную мне память.
Причина редактирования: слеш не в ту сторону стоял (с) модератор
Go to the top of the page
 
+Quote Post



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

 


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


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