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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Microblaze + ethernetlite через lwIP, помогите разобраться
zherdiy
сообщение Dec 1 2008, 14:52
Сообщение #1


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Товарищи, собрал проектик с XPS_ethernetlite, включил lwip, скачал пример xapp1026 и запутался.
Мне нужен простой метод передачи (пока только передачи) данных по сети без всяких наворотов и не обязательно на всей скорости. По примеру я окончательно запутался - там для моего случая Raw/s3an около 20ти сишных файлов, в которых, я так понял, варианты работы на все случаи жизни. Мне это все не нужно и я не могу перейти от сложного к простому, то есть попросту разгрести весь этот код. К тому же я не совсем понимаю по каким принципам работает ethernet: зачем ему "обязательно" контроллер прерываний? Для чего используется счетчик?

Из ПДФины по xapp1026 следует:

Creating an lwIP application using the RAW API
The lwIP RAW mode API is more complicated to use as it requires knowledge of lwIP internals.
The typical structure of a RAW mode program is as follows.

1. The first step is to initialize all lwIP structures using lwip_init.
! до команды нужно что-то задавать или нет? В примерах до lwip_init() задаются все IP-адреса. Какая вообще задача у этого lwip_init()?
2. Once lwIP has been initialized, an EMAC can be added using the xemac_add helper
function.
! в примере по этому поводу две строки (если упростить): xemac_add(netif, &ipaddr, &netmask, &gw, mac_ethernet_address, EMAC_BASEADDR)
netif_set_default(netif);
! больше к этому ничего не требуется?
3. Because the Xilinx lwIP adapters are interrupt based, enable interrupts in the processor
and in the interrupt controller.
! как я писал выше, мне не понятно в чем заключается смысл использования прерываний
4. Set up a timer should to interrupt at a constant interval. Usually, the interval is around 250
ms. Update the tcp timers at every timer interrupt.
! тоже что и по п.3. Зачем нам таймер?
5. Once the application is initialized, the main program enters an infinite loop performing
packet receive operation, and any other application specific operation it needs to do.
! если я правильно понимаю, то в главной программе void main()
мне нужно однократно проинициализировать какой-то application, чтобы в затем им пользоваться в цикле? Может для моего случая подойдут подпрограммы int start_application() и int transfer_data() из файла utxperf.c xapp1026? Я правда не понял где формируется отправляемый пакет данных.
6. The packet receive operation (xemacif_input), processes packets received by the
interrupt handler, and passes them onto lwIP, which then calls the appropriate callback
handlers for each received packet.
! в примере нашел xemacif_input(netif); но не понял как это работает. И вообще, почему они говорят только про операцию приема? Мне-то передавать нужно.

