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

 
 
> Spartan 3an Ethernet(SocketApi)
vitali36
сообщение Jan 13 2014, 10:46
Сообщение #1


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Всем доброго времени суток! Пару месяцев назад решил поднять ethernet на Spartan 3an.
Изучил app1026. Там, непосредственно два примера с эхо сервером. Режим RAW API и Socket API. В Raw режиме эхо сервер отработал, все ок.
Но задача по сути стоит в передаче данных ацп, которые я сначала записываю в ddr2, затем читаю оттуда и после этого я должен их отправлять на комп. Как я понял, для этой задачи целесообразно использовать Socket API.
Я создал в SDK bsp, которая привязана к lwip. Все это вертится на xil_kernel. Добавил. Для начала хочу просто запустить тот же эхо сервер, в socket api режиме(без данных ацп). Затем создал пустой проект в sdk(xilinx C/C++ project) и импортнул файлы сокет приложения, которые предлагал xilinx. Выкладываю ниже архив.
После импорта файлов выдает ошибку (еще даже не компилировал) xilkernel_bsp_0/microblaze_0/include/lwip/sys.h:223:14: note: expected 'void *' but argument is of type 'int'
../echo.c:93:3: error: too few arguments to function 'sys_thread_new'
../../xilkernel_bsp_0/microblaze_0/include/lwip/sys.h:223:14: note: declared here
make: *** [echo.o] Ошибка 1
Ошибка в файле echo.c в строчке sys_thread_new(process_echo_request, (void*)new_sd, DEFAULT_THREAD_PRIO);
Что не так, подскажите, пожайлуста? И в правильном ли я направлении с точки зрения задачи иду.
З.ы. В линкер скрипте все линкуется в ddr2, не bram, так что при компиляции ошибок о нехватки ресурсов платы не должно быть
Прикрепленные файлы
Прикрепленный файл  src.rar ( 16.27 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 24)
Дмитрий Мазунин
сообщение Jan 13 2014, 11:22
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Не хватает параметров функции sys_thread_new(const char *name, void (* function)(void *arg), void *arg, int stacksize, int prio)
Конкретно параметра stacksize и name (вроде бы)
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 13 2014, 11:37
Сообщение #3


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Дмитрий, добавил size(у меня так названа эта переменная) sys_thread_new(process_echo_request, (void*)new_sd, size, DEFAULT_THREAD_PRIO);
и все равно ошибка. Clean пробовал тоже после этого - та же песня...(
name нигде не фигурирует у меня. Есть int sock. sock это и есть этот "name"?

Сообщение отредактировал vitali36 - Jan 13 2014, 11:41
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Jan 13 2014, 11:46
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



sys_thread_new(const char *name, void (* function)(void *arg), void *arg, int stacksize, int prio)
см. файл sys_arch.c
name - имя треда, строка
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 13 2014, 11:59
Сообщение #5


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Дмитрий, ну да, верно Вы сказали. В библиотечном файле посмотрел - sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio).
А в сишном файле echo.c, у функции другие параметры: sys_thread_new(process_echo_request, (void*)new_sd,DEFAULT_THREAD_PRIO);
Странно, почему так? Что мне в итоге убрать, а что оставить?
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Jan 13 2014, 12:02
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Потому, что пример от предыдущей версии LWIP, там был другой формат sys_thread_new
Посмотрите внимательно sys_arch.c - код sys_thread_new, будет все понятно с параметрами
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 14 2014, 08:20
Сообщение #7


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



В функции заголовка sys.h: sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);
В функции echo.c : sys_thread_new(process_echo_request, (void*)new_sd,DEFAULT_THREAD_PRIO);
Добавляю в echo.c параметр из заголовка int stacksize, const char *name, и все равно ругается. Так порлучается что вобще все переменные в коде нужно менять, не только параметры функции? У меня lwip 140. Может Вы выложите свои исходники,Дмитрий , с сокетом,чтобы я сразу их добавил?

Сообщение отредактировал vitali36 - Jan 14 2014, 08:22
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 14 2014, 14:09
Сообщение #8


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Изменял параметры в функции, сыпятся еще и еще ошибки. Проблема с версиями lwip. У меня lwip 140. Эти файлы что я выкладывал под другую верси lwip. У КОГО ЕСТЬ ИСХОДНИКИ по Socket API, отпишите пожалуйста!
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 14 2014, 18:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Посмотрел исходники. Вообще говоря, в благородных домах за такой typecasting убивают(что, судя по первому сообщению, компилятор и сделал). В вашем варианте вызов sys_thread_new должен выглядеть примерно так:
#define STACKSIZE 4096
const static char *procname = "Echo accepted socket thread";
sys_thread_new(procname,process_echo_request,(void*)new_sd,STACKSIZE,DEFAULT_THR
EAD_PRIO)
А лучше вот так:
sys_thread_new(procname,process_echo_request,(void*)&new_sd,STACKSIZE,DEFAULT_THREAD_PRIO)
соответственно в начале process_echo_request вместо
int sd = (int)p
пишем
int sd = *(int *)p;

