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

 
 
> 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
Ответов
vadimuzzz
сообщение Oct 18 2010, 06:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


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

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



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


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

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



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



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

 


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


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