|
Nios II и размещение переменных, в нужной onchip mem |
|
|
|
Mar 28 2011, 11:12
|

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

|
Есть система, которая включает Nios и некоторые самодельные компоненты. Она на рисунке показана. Зелененьким обведена onchip память, которая указана процессору как exception memory, а синеньким обведен самодельный компонент, основой которого является также onchip память, двухпортовая. К этой области памяти проц обращается через IOWR/IORD. Нельзя ли создать переменную, которая была бы размещена уже в этой области памяти (некая структура)? Как это сделать, какие-нибудь директивы вроде pragma нужны? Ой, забыл картинку
Эскизы прикрепленных изображений
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Mar 28 2011, 12:14
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 28 2011, 12:21
|

Гуру
     
Группа: Свой
Сообщений: 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; по поводу ошибки - надо настройки линкера посмотреть
|
|
|
|
|
Mar 28 2011, 12:49
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 28 2011, 13:07
|

Гуру
     
Группа: Свой
Сообщений: 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)."
|
|
|
|
|
Mar 28 2011, 13:17
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 28 2011, 13:29
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|