Размер STACKSIZE должен быть достаточно большой (не менее RECV_BUF_SIZE*1,5, оценка грубая).
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 15 2014, 07:03
Сообщение #10


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Новая ошибка. /dispatch.c:19:23: fatal error: lwip/inet.h: No such file or directory и варнинг в этом же файле #include "lwip/ip_addr.h"
В xil_kernel_bsp настройках lwip галочка стоит(подключен)




Предыдущую исправил с inet.h.
Добавил недостающие параметры в функции sys_thread_new("name",process_echo_request, (void*)new_sd, 2048 , DEFAULT_THREAD_PRIO);
Добавил "name", и размер стэка 2048.
Функцию теперь эту как ошибку не показывает компилятор, зато появилась новая: http_response.c:21:24: fatal error: mfs_config.h: No such file or directory.

Сообщение отредактировал vitali36 - Jan 15 2014, 07:04
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 15 2014, 09:02
Сообщение #11


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Избавился от mfs_config.h следующим образом. Не знаю, правильно ли это. Я удалил некоторые файлы где описана работа tftp сервера и web сервера. Оставил только echo. После этого мне выдает ошибки в xil_kernel_bsp такого типа:
xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:112: undefined reference to `xget_clock_ticks' в куске кода
Код
#define TICKS_TO_MS(x) ((x) * SYS_MSPERTICK)


    if (timeout) {    /* Try to acquire the semaphore within timeout. If not return */
        u32_t ticks = xget_clock_ticks();
        u32_t nticks = 0;
        if (!sem_timedwait(sem, timeout)) {    /* sem_timedwait returns 0 on success */
            nticks = xget_clock_ticks();
            if (nticks >= ticks)
                return TICKS_TO_MS(nticks-ticks);

xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:114: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:115: undefined reference to `xget_clock_ticks'
../../xilkernel_bsp_0/microblaze_0/lib\liblwip4.a(sys_arch.o): In function `sys_arch_mbox_fetch':
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:301: undefined reference to `xget_clock_ticks'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:303: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:306: undefined reference to `xget_clock_ticks'
collect2: ld returned 1 exit status


И все это в файле sys.arch.c
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 15 2014, 10:29
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



mfs_config.h - это Xilinx Memory File System - ищите в инклюдах ядра.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 15 2014, 10:49
Сообщение #13


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



gosha-z, спасибо! нашел в настройках bsp. А по последнему что скажите?

xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:112: undefined reference to `xget_clock_ticks'
xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:114: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:115: undefined reference to `xget_clock_ticks'
../../xilkernel_bsp_0/microblaze_0/lib\liblwip4.a(sys_arch.o): In function `sys_arch_mbox_fetch':
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:301: undefined reference to `xget_clock_ticks'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:303: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:306: undefined reference to `xget_clock_ticks'
collect2: ld returned 1 exit status
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 15 2014, 10:55
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Погуглил, читаю сюда:
xget_clock_ticks() хочет sys/timer.h
sem_timedwait() хочет semaphone.h
выглядит логичным.
Напрягает то, что это пропуски в исходниках lwip, как я понимаю. Но выглядит так, что вы линкеру не показали какие-то библиотеки ядра.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 15 2014, 17:33
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да там в СДК когда проект создаешь, подключаются библиотеки и модули галочками, после чего средой создаются хедеры, и все подгружается. LwIP изначально работает из компиленных библиотек, исходники явно не включаются в проект, их добавление руками вызывает проблемы и так далее...

Просто изначально надо было делать все последовательно, а человек видать нашел чей-то проект, сгенерил к нему свое "железо" и теперь мучается... Если делать по шагам по мануалу с нуля все как написано, все запускается, да еще с правильными версиями...
Go to the top of the page
 
+Quote Post
Дмитрий Мазунин
сообщение Jan 16 2014, 07:53
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715



Цитата(Golikov A. @ Jan 15 2014, 23:33) *
Просто изначально надо было делать все последовательно, а человек видать нашел чей-то проект, сгенерил к нему свое "железо" и теперь мучается... Если делать по шагам по мануалу с нуля все как написано, все запускается, да еще с правильными версиями...