Помогиииите разобраться!
Прикрепленные файлы
Прикрепленный файл  xapp1026_raw_app_.rar ( 25.42 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 4 2008, 07:02
Сообщение #2


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Вдогонку.
Посмотрел пример с потоками: socket-тип. Вроде он проще для понимания, но я не понял одного - с какого бодуна компилятор требует обработчика прерываний (на этапе создания библиотек), если потоки не используют прерывания?
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 4 2008, 08:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(zherdiy @ Dec 4 2008, 05:02) *
Вдогонку.
Посмотрел пример с потоками: socket-тип. Вроде он проще для понимания, но я не понял одного - с какого бодуна компилятор требует обработчика прерываний (на этапе создания библиотек), если потоки не используют прерывания?

работая по сокетам, lwip требует для себя ОС (xilkernel ).
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 5 2008, 07:55
Сообщение #4


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Цитата(Костян @ Dec 4 2008, 10:05) *
работая по сокетам, lwip требует для себя ОС (xilkernel ).


А подробнее об этом ядре можно? Я прочитал, что оно добавляет какие-то сервисы, но какие именно в случае с Ethernet не понятно.

По поводу необходимости прерываний вычитал следующее:
Creating an lwIP Application Using the Socket API
...
4. The xemacif_input_thread is then started by the network thread. This thread is
required for lwIP operation when using the Xilinx adapters. This thread takes care of
moving data received from the interrupt handlers to the tcpip_thread that is used by
lwIP for TCP/IP processing.
- Я понял, что прерывания использует поток xemacif_input_thread для получения данных из сети. Но ни описания работы этого потока, ни обработчика прерываний для него я в своем проекте не нашел. Единственное упоминание есть в библиотеке xadapter.h в виде строки: void xemacif_input_thread(struct netif *netif). Но это ведь только объявление потока без внутреннего содержания!

В общем, накатал, следуя примеру с SOCKETом, программу (см. прикреп. ниже), которая с частотой в 1mc передает в сеть данные пачками по 1024 значения от 0 до 1023. Но я не понял что делают некоторые функции (см. комент. типа "непонятная функция" и со знаком "?") и хотелось чтобы мне их кто-то прокоментировал. А еще я не понял куда вставляется IP-адрес получателя пакета.
Прикрепленные файлы
Прикрепленный файл  code.rar ( 1.91 килобайт ) Кол-во скачиваний: 62
 
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 5 2008, 08:15
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(zherdiy @ Dec 5 2008, 05:55) *
А подробнее об этом ядре можно? Я прочитал, что оно добавляет
В общем, накатал, следуя примеру с SOCKETом, программу (см. прикреп. ниже), которая с частотой в 1mc передает в сеть данные пачками по 1024 значения от 0 до 1023. Но я не понял что делают некоторые функции (см. комент. типа "непонятная функция" и со знаком "?") и хотелось чтобы мне их кто-то прокоментировал. А еще я не понял куда вставляется IP-адрес получателя пакета.

Ну говорю же Вам
xilkernel_main(); - передает управление ОС Xilkernel.

в которой есть один поток - main_thread()

в нем создается другой поток sys_thread_new(network_thread, NULL, DEFAULT_THREAD_PRIO);

и т.д ..


Код
size = sizeof(remote); // непонятная функция

что значит не понятная ? 07.gif 07.gif

Код
/* прослушка входящих подключений (в моем случае наверное не нужна)*/
   //lwip_listen(sock, 5);

Это вы так думаете.

Код
new_sd = lwip_accept(sock, (struct sockaddr *)&remote, &size); // непонятная функция

Почитайте что такое сокет и с чем его есть.


ключивой алгоритм
1. socket()
2. blind()
3. listen()
4. accept()
5. recv()
6. send()
........
7.close()
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 5 2008, 09:41
Сообщение #6


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



size = sizeof(remote); - ну, не понимаю я что делает эта конструкция, я по основной специальности не програмист.
lwip_listen(sock, 5); - а зачем мне слушать входящие подключения, если мне принимать ничего не нужно? Может я это дело не так понимаю? Объясните плыз.

"Почитайте что такое сокет и с чем его есть."
- Дык я не нашел где про него подробно почитать. В ПДФине для xapp1026 только общие данные и функции :
1. socket()
2. blind()
3. listen()
4. accept()
5. recv()
6. send()
7.close()
- там не описаны. Мне бы на пальцах кто показал. Может у вас по Сокету что-то подробное есть?
Go to the top of the page
 
+Quote Post
Serg`
сообщение Dec 5 2008, 20:37
Сообщение #7


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

Группа: Участник
Сообщений: 111
Регистрация: 25-06-07
Пользователь №: 28 668



Цитата(zherdiy @ Dec 5 2008, 13:41) *
size = sizeof(remote); - ну, не понимаю я что делает эта конструкция, я по основной специальности не програмист.
lwip_listen(sock, 5); - а зачем мне слушать входящие подключения, если мне принимать ничего не нужно? Может я это дело не так понимаю? Объясните плыз.

"Почитайте что такое сокет и с чем его есть."
- Дык я не нашел где про него подробно почитать. В ПДФине для xapp1026 только общие данные и функции :
1. socket()
2. blind()
3. listen()
4. accept()
5. recv()
6. send()
7.close()
- там не описаны. Мне бы на пальцах кто показал. Может у вас по Сокету что-то подробное есть?


size = sizeof(remote) возвращает число байт в которое укладываеться remote!Я думаю для поднятия Xilkernel и lwip вам нужно немного подучить С!!Без этого ни как!!И еще разобраться с потоками!
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 8 2008, 14:50
Сообщение #8


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Да мне как-то нудно С ради самой С изучать. Я по надобности проектики собираю и походу решаю возникающие проблемы. Про сокеты я немного почитал и переделал программу, вот только чё-то компилятор мне ошибки странные выдает:
In function `main':
undefined reference to `xilkernel_main'
In function `main_thread':
undefined reference to `lwip_raw_init'
... и т.д. по всем lwip функциям.
Вроде бы ж все библиотеки подключил, так с чего ошибки?
Да, и подскажите кто-нибудь как мне правильно конкретный IP-адрес адресата в строке "address.sin_addr.s_addr = INADDR_ANY;" написать. В дельфи вместо INADDR_ANY ставят Inet_Addr('192.168.1.100'). Как это сделать в С?
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 8 2008, 15:44
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(zherdiy @ Dec 8 2008, 12:50) *
Да мне как-то нудно С ради самой С изучать. Я по надобности проектики собираю и походу решаю возникающие проблемы. Про сокеты я немного почитал и переделал программу, вот только чё-то компилятор мне ошибки странные выдает:
In function `main':
undefined reference to `xilkernel_main'
In function `main_thread':
undefined reference to `lwip_raw_init'
... и т.д. по всем lwip функциям.
Вроде бы ж все библиотеки подключил, так с чего ошибки?

Где подключали ?

1. Указываем в software platform setting галочки на lwip и xilkernel (тип OS) (это вы походу сделали)
2. в set compiler options на закладке paths and options в поле "libraries to link" указываем "lwip4 xilkernel"


удачи wink.gif
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 9 2008, 08:33
Сообщение #10


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Цитата
1. Указываем в software platform setting галочки на lwip и xilkernel (тип OS) (это вы походу сделали)
2. в set compiler options на закладке paths and options в поле "libraries to link" указываем "lwip4 xilkernel"


Спасибо, я по простоте душевной только половину п.1 сделал. Теперь выдает другую ошибку еще при компиляции библиотек:
"ERROR:MDT - issued from TCL procedure "::sw_xilkernel_v4_00_a::kernel_drc" line 13
xilkernel () - Xilkernel for Microblaze requires a system timer device to be
specified. Please choose a valid peripheral instance in the systmr_dev parameter. "

Что-то я не понимаю. В качестве таймера на шину PLB я подключил xps_timer. Его прерывание xps_timer_0_Interrupt завел на обработчик прерывания xps_intc. Туда же завел прерывания от xps_ethernetlite и xps_uartlite. Выходное прерывание xps_intc заведено на microblaze. И что я сделал не так? mss и mhs прилагаются.
Прикрепленные файлы
Прикрепленный файл  system.rar ( 1.85 килобайт ) Кол-во скачиваний: 32
 
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 9 2008, 09:05
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



ну вот ... вопросики пошли поинтереснее.....

Опять же смотрите software platform setting закладку "Os and..." и ищите эту systmr_dev parameter , на которую выдается ошибка.


А Ваш mss файл должен выглядеть как то так :
Код
BEGIN OS
PARAMETER OS_NAME = xilkernel
PARAMETER OS_VER = 3.00.a
PARAMETER PROC_INSTANCE = microblaze_0
PARAMETER systmr_freq = 100000000
PARAMETER max_pthreads = 100
PARAMETER pthread_stack_size = 16384
PARAMETER max_readyq = 100
PARAMETER config_time = true
PARAMETER max_tmrs = 100
PARAMETER config_sema = true
PARAMETER max_sem = 25
PARAMETER max_sem_waitq = 100
PARAMETER debug_mon = false
PARAMETER stdin = RS232_Uart
PARAMETER stdout = RS232_Uart
PARAMETER sysintc_spec = opb_intc_0
PARAMETER config_debug_support = true
PARAMETER systmr_dev = opb_timer_1
PARAMETER static_pthread_table = ((serverThread,1))
END



Тогда как у Вас только

Код
BEGIN OS
PARAMETER OS_NAME = xilkernel
PARAMETER OS_VER = 4.00.a
PARAMETER PROC_INSTANCE = microblaze_0
END




p/s совет : почитайте xapp433 и разберите пример в xapp433.zip
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 10 2008, 07:28
Сообщение #12


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Подправил. Теперь выдает следующие ошибки:
region ilmb_cntlr_dlmb_cntlr is full (program/executable.elf section .text)
region ilmb_cntlr_dlmb_cntlr is full (program/executable.elf section .bss)
section .init [00000050 -> 00000077] overlaps section .text [00000050 -> 00022a0b]
...
section .stack [00000450 -> 0000084f] overlaps section .text [00000050 -> 00022a0b]
rogram/executable.elf: section .text lma 0x50 overlaps previous sections
undefined reference to `serverThread'
Это что - переполнение блочной памяти?
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 10 2008, 08:27
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Вы догадливы. Эта махина (xilkernel и lwip) прилично весит. В BRAM Вы все не запихнете.
Линкуйте на внешную память.


Цитата
undefined reference to `serverThread'

Да и не одна у Вас ошибка к таму же . Что то напутали в потоках.

Еще раз настоятельно рекомендую посмотреть xapp433
Go to the top of the page
 
+Quote Post
zherdiy
сообщение Dec 11 2008, 09:06
Сообщение #14


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

Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895



Да, насчет "serverThread" дуплянул. Теперь уже исправил.

Начал разбирать xapp433. Теперь первый вопрос по его примеру:
int main(void)
{ // Инициализация MFS образа. Дополнительные 4 байта ответвляются чтобы подсчитать для 4х байт заголовка top-данных MFS, с неавтоматическим пропуском
mfs_init_fs(MFS_NUMBYTES, (char *)(MFS_BASE_ADDRESS+4), MFS_INIT_TYPE);
mfs_ls_r(1);
...
- это точно необходимо для всех случаев? Я не понял зачем используется файловая система памяти xilmfs.

Второй вопрос:
void* serverAppThread(void* arg)
{ ...
// Регистрация XEMAC обработчика прерываний
register_int_handler(EMAC_INTERRUPT_ID, (XInterruptHandler)XEmac_IntrHandlerFifo, xemacif_ptr->instance_ptr);
enable_interrupt(EMAC_INTERRUPT_ID);
...
- для чего нужен и где находится обработчик XEmac_IntrHandlerFifo?

Сообщение отредактировал zherdiy - Dec 11 2008, 09:31
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 11 2008, 09:51
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(zherdiy @ Dec 11 2008, 07:06) *
...
- это точно необходимо для всех случаев? Я не понял зачем используется файловая система памяти xilmfs.

Файловая система Вам не нужна в данном случае.


Цитата
Второй вопрос:
void* serverAppThread(void* arg)
{ ...
// Регистрация XEMAC обработчика прерываний
register_int_handler(EMAC_INTERRUPT_ID, (XInterruptHandler)XEmac_IntrHandlerFifo, xemacif_ptr->instance_ptr);
enable_interrupt(EMAC_INTERRUPT_ID);
...
- для чего нужен и где находится обработчик XEmac_IntrHandlerFifo?

Данный обработчик вам также не нужен, так как используете ethernetlite.




p/s простите, а зачем вам сеть вообще ? обязательно ли поддержка tcp/ip ? либо вы собрались работать только на передачу ? подтверждение необходимо принятия пакета ?
Go to the top of the page
 
+Quote Post

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

 


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


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