|
Microblaze + ethernetlite через lwIP, помогите разобраться |
|
|
|
Dec 1 2008, 14:52
|
Частый гость
 
Группа: Участник
Сообщений: 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); но не понял как это работает. И вообще, почему они говорят только про операцию приема? Мне-то передавать нужно. Помогиииите разобраться!
|
|
|
|
|
Dec 5 2008, 07:55
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 5 2008, 08:15
|
Знающий
   
Группа: Свой
Сообщений: 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); // непонятная функция что значит не понятная ? Код /* прослушка входящих подключений (в моем случае наверное не нужна)*/ //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()
|
|
|
|
|
Dec 5 2008, 20:37
|
Частый гость
 
Группа: Участник
Сообщений: 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 вам нужно немного подучить С!!Без этого ни как!!И еще разобраться с потоками!
|
|
|
|
|
Dec 8 2008, 15:44
|
Знающий
   
Группа: Свой
Сообщений: 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" удачи
|
|
|
|
|
Dec 9 2008, 08:33
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 9 2008, 09:05
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 10 2008, 08:27
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
Вы догадливы. Эта махина (xilkernel и lwip) прилично весит. В BRAM Вы все не запихнете. Линкуйте на внешную память. Цитата undefined reference to `serverThread' Да и не одна у Вас ошибка к таму же . Что то напутали в потоках. Еще раз настоятельно рекомендую посмотреть xapp433
|
|
|
|
|
Dec 11 2008, 09:51
|
Знающий
   
Группа: Свой
Сообщений: 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 ? либо вы собрались работать только на передачу ? подтверждение необходимо принятия пакета ?
|
|
|
|
|
Dec 11 2008, 09:59
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Мне нужен просто быстрый интерфейс передачи данных в компьютер. Так как делали раньше, по СОМ-порту, некоторые вещи мы уже не успеваем передавать. Пока я планирую передавать по ethernet, если разберусь с ним. На прием команд от компа скорее всего оставлю СОМ, так что прием через ethernet не понадобится. Ну и протокол верхнего уровня мне нужен хотябы UDP, так как наши програмисты, которые пишут программу для компа, которая будет принимать данные от меня, столкнулись с большим неудобством "общения" по МАСам, а TCP/IP они уже работали.
|
|
|
|
|
Dec 11 2008, 12:34
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Так напрямую, через ethernetlite, я не смогу протокол высшего уровня (UDP) организовать. А на lwip_RAW я вначале смотрел, но он мне более сложным показался - куча обработчиков, таймер (с которым я не работал)... в общем запутался и не понравилось. Но возможно придется вернуться к этому варианту.
А по поводу потока данных (щас по памяти навскидку) - 14 каналов АЦП, непрерывно. Нужно принять, усреднить несколько десятков значений по каждому каналу в одно и передать на комп. Скорость... навскидку не получается, считать нужно, но помню, что в СОМ-порт не влазим. А с тем, что управление по СОМу, а передача данных по ethernet сложно - тут я с вами не соглашусь. СОМ порт у меня хорошо отработан, он простой в использовании. Я бы на нем всю жизнь работал, если бы не нужда в более быстром интерфейсе. Но думаю, что и с ethernet разберусь, тем более что мне только передача нужна.
А вы случайно нигде не видели ядрышек для UDP, простых в использовании?
|
|
|
|
|
Dec 11 2008, 13:35
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
Цитата(zherdiy @ Dec 11 2008, 10:34)  Так напрямую, через ethernetlite, я не смогу протокол высшего уровня (UDP) организовать. Уверены ? Рекомендую почитать документацию всеже на ethernetlite и заодним на UDP и IP Цитата А с тем, что управление по СОМу, а передача данных по ethernet сложно - тут я с вами не соглашусь. СОМ порт у меня хорошо отработан, он простой в использовании. Зачем кидать два провода, когда обойтись можно одним ? и не в сложности тут дело. Цитата 14 каналов АЦП, непрерывно. А какая частота дискретизации АЦП и разрядность ?? Легко же подсчитать скорость потока данных. Кстати , а как собрались считывать данные с АЦП при помощи microblaze ? Цитата А вы случайно нигде не видели ядрышек для UDP, простых в использовании? Видел, почему поиском не пользуетесь ? http://www.fpga4fun.com/10BASE-T.htmlhttp://opencores.org/projects.cgi/web/ethmac/overviewhttp://electronix.ru/forum/index.php?showtopic=49929Удачи.
|
|
|
|
|
Dec 11 2008, 13:40
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата(zherdiy @ Dec 11 2008, 14:34)  ...но помню, что в СОМ-порт не влазим. Сильно не влазите? Цитата СОМ порт у меня хорошо отработан, он простой в использовании. Я бы на нем всю жизнь работал, если бы не нужда в более быстром интерфейсе. Может быть тогда посмотреть в сторону USB на чипе FTDI? Тогда вообще ничего менять не прийдется. Ни на PC, ни в ПЛИС
|
|
|
|
|
Dec 15 2008, 13:59
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
vik0, USB использовать не получится, так как я использую кит spartan3an - у него USB только для прошивки. Костян: "Кстати , а как собрались считывать данные с АЦП при помощи microblaze ?" У меня на ките уже распаяна АЦП LTC1407A-1 с усилителем LTC6912-1. Правда я не стал мудрить с Микроблейзовским SPI и набросал в схематике ISE схемку для получения данных. А по поводу скорости, там дело такое, что если мы будем некоторые данные усреднять, то СОМ порта хватит, а если нет - то впритык. Это если стандартными значениями до 128КБит/с пользоваться. В любом случае мне лучше сразу подстраховаться ethernetом. Развивая тему дальше, хочу спросить: что это за ошибки при компиляции выскакивают? ./microblaze_0/lib//libxil.a(print.o): In function `print': /edkgnu/jm/mb/build/nt/bld_gcc/gcc/libgloss/microblaze/print.c:25: undefined reference to `outbyte' ./microblaze_0/lib//libxil.a(xil_printf.o): In function `padding': /edkgnu/jm/mb/build/nt/bld_gcc/gcc/libgloss/microblaze/xil_printf.c:50: undefined reference to `outbyte' ... ./microblaze_0/lib//libxil.a(read.o): In function `read': /edkgnu/jm/mb/build/nt/bld_gcc/gcc/libgloss/microblaze/read.c:35: undefined reference to `inbyte' - я ж вообще ни print.c, ни xil_printf.c не пользуюсь. Откуда ноги растут? Программа прилагается
Прикрепленные файлы
code.rar ( 2.15 килобайт )
Кол-во скачиваний: 53
|
|
|
|
|
Dec 16 2008, 08:02
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
Цитата(zherdiy @ Dec 15 2008, 11:59)  Костян: "Кстати , а как собрались считывать данные с АЦП при помощи microblaze ?" У меня на ките уже распаяна АЦП LTC1407A-1 с усилителем LTC6912-1. Правда я не стал мудрить с Микроблейзовским SPI и набросал в схематике ISE схемку для получения данных. Не поняли вопрос. Ну набросали схемку , а как заводить дальше отсчеты на ethernet ? Цитата - я ж вообще ни print.c, ни xil_printf.c не пользуюсь. Откуда ноги растут? Программа прилагается Ну какой Вы несамостоятельный. Смотрим *.mss файл от Xapp433 : Код 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 Обращаем особое внимание на параметр stdin и stdout . Они у Вас прописаны ?
|
|
|
|
|
Dec 16 2008, 09:06
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Насчет АЦП. См.картинку подключения АЦП+Усил на ките Spartan3AN. Выход уже оцифрованных данных идет по SDO в последовательном виде (вначале один канал, за ним второй). Преобразуем эти данные в паралельный вид и пихаем на вход GPIO в Микроблейз. Главное вовремя стробонуть паралельный регистр. По поводу моих ошибок. Вставил в MSS PARAMETER stdin = RS232_DTE PARAMETER stdout = RS232_DTE и ошибки пропали. А я раньше думал зачем определяют стандартные входы/выходы, если все работает и без них. А что туда пихает Lwip?
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 16 2008, 09:15
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
Цитата(zherdiy @ Dec 16 2008, 07:06)  Насчет АЦП. См.картинку подключения АЦП+Усил на ките Spartan3AN. Выход уже оцифрованных данных идет по SDO в последовательном виде (вначале один канал, за ним второй). Преобразуем эти данные в паралельный вид и пихаем на вход GPIO в Микроблейз. Главное вовремя стробонуть паралельный регистр. Мне знакома схемотехника подобных плат. Я хотел узнать как вы собирались заводить данные в контроллер. Ответ GPIO. Уверены что порты ввода/вывода справятся с вашим потоком данных ? Это весьма тормознутая штука. А эта АЦП то 3 MSPS. Подумайте над этим вопросом.
|
|
|
|
|
Dec 22 2008, 13:39
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Написал, по примеру XAPP1026 програмульку для RAW. Компиляцию пока не запускал, так как не понял зачем вообще используется таймер. Физически линия его прерывания заводится на контроллер прерываний. Обработчик прерывания таймера имеет следующий вид: void xadapter_timer_handler(void *p) { unsigned *timer_base = (unsigned *)XPAR_XPS_TIMER_0_BASEADDR; unsigned tcsr = 0;
static int odd = 1; tcp_fasttmr(); //??? odd = !odd; //??? if (odd) tcp_slowtmr(); //??? platform_timer_interrupt_count++;
/* Загрузка таймера и очистка бита прерывания */ XTmrCtr_mSetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, ХTC_CSR_INT_OCCURED_MASK | XTC_CSR_LOAD_MASK); XTmrCtr_mSetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK | XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK);
/* пуск таймера */ /* XTmrCtr_mSetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK); */ XIntc_mAckIntr(XPAR_XPS_INTC_0_BASEADDR, XPAR_XPS_TIMER_0_INTERRUPT_MASK); } ------------------------------------------------------------ Мне не понятно, что такое odd, что делает процедура tcp_fasttmr(). Потом мы просто чистим внутренний регистр от бита прерывания. Но после этого стоит закоментареная процедура XTmrCtr_mSetControlStatusReg - зачем вообще это было в пример включать? В общем непонятно что делает обработчик прерывания таймера. Могу ли я отправлять пакеты по UDP без всяких таймеров?
|
|
|
|
|
Dec 26 2008, 10:48
|
Группа: Участник
Сообщений: 13
Регистрация: 26-12-08
Пользователь №: 42 765

