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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Nios II и размещение переменных, в нужной onchip mem
torik
сообщение Mar 28 2011, 11:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Есть система, которая включает Nios и некоторые самодельные компоненты.
Она на рисунке показана. Зелененьким обведена onchip память, которая указана процессору как exception memory,
а синеньким обведен самодельный компонент, основой которого является также onchip память, двухпортовая. К этой области памяти проц обращается через IOWR/IORD.

Нельзя ли создать переменную, которая была бы размещена уже в этой области памяти (некая структура)? Как это сделать, какие-нибудь директивы вроде pragma нужны?

Ой, забыл картинку sm.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 11:43
Сообщение #2


Гуру
******

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



ну так создать структуру, объявить указатель на нее, а потом указателю присвоить адрес компонента - не пойдет?
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 11:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Мне надо чтобы структура уже располагалась в памяти по адресу 0х042000. Тогда самодельный компонент будет забирать оттуда данные.
А указатель не поможет в этом, ведь данные будут располагаться там где скажет компилятор...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 11:56
Сообщение #4


Гуру
******

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



тогда через атрибуты, например:
Код
int some_variable __attribute__ ((section (".onchip_memory_0.rwdata"))) = 0;
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 12:05
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Да, уже ближе.
Но компонент свой самодельный надо бы, наверное, сделать с галочкой Memory Device...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 12:07
Сообщение #6


Гуру
******

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



Цитата(torik @ Mar 28 2011, 19:05) *
Но компонент свой самодельный надо бы, наверное, сделать с галочкой Memory Device...

да. другой вариант - использовать готовый он-чип, он умеет 2-портовый доступ. а из компонента вытянуть авалон-мм
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 12:14
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Пишем:

Код
unsigned int temp1 __attribute__ ((section (".onchip_memory2_0.rwdata"))) = 0;


Результат:
Код
Description    Resource    Path    Location    Type
error: no memory region specified for loadable section `.onchip_memory2_0.rwdata'    MI_2        line 0    C/C++ Problem




Цитата
да. другой вариант - использовать готовый он-чип, он умеет 2-портовый доступ. а из компонента вытянуть авалон-мм


Суть в том, что в компоненте как раз и есть готовый он-чип с двухпортовым доступом. Один порт отдаю ниосу, дабы он писал данные в он-чип, а из второго компонент забирает эти данные.
Т.е. если указать эклипсу, что переменная temp1 должна лежать по адресу компонента, то я смогу обращаться к ней как:
Код
temp1 = 111;

а не
Код
IOWR(....);


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 12:21
Сообщение #8


Гуру
******

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



Цитата(torik @ Mar 28 2011, 19:14) *
Т.е. если указать эклипсу, что переменная temp1 должна лежать по адресу компонента, то я смогу обращаться к ней как:
Код
temp1 = 111;

а не
Код
IOWR(....);

ну, так а кто мешает сделать так:
Код
int* temp1_ptr;
temp1_ptr = onchip_memory2_0_base;
temp1_ptr |=0x80000000;
*temp1_ptr=111;


по поводу ошибки - надо настройки линкера посмотреть
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 12:49
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



А это зачем?
Цитата
temp1_ptr |=0x80000000;



С обычной переменной вроде работает. Теперь делаю указатель на структуру, котрая содержит 512 байт - пока что-то не пашет...

Пля, как указатель на элемент структуры-то обратиться?
Код
*chibis->can_mi_ps.ps4.ps.VAL_IK = VALID;


дает ошибку:
Код
FCRX_CH1C/fcrx_ch1c.c:172: error: request for member 'ps4' in something not a structure or union



--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Mar 28 2011, 12:54
Сообщение #10


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(torik @ Mar 28 2011, 16:49) *
А это зачем?

Отделить мух от котлет.
В смысле, Memory от IO.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 13:07
Сообщение #11


Гуру
******

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



Цитата(torik @ Mar 28 2011, 19:49) *
С обычной переменной вроде работает. Теперь делаю указатель на структуру, котрая содержит 512 байт - пока что-то не пашет...

смотрите в сторону alt_remap_uncached, там размер можно указать

Цитата
Пля, как указатель на элемент структуры-то обратиться?
Код
*chibis->can_mi_ps.ps4.ps.VAL_IK = VALID;


дает ошибку:
Код
FCRX_CH1C/fcrx_ch1c.c:172: error: request for member 'ps4' in something not a structure or union


я так понимаю, либо "chibis->", либо "(*chibis)."
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 13:17
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Вот так вот работает:
Код
chibis->can_mi_ps->ps4.ps.VAL_IK = VALID;


Однако, почему-то некорректно. Структура содержит:

Код
typedef union CAN_MI_PS1
{
    struct {
        unsigned char    zoom_ik;
        unsigned char    zoom_tv;
        unsigned short    distance;
//        unsigned char    num_ch;
//        unsigned char    subsampling;
        unsigned int    r1;
    }    ps;
    struct {
        unsigned    char    d[8];
    }    b;
} CAN_MI_PS1;


При записи в zoom_ik, пишется сразу 4 одинаковых байта. Во как. Наверное, надо поколдовать с типами данных, не?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 13:25
Сообщение #13


Гуру
******

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



Цитата(torik @ Mar 28 2011, 20:17) *
Наверное, надо поколдовать с типами данных, не?

возможно, это связано с выравниваем полей в структуре. надо еще в атрибутах покопаться
Go to the top of the page
 
+Quote Post
torik
сообщение Mar 28 2011, 13:29
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



где бы почитать чё-нибудь про эти атрибуты?

Запись char:
Код
    chibis->tmp1 = (FCTX_CH1C2_0_BASE) | 0x80000000;
    chibis->tmp1->ps1.ps.zoom_ik = 0x05;


дает результат (сигналтабом смотрю) 0х05050505;


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 28 2011, 13:32
Сообщение #15


Гуру
******

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



Цитата(torik @ Mar 28 2011, 20:29) *
дает результат (сигналтабом смотрю) 0х05050505;

а может, это и правильно. что там с byteenable?
смотреть любые маны по gnu-тым тулзам. например, nios2eds/documents/index.htm
Go to the top of the page
 
+Quote Post

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

 


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


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