Полностью согласен.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 17 2014, 05:27
Сообщение #17


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Я понимаю, что проблемы с версиями. что lwip у меня не 1.3, а 1.4. Но дело в том, что у меня в sdk нельзя создать именно socket api приложение. Там только lwip echo project. Он создается на ОС standalone. Со своим xilkernel bsp я могу создать только пустой проект. ну еще там есть xilkernel posix threads demo. Т.е исходников именно под мою версию lwip мне взять негде. Вот мне Дмитрий Мазунин скидывал исходники, что я выклдавал вначале. Но там под 1.3 lwip, поэтому косяки вылетают..(
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 17 2014, 06:59
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



правильно было написать

"я понимаю что проблема с версиями.... но дело в том что я не стал разбираться как сделать socket api приложение...."


Soket API приложение требует операционной системы. Операционная система может быть как внешняя так предоставленная от ксалинкса. При создании проекта надо выбирать не stand alone, а тот что с операционкой. В нем добавлять LwIP, и дальше действовать по мануалу.

В Stand alone процессоре неправильно ожидать наличие примеров для операционной системы...

Go to the top of the page
 
+Quote Post
SM
сообщение Jan 17 2014, 07:02
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Поясните, как сокеты могут быть связаны с операционной системой? Сокеты это совершенно свое API, которое может быть представлено в составе ОС, может быть отдельно, без ОС, а может быть даже в чисто "железном" виде, как например чипы WizNet, которые имеют интерфейс в виде сокетов.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 17 2014, 07:18
Сообщение #20


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



A.Golikov, здравствуйте) Сначала при создании можно выбрать standalone/linux. Я выбираю стандалон, но в след окне вместо стандалон ставлю xil_kernel(bsp, что я создал). Т.е ОС xilkernel. Так написано в xapp1026 про socket api application, что нужно поставить ос xilkernel, помимо lwip

Сообщение отредактировал vitali36 - Jan 17 2014, 07:22
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Jan 17 2014, 08:49
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Цитата(SM @ Jan 17 2014, 11:02) *
Поясните, как сокеты могут быть связаны с операционной системой?

У ТС проблемы не с socket API, у ТС проблемы именно с "ядерными" API (threading, semaphores, timers)
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 17 2014, 09:19
Сообщение #22


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Вообщем пока отбой) Покопался на форумах xilinx. Проблема всех этих ошибок, что Георгий описал выше, а именно:
Код
xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:114: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:115: undefined reference to `xget_clock_ticks'
../../xilkernel_bsp_0/microblaze_0/lib\liblwip4.a(sys_arch.o): In function `sys_arch_mbox_fetch':
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:301: undefined reference to `xget_clock_ticks'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:303: undefined reference to `sem_timedwait'
C:\Users\vitaliy\workspace7\xilkernel_bsp_0\microblaze_0\libsrc\lwip140_v1_01_a\src/contrib/ports/xilinx/sys_arch.c:306: undefined reference to `xget_clock_ticks'


заключалась в следующем: нужно было в BSP настройках, где ОС xilkernel, config_time поставить true.
Вобщем буду щас пробовать запускать
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 17 2014, 09:59
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(SM @ Jan 17 2014, 11:02) *
Поясните, как сокеты могут быть связаны с операционной системой? Сокеты это совершенно свое API, которое может быть представлено в составе ОС, может быть отдельно, без ОС, а может быть даже в чисто "железном" виде, как например чипы WizNet, которые имеют интерфейс в виде сокетов.

Не совсем мне вопрос, но ответ я знаю "так получается" sm.gif...

Это ксалиновская идея, надо понимать что LwIP у них - это не совсем LwIP, а некая сделанная ими библиотека на основе LwIP, которая связана с железом, маками и прочим уже внутри себя. И они пишут что если вы хотите можете гонять ее в режиме Raw API, и все таймеры дергать руками, либо в режиме Socket API, но в это случае добро пожаловать, используйте операционку.

Собственно я так понимаю это от того что функции в socket API у них блокирующие и все нафиг повиснет и работать не будет.

Вот. Так что это не про сокеты, а про сокеты ксалинкса, именно ихнего LwIP. Наверняка можно аккуратно пересобрать все из исходников, и подправить функции чтобы они работали без операционки, но это муторно как-то и не похоже что ТС хочет идти этим путем.
Go to the top of the page
 
+Quote Post
vitali36
сообщение Jan 17 2014, 10:09
Сообщение #24


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

Группа: Участник
Сообщений: 88
Регистрация: 2-07-13
Пользователь №: 77 354



Что-то не получается пингануть плату. Самое главное когда в sdk уже запускаю, процесс компиляции проходит без ошибок, но в терминале где сообщения с ком-порта приходят пусто. В адресной строке пишу(хотя смысла не было, плата то не пингуется) http://192.168.1.10 -тоже не работает. Почитал xapp1026 про tftp,web server applications. Там говорится(если я правильно понял) что сначала нужно запустить mfs image. И как я понял это memory file system, что я ставил галочку при настройках ядра.
Так ли это, что это воообще за mfs image, и как его заюзать



Сообщение отредактировал vitali36 - Jan 17 2014, 10:10
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 17 2014, 20:13
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



в свойствах LwIP поставьте галочки на дебуг всего, и поглядите чего у вас там происходит.
Go to the top of the page
 
+Quote Post

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

 


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


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