Перейти к содержанию
    

NIOSII IDE - ошибки компиляции

Опишу ситуацию и свою последовательность действий.

Необходим проект на NIOS II, включающий работу с PIO и внешним UART. Все это собирается на циклоне2 на стартер ките "Alter Cyclone II FPGA Starter Board".

Для начала решил просто помигать светодиодами.

1. Создаю проект в квартус 9.0, указываю конкретную модель второго циклона (неоднократно создавал проекты под этот девайс и прошивал, все всегда было отлично).

2. Вызываю SOPC билдер и добавляю:

- on-chip память 8192 bytes

- cpu NIOS II / e, назначив ему созданную память во всех опциях.

- PIO 8bit - output

- sysid

post-53297-1265028562_thumb.png

 

3. Вызываю функцию System - Auto-Assign Base Addresses

4. Генерирую ядро (долго)

5. Создаю схемный файл и прикрепляю выводы к процессору. А затем ассоциирую с реальными пинами ИС (компилируя проект между шагами).

 

post-53297-1265028921_thumb.png

 

6. Сохраняю все и запускаю NIOS II IDE (От админа, об этом еще будет)

Создаю проект, темплейт Blanck.

7. Создаю сурс файл и пишу код:

 

#include "alt_types.h"
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include <stdio.h>
#include <unistd.h>
static int count;
int main(void)
{
count = 0;
while( 1 )
{
usleep(500000);
IOWR_ALTERA_AVALON_PIO_DATA( PIO_BASE, count );
count++; /* Continue 0-ff counting loop. */
}
return 0;
}

 

8. Выставляю настройки оптимизации в свойствах проекта [syslib]

post-53297-1265029209_thumb.png

 

9. Правый клик на мой проект (не syslib - билд).

 

10. Куча строчек бегут в консоли - и ОП самое интересное:

 

Creating libnios_proj_test3_syslib.a...
Creating generated.sh...
      3 [main] ? (4968) d:\altera\90\quartus\bin\cygwin\bin\sh.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x680000, top 0x690000, reserve_size 61440, allocsize 65536, page_const 4096
      2 [main] sh 1044 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
/cygdrive/d/altera/90/nios2eds/bin/gtf-generate: fork: Resource temporarily unavailable
make[1]: *** [system_description/../obj/generated.sh-t] Error 128
make: *** [system_project] Error 2
Build completed in 20.538 seconds

 

Что интересно ошибки вылазят различные. Все с sh.exe или main.exe.

В процессе выполнения еще такие вылазят:

Compiling alt_remap_cached.c...
      4 [main] ? (5776) d:\altera\90\nios2eds\bin\nios2-gnutools\H-i686-pc-cygwin\bin\nios2-elf-gcc.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x6C0000, top 0x6E0000, reserve_size 126976, allocsize 131072, page_const 4096
      2 [main] nios2-elf-gcc 5616 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11
Compiling alt_remap_uncached.c...

 

Доп информация: ОС Windows 7, Quartus 9. Установлено все в D:\Altera\90\

 

Что я пробывал:

1. Переставил все связанное с квартусом и НИОС на несистемный диск.

2. Пробовал Web версию квартуса и крякнутую 9.0

3. Отрубил UAC полностью

4. Назначил все приложения указанные в ошибках запускаться от админа

 

Вопрос: Что делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4. Назначил все приложения указанные в ошибках запускаться от админа

 

Добавьте еще к этому "совместимость с XP", это частично поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос: Что делать?

1. Вышедшие на сегодняшний день версии альтеровского софта не поддерживают Windows 7 (ее поддержка обещена в v10, которая выйдет во втором - третьем квартале). Попробуйте установить режим совместимости с WinXP, как советовал ув. torik, а лучше пока перейдите на XP или Vista.

2. У Вас в SOPC Builder'e задано всего 2 килобайта ОЗУ. Этого действительно может и нехватить для размещения стека, кучи и пр. (при указаных установках библиотеки проекта). Попробуйте увеличить объем ОЗУ, или используйте альтернативную точку входа, примерно так :

 

