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

 
 
 
Reply to this topicStart new topic
> Nios 2, вывод символа в JTAG UART, не хватает памяти даже для alt_putchar
AVR
сообщение May 8 2016, 12:06
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Есть самый младший Altera Cyclone IV EP4CE6E22C8, в нем сидит Nios 2 и один общий контроллер памяти 16 Килобайт для всего: ПЗУ и ОЗУ. Есть там и JTAG UART, в настройках указано что вывод должен осуществляться в JTAG UART.

И есть простая программа:
Код
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_stdio.h"

int main()
{
    char leds = 0x01;
    int i = 0, n = 0;
    while(true)
    {
        IOWR_ALTERA_AVALON_PIO_DATA(GPIO_BASE, leds);
        for(i = 0; i < (ALT_CPU_CPU_FREQ / 25); i++);
        //alt_putchar('*');
        //alt_putchar('\n');
        //alt_putchar('\r');
        leds++;
        n++;
    }
    return 0;
}


Пока я не раскомментировал alt_putchar (а это самый легковесный вариант для печати символа, вроде) - всё запускается и работает, светодиоды мигают. Но с alt_putchar уже не хватает памяти.

Я попробую урезать кэши и еще что-нибудь, но есть ли возможность как-то низкоуровнево записать в регистр чтобы символ ASCII вывелся в JTAG UART, не задействуя alt_putchar?


--------------------
Go to the top of the page
 
+Quote Post
dim99
сообщение May 9 2016, 05:24
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Стоит посмотреть в настройки проекта - могут быть подключены все подряд драйвера.
Там есть галочка reduced drivers или что-то такое.
Go to the top of the page
 
+Quote Post
_pv
сообщение May 9 2016, 08:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Код
#include "altera_avalon_jtag_uart_regs.h"
#include "system.h"

int UartRead(char * data, int num){
  int n = 0;
  while (n < num){
    unsigned int d = IORD_ALTERA_AVALON_JTAG_UART_DATA(JTAG_UART_BASE);
    if (d & ALTERA_AVALON_JTAG_UART_DATA_RVALID_MSK) data[n++] = d;
    else break;
  }
  return n;
}

int UartWrite(char * data, int num){
  int n = 0;
  while (n < num){
    unsigned int d = IORD_ALTERA_AVALON_JTAG_UART_CONTROL(JTAG_UART_BASE);
    if (d & ALTERA_AVALON_JTAG_UART_CONTROL_WSPACE_MSK) IOWR_ALTERA_AVALON_JTAG_UART_DATA(JTAG_UART_BASE, data[n++]);
    else break;
  }
  return n;
}

Go to the top of the page
 
+Quote Post
AVR
сообщение May 10 2016, 19:46
Сообщение #4


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(_pv @ May 9 2016, 11:19) *
Код
#include "altera_avalon_jtag_uart_regs.h"
#include "system.h"
int UartRead(char * data, int num)
int UartWrite(char * data, int num){

Спасибо! Всё работает, всё поместилось! sm.gif


--------------------
Go to the top of the page
 
+Quote Post
Raven
сообщение May 10 2016, 23:57
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Настройки BSP - в студию, пожалуйста.
"Hellp, World!" с выводом в UART прекрасно помещается в 4-6 kB (если не меньше, указанный объем - это уже с парой процедурок тестирования памяти).
Go to the top of the page
 
+Quote Post
AVR
сообщение May 11 2016, 11:54
Сообщение #6


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Raven @ May 11 2016, 02:57) *
Настройки BSP - в студию, пожалуйста.

В каком файле они содержатся?

Я рано радовался - оказалось что кроме той простейшей функции вывода в JTAG-UART - больше ничего и не помещается, а ведь мне надо еще несколько килобайт кода туда засовывать...


--------------------
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение May 11 2016, 12:23
Сообщение #7


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(AVR @ May 11 2016, 14:54) *
В каком файле они содержатся?

Я рано радовался - оказалось что кроме той простейшей функции вывода в JTAG-UART - больше ничего и не помещается, а ведь мне надо еще несколько килобайт кода туда засовывать...

C++ отключили?
Go to the top of the page
 
+Quote Post
AVR
сообщение May 11 2016, 12:26
Сообщение #8


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(_Anatoliy @ May 11 2016, 15:23) *
C++ отключили?

Надо попробовать, не отключал. Сильно кушает?


--------------------
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение May 11 2016, 12:28
Сообщение #9


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(AVR @ May 11 2016, 15:26) *
Надо попробовать, не отключал. Сильно кушает?

Конечно. Ещё это помогает.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Raven
сообщение May 11 2016, 13:02
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Давайте сверим карты. Вы свой пример делаете на базе готового примера "Hello, World" Small ? Такое впечатление, что нет, поскольку все нужные настройки в нем уже сделаны, и размер для него получается маленький.
Go to the top of the page
 
+Quote Post
AVR
сообщение May 11 2016, 13:29
Сообщение #11


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Raven @ May 11 2016, 16:02) *
Давайте сверим карты. Вы свой пример делаете на базе готового примера "Hello, World" Small ? Такое впечатление, что нет, поскольку все нужные настройки в нем уже сделаны, и размер для него получается маленький.

Не на базе него... Сделаю новый проект на базе этого small.


--------------------
Go to the top of the page
 
+Quote Post
Raven
сообщение May 11 2016, 14:31
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Поисследуйте строение малых сих - будет очень полезно. Они вполне обозримы для новичка в Alter'овской NIOS-экосистеме. Я, например, довольно быстро прикрутил к Hello-Small копи-паст вариант упрощенного uart_printf (на базе alt_printf) - чтобы выводить HEX-ы с удобством. А в варианте MemoryTest-Small почему-то и полноценный printf() работал (хотя, вроде бы, не должен). Попробуйте, может он и в Hello-Small заведется. А нет - так можно помаленьку контролируемо что-то добавлять в проект.
Go to the top of the page
 
+Quote Post
AVR
сообщение May 11 2016, 18:24
Сообщение #13


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(_Anatoliy @ May 11 2016, 15:28) *
Конечно. Ещё это помогает.

Вот это помогло!
Код
Info: (test_led.elf) 2492 Bytes program size (code + initialized data).
Info:                13 KBytes free for stack + heap.


А еще, что меня удивило - BSP было скомпилено по дефлоту в режиме debug без оптимизаций, это не могло не сожрать всю память.


--------------------
Go to the top of the page
 
+Quote Post
Raven
сообщение May 13 2016, 13:39
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



Да вроде бы, Debug-вариант не настолько сильно толстеет. Я, когда экспериментировал с вышеописанным, только в Debug'е все и собирал - и размеры были те, что упоминались.

Чем все закончилось-то?
Go to the top of the page
 
+Quote Post
AVR
сообщение May 14 2016, 20:34
Сообщение #15


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Raven @ May 13 2016, 16:39) *
Чем все закончилось-то?

Всё закончилось успешно, проект с лихвой влезает, я даже использую обычный printf и могу получать текст в среде Eclipse или отдельной программе nios2-terminal - для этого воспользовался BSP Editor для настройки stdout.


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:55
Рейтинг@Mail.ru


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