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

 
 
> 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 - 14)
Дмитрий Мазунин
сообщение 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

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

 


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


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