int main (void) __attribute__ ((weak, alias ("alt_main")));
//***** Use alt_main as entry point for this free-standing application *****
int alt_main (void)
{ бла-бла-бла
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем за ответы!

Нашел решение своей проблемы, хоть и кривое. При первом билде (когда полностью билдится syslib) всегда вылазят ошибки, причем сааамые разные. После этого повторный билд проходит в основном без ошибок (то есть то нету ошибок - чудеса). Ну жаловаться не на что, совместимость не заявлено - потому работаем как можем. Радует факт, что это похоже все таки из-за ОС, а значит Win7 XP mode все гарантированно исправит, проверю позже.

 

А сейчас пользуясь вашим вниманием, задам несколько вопросов.

 

1. Собрал систему с UART приемопередатчиком. Запись в stdout происходит отлично посредством функции printf, но чтение никак не пойму.Везде в доках altera говорят о полной совместимости по потокам с ANSI C.

4.9.6.4 The scanf function

Synopsis

#include <stdio.h>

int scanf(const char *format, ...);

 

Что же на деле? Не знает такой функции, как и fopen, fclose, ... Как читать из порта? Подскажите пожалуйста :)

 

2. Вопрос про время компиляции. Как его сократить? что делаю я: правлю код, компилирую проект (бегающий огонек около минуты), компилирую проект quartus (минута), прошваю.

Это нормально? Совсем не привык к таким задержкам, программирую много и давно, но такого не видел :/

 

3. Где вообще почитать про программирование в этой IDE с этими библиотеками и компилятором. Т.к. множество привычных функций нет, а куча всяких неизвестных мне IOWR_ALTERA_AVALON_PIO_DATA присутствует. Находил много кода по форумам, функции из них компилятор не признает. Буду благодарен за куски полезного кода и примеры.

 

Спасибо :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Собрал систему с UART приемопередатчиком. ... Как читать из порта? Подскажите пожалуйста...

Стандартных функций не применял, а создал для UART небольшой монитор, в который захожу каждые 2 мс.

В приложении один из файлов проекта, my_rs232.h, отвечающий за UART. Как читать из порта - там показано. Все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Собрал систему с UART приемопередатчиком. Запись в stdout происходит отлично посредством функции printf, но чтение никак не пойму.Везде в доках altera говорят о полной совместимости по потокам с ANSI C.

Что же на деле? Не знает такой функции, как и fopen, fclose, ... Как читать из порта? Подскажите пожалуйста :)

А документацию на UART почитать не пробовали?

/* A simple program that recognizes the characters 't' and 'v' */
#include <stdio.h>
#include <string.h>
int main ()
{
   char* msg = "Detected the character 't'.\n";
   FILE* fp;
   char prompt = 0;
   fp = fopen ("/dev/uart1", "r+"); //Open file for reading and writing
   if (fp)
     {
        while (prompt != 'v')
          { // Loop until we receive a 'v'.
             prompt = getc(fp); // Get a character from the UART.
             if (prompt == 't')
                { // Print a message if character is 't'.
                   fwrite (msg, strlen (msg), 1, fp);
                }
          }
        fprintf(fp, "Closing the UART file.\n");
        fclose (fp);
     }
   return 0;
}

 

2. Вопрос про время компиляции. Как его сократить? что делаю я: правлю код, компилирую проект (бегающий огонек около минуты), компилирую проект quartus (минута), прошваю.

Это нормально? Совсем не привык к таким задержкам, программирую много и давно, но такого не видел :/

Во-первых, переходите на версию 9.1 - там компиляция в NiosII EDS происходит существенно быстрее.

Во-вторых - после того, как Вы получили исполняемый код, не обязательно перекомпилировать проект в квартусе. Можно заливать код прямо из-под NiosII EDS (Run As). Для этого ваш cpu должен иметь JTAG Debug модуль.

 

3. Где вообще почитать про программирование в этой IDE с этими библиотеками и компилятором. Т.к. множество привычных функций нет, а куча всяких неизвестных мне IOWR_ALTERA_AVALON_PIO_DATA присутствует. Находил много кода по форумам, функции из них компилятор не признает. Буду благодарен за куски полезного кода и примеры.

На исторической родине

Особо смотрите Nios II Software Developer's Handbook , раздел Developing Programs Using the Hardware Abstraction Layer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а попробуйте брандмауэр винды 7 отключить и посмотрите, что там с компиляцией будет.

джитаг сервер тоже в ней глючит, приходилось в ручную его запускать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...