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

 
 
> malloc после сброса памяти не дает, вообще ступор!
alexPec
сообщение Oct 16 2010, 19:35
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Всем доброго дня. Всречался ли кто с таким: загружаю ниос проц через debug as hardware или run as hardware - все работает. Нажимаю ресет (ресет процессора) - простая тестовая программа выполняется сначала, в jtаg uart шлет результаты, а на экране нет ничего. Начал разбираться - вот такая простая строчка

display = (alt_video_display*) malloc (sizeof(alt_video_display));

возвращает 0. Это первое динамическое выделение памяти в программе. sizeof(alt_video_display) при этом равно 0x38.

Программа на базе hello world small.

Heap располагается во внешней памяти, остальное - в он-чип рам. Думал память внешняя как-то после сброса отваливается - нет, до этой строчки тест памяти проходит нормально, о чем репортирует в jtag uart.

Ступор! Даже не знаю что подумать...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
fars
сообщение Oct 17 2010, 10:07
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 3-04-08
Из: Киев, Украина
Пользователь №: 36 452



ну значит памяти мало. Я Альтеру не знаю, но по аналогии с Микроблейзом:

1) проверь девствительно НИОС работает с внешней РАМой, попросту записав прочитав что нибудь из памяти и отправивши результаты в уарт.

2)можно попробывать выделить РАМ на ПЛИСЕ без внешней и посмотреть ли работает с ней
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 17 2010, 10:22
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(alexPec @ Oct 16 2010, 22:35) *
Всем доброго дня. Всречался ли кто с таким: загружаю ниос проц через debug as hardware или run as hardware - все работает. Нажимаю ресет (ресет процессора) - простая тестовая программа выполняется сначала, в jtаg uart шлет результаты, а на экране нет ничего. Начал разбираться - вот такая простая строчка

display = (alt_video_display*) malloc (sizeof(alt_video_display));

возвращает 0. Это первое динамическое выделение памяти в программе. sizeof(alt_video_display) при этом равно 0x38.

Программа на базе hello world small.

Heap располагается во внешней памяти, остальное - в он-чип рам. Думал память внешняя как-то после сброса отваливается - нет, до этой строчки тест памяти проходит нормально, о чем репортирует в jtag uart.

Ступор! Даже не знаю что подумать...

В окне Гипертерминала видели надпись "hello world", когда производили первый запуск процессора?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 18 2010, 05:50
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(fars @ Oct 17 2010, 14:07) *
ну значит памяти мало. Я Альтеру не знаю, но по аналогии с Микроблейзом:

1) проверь девствительно НИОС работает с внешней РАМой, попросту записав прочитав что нибудь из памяти и отправивши результаты в уарт.

2)можно попробывать выделить РАМ на ПЛИСЕ без внешней и посмотреть ли работает с ней


А как мало-то? До сброса значит хватает, а после сброса мало? Да и не может ее мало быть - там 500 кбайт, а мне всего надо 156 кбайт, а он даже 0x38 байт не дает (повторюсь, это ПЕРВОЕ выделение памяти размером 0x38 байт).

Память точно работает, прямо перед этим тест провожу - пишу и читаю, все ОК. На плисе столько памяти нет сколько через хип выделяется из внешней.


Цитата
В окне Гипертерминала видели надпись "hello world", когда производили первый запуск процессора?


И когда первый запуск, и после ресета - сначала надпись в окне терминала Hello wworld small, затем - Test RAM ok - это о том что с внешней памятью все в порядке.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 18 2010, 06:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



что-то вы еще не рассказали. вот пример, проверил: выделение памяти работает после сброса нормально.
Код
#include "sys/alt_stdio.h"
#include <stdlib.h>
#include "alt_types.h"
#include "io.h"

int main()
{  
    alt_putstr("Hello from Nios II!\n");
    alt_u32 *sram_ptr = malloc(256);
    if (!sram_ptr)
        alt_putstr("Couldn't allocate memory!\n");
    else
    {
        alt_putstr("Memory allocated successfully!\n");
        alt_printf("sram_ptr is 0x%x\n",sram_ptr);
        alt_printf("writing in sram 0x11223344\n");
        IOWR(sram_ptr,0,0x11223344);
        alt_printf("sram content is 0x%x\n",IORD(sram_ptr,0));
    }    
    if (sram_ptr)
        free(sram_ptr);
    /* Event loop never exits. */
    while (1);
    return 0;
}

проверял на стартер-ките. если надо, могу выложить проект целиком.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 18 2010, 07:44
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Тогда еще раз, ОООчень внимательно посмотрю, тайм-аут. "Чапай думать будет" (С)
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 27 2010, 08:53
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Посмотрел, у меня был тест памяти до выделения, видимо что-то портилось там. Убрал тест. Щас память выделяет после сброса, но каждый раз новую, т.е. думает что старая выделенная память (до сброса!) нужна. В итоге после 3-х сбросов память кончается и он все равно ее не дает. Как это ему объяснить что после сброса надо забыть про все выделенные массивы heap'а??? Повторюсь, во внешней памяти располагается только heap, все остальное - в onchip. Подскажите люди добрые!
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 28 2010, 02:33
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



что-то у вас в железе неправильно. я так думаю как раз с сигналом ресета. в аттаче проект на котором работает код, приведенный выше. описанного вами эффекта не наблюдаю: после сброса адрес всегда одинаковый.
Прикрепленные файлы
Прикрепленный файл  nios_starter.7z ( 1.28 мегабайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 29 2010, 17:02
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Плюнул на это. Залил в EPCS прошивку и программу. Все запускается. Сбрасывай хоть мильён раз - проц работает (именно сброс ниоса, а не переконфигурация). В чем дело - непонятно 07.gif
Go to the top of the page
 
+Quote Post

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

 


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


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