Oooh, I see. Then I believe I have to revisit my code because I based my
design on their app note.




Best,
Gary

On 28 September 2016 at 13:41, goldsimon <[email protected]> wrote:

> On the contrary: Xilinx does it perfectly right. They use their hardware
> at interrupt level but feed rx packets into lwip in the main loop.
>
> Simon
>
> Gesendet mit AquaMail für Android
> http://www.aqua-mail.com
>
> Am 28. September 2016 2:35:54 nachm. schrieb garibaldi pineda garcia <
> [email protected]>:
>
>> Xilinx application notes seem to contradict the don't-mix
>> interrupt/polling domains:
>>
>> Creating an lwIP Application Using the RAW API
>>
>> The lwIP RAW mode API is more complicated 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.
>>
>> 2. After lwIP has been initialized, an Ethernet MAC can be added using
>> the xemac_add helper function.
>>
>> 3. Because the Xilinx lwIP adapters are interrupt-based, enable
>> interrupts in the processor and in the interrupt controller.
>>
>> 4. Set up a timer to interrupt at a constant interval. Usually, the
>> interval is around 250 ms. In the timer interrupt, update necessary flags
>> to invoke the lwIP TCP APIs tcp_fasttmr and tcp_slowtmr from the main
>> application loop explained previously.
>>
>> 5. After the application is initialized, the main program enters an
>> infinite loop performing packet receive operation, and any other
>> application specific operation it needs to perform.
>>
>> 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.
>>
>>
>>
>>
>> Best,
>> Gary
>>
>> On 28 September 2016 at 13:20, garibaldi pineda garcia <
>> [email protected]> wrote:
>>
>>> Hi,
>>>
>>> Dirk you're right, I'm using LWIP with the NO_SYS flag set to true.
>>>
>>> I'm somewhat confused, do I have two options?
>>>
>>> 1) Do a polling-like application that manages input/output without
>>> interrupts (I have no clue how to do this, should I follow the sample
>>> code?).
>>>
>>> 2) Send everything out when I get the ethernet input interrupt
>>>
>>> I really don't need any of the data I get from the receiver side of
>>> ethernet (other than getting the MAC address), could I skip any checking of
>>> that input?
>>>
>>>
>>>
>>>
>>> Best,
>>> Gary
>>>
>>> On 28 September 2016 at 12:44, Dirk Ziegelmeier <[email protected]>
>>> wrote:
>>>
>>>> A second way to do it, not so preferred by some peoples but worked for
>>>>> me, is to add critical
>>>>>
>>>>> Sections in code that call’s LwIP functions. Adding a critical section
>>>>> means that you block other
>>>>>
>>>>> Tasks for a short time. Especially the TCP task from running. It means
>>>>> that if you allocate a buffer from
>>>>>
>>>>> the LwIP pool until you do not Call exit from the critical section the
>>>>> TCP task will not run and therefore
>>>>>
>>>>> will not interfere.
>>>>>
>>>>>
>>>>> Depends on what you mean by "critical section". If this is
>>>> disable/enable interrupts, that only works if you don't use an OS.
>>>>
>>>> NoSys:
>>>> 1) Your ethernet MAC interrupt directly calls into lwIP to deliver RX
>>>> packets in IRQ context​ (this implies all your lwIP callback functions are
>>>> called in IRQ context). If you call into lwIP from your application code,
>>>> then yes, all you need to to is disable interrupts. If timers are involved,
>>>> even more locking code is needed to lock out timer IRQ and ethernet IRQ
>>>> from each other (assuming these may be nested).
>>>> 2) Use "mainloop" code: http://git.savannah.gnu.org/cg
>>>> it/lwip.git/tree/doc/NO_SYS_SampleCode.c
>>>>
>>>> ​OS:
>>>> ​1) Use lwIP core locking. Then you only need to aquire the lwIP core
>>>> lock using LOCK_TCPIP_CORE() / UNLOCK_TCPIP_CORE()​
>>>> ​​
>>>> ​ before calling into lwIP.
>>>> ​2) Use tcpip_callback() to get called back from TCPIP thread and do
>>>> the sending work there.​
>>>> ​In both OS cases, take care of ethernet RX, you need to use
>>>> tcpip_input() as input function in netif_add() to make RX thread-safe.​​
>>>>
>>>> ​Dirk
>>>>
>>>> _______________________________________________
>>>> lwip-users mailing list
>>>> [email protected]
>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>>
>>>
>>>
>> _______________________________________________
>> lwip-users mailing list
>> [email protected]
>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>
> _______________________________________________
> lwip-users mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to