|
Подскажите пожалуйста. Недавно начал работать с Microblaze. Требуется реализовать WebServer. Скачал пример с сайта Xilinx. Но возникла проблема. Как я понял подобные проекты большия для размещения во внутренней памяти и их размещают во внешней DDR2. Проблема заключается в том что у меня ничего не работает даже простенькие проекты с использованием внешней памяти. Подскажите как реализуется проект с использованием внешней памяти. Или если есть литература скиньте ссылку пожалуста. Буду очень признателен.
|
|
|
|
|
Dec 26 2008, 14:15
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Дмитрий МазунинУ меня вроде как законченный прибор, то бишь компилирую весь проект с програмным кодом проца, а затем заливаю его по USB (JTAG в моем ките отсутствует) в плис. maugliА в блочную память все секции как раз не влазят. Тупик. Теперь нарыл данных по формированию пакета IP/UDP - думаю, что мне проще будет пакеты самостоятельно формировать, тем более что я только отправлять собираюсь. В связи с этим вопрос: кто знает что такое "операция сложения 16р слов по модулю 1" и "дополнение по модулю 1 полученного результата"? Это по поводу расчета контрольных сумм для заголовка IP и датаграммы UDP. ZingerЕсли вы недавно начали работать с Микроблейзом, то трудновато будет сразу с WebServer'ом разобраться. Хотя... может не все такие тугие как я  . И вопрос немного не понятен - если вам DDR сейчас нужен для такого же случая, как у меня - чтобы переменные кода размещать, то это одно. Может кто поопытнее скажет, а у меня (см.выше) не вышло. А если использовать DDR как хранение данных, то есть тема, где я задавал глупые вопросы и получал вполне умные ответы: Использование DDR2 в XPS, xmpmc библиотеки
Сообщение отредактировал zherdiy - Dec 26 2008, 14:19
|
|
|
|
|
Dec 29 2008, 11:05
|
Группа: Участник
Сообщений: 13
Регистрация: 26-12-08
Пользователь №: 42 765

