ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
313893
Mahagam (11.03.2012 16:58, просмотров: 5234)
ARM9 с кешами по 16к в составе OMAP-L138. всё круто, всё работает под многозадачкой CTL. настроил Ethernet-контроллер. запустил. портировал lwIP 1.4.0 с поддержкой многозадачности. весь исплевался: код вида  struct netifapi_msg msg; msg.function = do_netifapi_netif_add; msg.msg.netif = netif; msg.msg.msg.add.ipaddr = ipaddr; msg.msg.msg.add.netmask = netmask; msg.msg.msg.add.gw = gw; msg.msg.msg.add.state = state; msg.msg.msg.add.init = init; msg.msg.msg.add.input = input; заставляет высирать кирпичи. монструозность и тормознутость та ещё. и самое главное - непонятно как сделать так, чтобы можно было одновременно законнектить к устройству более одного телнета!!! ну и скорость слива массива данных по http 2.7MB/s бросил всё, плюнул на потраченное время и запустил uIP 1.0 и первым же делом увидел страннейший глюк: отправляемый в сеть пакет уходил без мак-адресов ))) но в коде всё чики-пики: перед вызовом функции отправки пакета в сеть вызывается uip_arp_out которая и прописывала маки в пакете. а глюк возникал потому что эти мак адреса до памяти не доходили, оседая в кэше проца. есть варианты решения: 1. поместить эзернет буфера в некешируемую область. вроде красиво, но uIP стек работает с пакетом напрямую, то есть формирует пакет на отправку в том же буфере что и принял. а работа там почти побайтовая. 2. сбрасывать кеш, что, собственно, я счас и делаю. вроде и по http аж 4.2MB/s достиг.. но как-то некрасиво: на каждый принятый пакет очищать 16к кеша данных. и перед отправкой каждого пакета сбрасывать все кэши в память (это хоть не тормозящая процедура). может есть более красивое решение?