|
Может я не совсем правильно выразил свой вопрос. Суть в том как я понял программа выполняемая на MicroBlaze может храниться как в памяти на основе ресурсов плис или во в нешней памяти. Проблема в том что размещая данную программу во в нешней памяти она не выполняется. Как быть?
|
|
|
|
|
Dec 29 2008, 13:37
|
Группа: Участник
Сообщений: 13
Регистрация: 26-12-08
Пользователь №: 42 765

|
Да плохо что молчит, очень надо узнать как всетоки это осуществляется.
|
|
|
|
|
Feb 11 2009, 14:01
|
Группа: Новичок
Сообщений: 6
Регистрация: 24-02-07
Из: Москва
Пользователь №: 25 624

|
Главное, не забыть про канальный уровень и подставлять правильные mac-адреса. И надо еще прикинуть, не будет ли реализация протокола ARP Да и вообще весь ethernet-кадр очень важен. Накосячил с подсчетом crc, и привет, "ждите ответа" и думай, что это ничего не доходит. При работе с emaclite сложилось впечатление, что это чей-то не доделанный курсовой: запустили, а до ума не довели. У контроллера очень велика вероятность "умирания" приемной составляющей при пропускании через плату реального интернет трафика. 100 МБит/с, куча маленьких и больших пакетов вперемешку, обработчик прерывания не успевает пометить буферы, как свободные. Приходит третий пакет, а его уже ждет сюрприз, места для него нет. Контроллер сходит с ума, приема для него больше не существует. Работать можно минимальный интервал между пакетами больше 0,0002 с для системы работающей на частоте 50 МГц и копирование кадра из буфера приемника в ddr происходит не в обработчике прерывания и после пометки буфера свободным. Причем работает очень даже неплохо.
--------------------
3 раза шагнул в пустоту
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|