04

мар

FreeRTOS Support Archive

The FreeRTOS support forum is used to obtain active support directly from RealTime Engineers Ltd. In return for using our top quality software and services forfree, we request you play fair and do your bit to help others too! Sign upto receive notifications of new support topics then help where you can.




This is a read only archive of threads posted to the FreeRTOS support forum.The archive is updated every week, so will not always contain the very latest posts.Use these archive pages to search previous posts. Use the Live FreeRTOS Forumlink to reply to a post, or start a new support thread.


[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [January 2017 Threads]

During this work we discovered an interesting issue in the lwIP port for Xilinx Zynq. It seems to be using FreeRTOS in a rather inefficient way,.

Zynq/FreeRTOS/lwip confusion

Posted by krbvroc1 on January 18, 2017

I am trying to come up to speed with this environment and have confused myself.I am using the FreeRTOS 8.2.3 and LWIP1.4.1 that comes with Vivado (came with my Zybo [Zynq 7010] trainer board).

lwip says to use the RAW API for high performance TCP which I want to do. I planned on running the lwip it its own thread. The lwip RAW API examplesshow a simple mainloop design that would appear to chew up 100% CPU in a tight loop polling for packets to process. I would seem a better design to invoke the receiver from the DMA ISR (or use a task notification / semaphore) so it is interrupt / DMA driven.

It seems that in order to use the RAW API I have to define my lwip with NO_SYS even though I am running with FreeRTOS. (That is how vivado configured it). I understand I will need to limit my interaction with lwip to a single thread and use FreeRTOS to communicate with the thread.

The very first thing I notice is that lwip says to create its threads using a systhreadnew() call. If I am reading the lwip/Xilinx library correctly, that appears to be a wrapper for pthreadcreate().How is that going to work with FreeRTOS and using xTaskCreate() and trying to communicate using a queue or task notify between the two. On the surface it doesn't make sense and the whole thing is confusing. Or do I ignore the lwip docs and use xTaskCreate() for my single lwip task -- perhaps systhread_new is only when using socket/netconn API. I really just want to let lwip run in a single task and interactwith that task via the FreeRTOS stuff described in the book like task notifications, event groups, etc.

Zynq/FreeRTOS/lwip confusion

Not an expert of lwIP, but it was not originally designed to run multi-threaded, so what you are saying is not a surprise. We have run it that way too - so long as you only use the code from one thread it works.

Register hddr160e03x free account to unlock additional features at BleepingComputer. Toshiba drives also share some hddr160e03x laptop drives problems. Our hddr160e03x are USB powered and include an internal shock hddr160e03x and ramp loading technology to help keep your drive safe and your hddr160e03x mobile. Free download of Toshiba HDDR160E03X User Manual. Troubleshooting help from experts and users. Ask our large community for support. Need to find software driver for Toshiba 160GB USB 2.0 Portable External Hard Drive - HDDR160E03X? Toshiba hddr160e03x driver - the best free software for your home.

Don't ignore the lwIP docs. You need to use a FreeRTOS port layer so systhreadnew() calls xTaskCreate(). Xilinx have one, as do we, in fact if you use the SDK wizard to create a FreeRTOS project you have the option of adding lwIP into the mix too. Alternatively the main FreeRTOS download has an lwIP example for the Zynq (http://www.freertos.org/RTOS-Xilinx-Zynq.html) and we have our own multi-threaded TCP running on the Zynq too: http://www.freertos.org/FreeRTOS-Plus/FreeRTOSPlusTCP/TCPIPFATExamplesXilinxZynq.html

Zynq/FreeRTOS/lwip confusion

I guess this is why I am confused. I used the SDK to create a FreeRTOS project and I added in the lwip to the BSP settings and I generated the FreeRTOS hello world example that the SDK creates for me. So far that is all I have done and the examples passes.

I would think the Xilinx SDK would have handled this. But when I look at the lwipopt include file it has NOSYS set (and there is no mention of OSIS_FREERTOS). I would think both of those would need to be set for the FreeRTOS layer to be present that you mention. But then the lwip documentation talks about RAW API mode is for standalone without an OS. I got the impression that FreeRTOS port layer is only for the higher level socket/netconn API, not the RAW API. That is why I was thinking maybe for RAW API only I should use xTaskCreate() and run the lwip stuff in that task. Since it is single threaded it should not be creating or communicating with any other tasks.

I don't know if I have the liberty to use the FreeRTOS+TCP and I know I need to support multiple (x3) netif.

Zynq/FreeRTOS/lwip confusion

If you decide to use lwIP, why not the latest 2.0.0 version ?

FreeRTOS+TCP has recently been extended with the possibility to use multiple interfaces (NIC's). That works well with IPv4 sockets. That version has not been released officially, but anyone is welcome to try out this beta release.

FreeRTOS+TCP is simple to use as it only offers a BSD socket interface and API's. It does have optimisations like zero-copy send()/recv().

Zynq/FreeRTOS/lwip confusion

There is an example integration here, but it is VERY OLD: https://interactive.freertos.org/hc/en-us/community/posts/210028826-FreeRTOS-Win32-project-with-lwIP-web-server

Freertos

Zynq/FreeRTOS/lwip confusion

I did see that a 2.0.0 version of lwip was released but I thought it might be smarter to stick with what comes with the Xilinx SDK tools and with what they maintain rather than having to port something new.

Xilinx already provides the network driver layer (with DMA support) for the emacps and axiethernet MAC on 1.4.1. Does the FreeRTOS+TCP provide that currently for both those?

Zynq/FreeRTOS/lwip confusion

FreeRTOS+TCP does not yet support 'axiethernet'. If you write a networkInterface.c for it, you'll will get free support from us :-)

Zynq/FreeRTOS/lwip confusion

Hi,This post just to say I ran into the same error type with Vivado 2016.4 and zynq's ps7_ethernet.

It seems that OSISFREERTOS definition is missing, but even when I manually define it (e.g. in lwipopts.h), I still obtain errors when creating a sample FreeRTOS LwIP echo server.

I'll try manually dealing with RAWAPI instead of SOCKETAPI for now, as the sample echo server code for FreeRTOS seems to exclusively use sockets.

There seems to be an issue in Xilinx SDK configuration of LwIP socket + FreeRTOS. If I can't get anywhere, I'll go to Xilinx forums for help.


[ Back to the top ][ About FreeRTOS ][ Privacy ][ Sitemap ][ Report an error on this page (with anti-spam) ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Popular Posts

FreeRTOS Support Archive

The FreeRTOS support forum is used to obtain active support directly from RealTime Engineers Ltd. In return for using our top quality software and services forfree, we request you play fair and do your bit to help others too! Sign upto receive notifications of new support topics then help where you can.




This is a read only archive of threads posted to the FreeRTOS support forum.The archive is updated every week, so will not always contain the very latest posts.Use these archive pages to search previous posts. Use the Live FreeRTOS Forumlink to reply to a post, or start a new support thread.


[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [January 2017 Threads]

During this work we discovered an interesting issue in the lwIP port for Xilinx Zynq. It seems to be using FreeRTOS in a rather inefficient way,.

Zynq/FreeRTOS/lwip confusion

Posted by krbvroc1 on January 18, 2017

I am trying to come up to speed with this environment and have confused myself.I am using the FreeRTOS 8.2.3 and LWIP1.4.1 that comes with Vivado (came with my Zybo [Zynq 7010] trainer board).

lwip says to use the RAW API for high performance TCP which I want to do. I planned on running the lwip it its own thread. The lwip RAW API examplesshow a simple mainloop design that would appear to chew up 100% CPU in a tight loop polling for packets to process. I would seem a better design to invoke the receiver from the DMA ISR (or use a task notification / semaphore) so it is interrupt / DMA driven.

It seems that in order to use the RAW API I have to define my lwip with NO_SYS even though I am running with FreeRTOS. (That is how vivado configured it). I understand I will need to limit my interaction with lwip to a single thread and use FreeRTOS to communicate with the thread.

The very first thing I notice is that lwip says to create its threads using a systhreadnew() call. If I am reading the lwip/Xilinx library correctly, that appears to be a wrapper for pthreadcreate().How is that going to work with FreeRTOS and using xTaskCreate() and trying to communicate using a queue or task notify between the two. On the surface it doesn\'t make sense and the whole thing is confusing. Or do I ignore the lwip docs and use xTaskCreate() for my single lwip task -- perhaps systhread_new is only when using socket/netconn API. I really just want to let lwip run in a single task and interactwith that task via the FreeRTOS stuff described in the book like task notifications, event groups, etc.

Zynq/FreeRTOS/lwip confusion

Not an expert of lwIP, but it was not originally designed to run multi-threaded, so what you are saying is not a surprise. We have run it that way too - so long as you only use the code from one thread it works.

Register hddr160e03x free account to unlock additional features at BleepingComputer. Toshiba drives also share some hddr160e03x laptop drives problems. Our hddr160e03x are USB powered and include an internal shock hddr160e03x and ramp loading technology to help keep your drive safe and your hddr160e03x mobile. Free download of Toshiba HDDR160E03X User Manual. Troubleshooting help from experts and users. Ask our large community for support. Need to find software driver for Toshiba 160GB USB 2.0 Portable External Hard Drive - HDDR160E03X? Toshiba hddr160e03x driver - the best free software for your home.

Don\'t ignore the lwIP docs. You need to use a FreeRTOS port layer so systhreadnew() calls xTaskCreate(). Xilinx have one, as do we, in fact if you use the SDK wizard to create a FreeRTOS project you have the option of adding lwIP into the mix too. Alternatively the main FreeRTOS download has an lwIP example for the Zynq (http://www.freertos.org/RTOS-Xilinx-Zynq.html) and we have our own multi-threaded TCP running on the Zynq too: http://www.freertos.org/FreeRTOS-Plus/FreeRTOSPlusTCP/TCPIPFATExamplesXilinxZynq.html

Zynq/FreeRTOS/lwip confusion

I guess this is why I am confused. I used the SDK to create a FreeRTOS project and I added in the lwip to the BSP settings and I generated the FreeRTOS hello world example that the SDK creates for me. So far that is all I have done and the examples passes.

I would think the Xilinx SDK would have handled this. But when I look at the lwipopt include file it has NOSYS set (and there is no mention of OSIS_FREERTOS). I would think both of those would need to be set for the FreeRTOS layer to be present that you mention. But then the lwip documentation talks about RAW API mode is for standalone without an OS. I got the impression that FreeRTOS port layer is only for the higher level socket/netconn API, not the RAW API. That is why I was thinking maybe for RAW API only I should use xTaskCreate() and run the lwip stuff in that task. Since it is single threaded it should not be creating or communicating with any other tasks.

I don\'t know if I have the liberty to use the FreeRTOS+TCP and I know I need to support multiple (x3) netif.

Zynq/FreeRTOS/lwip confusion

If you decide to use lwIP, why not the latest 2.0.0 version ?

FreeRTOS+TCP has recently been extended with the possibility to use multiple interfaces (NIC\'s). That works well with IPv4 sockets. That version has not been released officially, but anyone is welcome to try out this beta release.

FreeRTOS+TCP is simple to use as it only offers a BSD socket interface and API\'s. It does have optimisations like zero-copy send()/recv().

Zynq/FreeRTOS/lwip confusion

There is an example integration here, but it is VERY OLD: https://interactive.freertos.org/hc/en-us/community/posts/210028826-FreeRTOS-Win32-project-with-lwIP-web-server

\'Freertos\'

Zynq/FreeRTOS/lwip confusion

I did see that a 2.0.0 version of lwip was released but I thought it might be smarter to stick with what comes with the Xilinx SDK tools and with what they maintain rather than having to port something new.

Xilinx already provides the network driver layer (with DMA support) for the emacps and axiethernet MAC on 1.4.1. Does the FreeRTOS+TCP provide that currently for both those?

Zynq/FreeRTOS/lwip confusion

FreeRTOS+TCP does not yet support \'axiethernet\'. If you write a networkInterface.c for it, you\'ll will get free support from us :-)

Zynq/FreeRTOS/lwip confusion

Hi,This post just to say I ran into the same error type with Vivado 2016.4 and zynq\'s ps7_ethernet.

It seems that OSISFREERTOS definition is missing, but even when I manually define it (e.g. in lwipopts.h), I still obtain errors when creating a sample FreeRTOS LwIP echo server.

I\'ll try manually dealing with RAWAPI instead of SOCKETAPI for now, as the sample echo server code for FreeRTOS seems to exclusively use sockets.

There seems to be an issue in Xilinx SDK configuration of LwIP socket + FreeRTOS. If I can\'t get anywhere, I\'ll go to Xilinx forums for help.


[ Back to the top ][ About FreeRTOS ][ Privacy ][ Sitemap ][ Report an error on this page (with anti-spam) ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
...'>Zynq Freertos Socket(04.03.2020)
  • laserqplus.netlify.com〓 Zynq Freertos Socket
  • FreeRTOS Support Archive

    The FreeRTOS support forum is used to obtain active support directly from RealTime Engineers Ltd. In return for using our top quality software and services forfree, we request you play fair and do your bit to help others too! Sign upto receive notifications of new support topics then help where you can.




    This is a read only archive of threads posted to the FreeRTOS support forum.The archive is updated every week, so will not always contain the very latest posts.Use these archive pages to search previous posts. Use the Live FreeRTOS Forumlink to reply to a post, or start a new support thread.


    [FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [January 2017 Threads]

    During this work we discovered an interesting issue in the lwIP port for Xilinx Zynq. It seems to be using FreeRTOS in a rather inefficient way,.

    Zynq/FreeRTOS/lwip confusion

    Posted by krbvroc1 on January 18, 2017

    I am trying to come up to speed with this environment and have confused myself.I am using the FreeRTOS 8.2.3 and LWIP1.4.1 that comes with Vivado (came with my Zybo [Zynq 7010] trainer board).

    lwip says to use the RAW API for high performance TCP which I want to do. I planned on running the lwip it its own thread. The lwip RAW API examplesshow a simple mainloop design that would appear to chew up 100% CPU in a tight loop polling for packets to process. I would seem a better design to invoke the receiver from the DMA ISR (or use a task notification / semaphore) so it is interrupt / DMA driven.

    It seems that in order to use the RAW API I have to define my lwip with NO_SYS even though I am running with FreeRTOS. (That is how vivado configured it). I understand I will need to limit my interaction with lwip to a single thread and use FreeRTOS to communicate with the thread.

    The very first thing I notice is that lwip says to create its threads using a systhreadnew() call. If I am reading the lwip/Xilinx library correctly, that appears to be a wrapper for pthreadcreate().How is that going to work with FreeRTOS and using xTaskCreate() and trying to communicate using a queue or task notify between the two. On the surface it doesn\'t make sense and the whole thing is confusing. Or do I ignore the lwip docs and use xTaskCreate() for my single lwip task -- perhaps systhread_new is only when using socket/netconn API. I really just want to let lwip run in a single task and interactwith that task via the FreeRTOS stuff described in the book like task notifications, event groups, etc.

    Zynq/FreeRTOS/lwip confusion

    Not an expert of lwIP, but it was not originally designed to run multi-threaded, so what you are saying is not a surprise. We have run it that way too - so long as you only use the code from one thread it works.

    Register hddr160e03x free account to unlock additional features at BleepingComputer. Toshiba drives also share some hddr160e03x laptop drives problems. Our hddr160e03x are USB powered and include an internal shock hddr160e03x and ramp loading technology to help keep your drive safe and your hddr160e03x mobile. Free download of Toshiba HDDR160E03X User Manual. Troubleshooting help from experts and users. Ask our large community for support. Need to find software driver for Toshiba 160GB USB 2.0 Portable External Hard Drive - HDDR160E03X? Toshiba hddr160e03x driver - the best free software for your home.

    Don\'t ignore the lwIP docs. You need to use a FreeRTOS port layer so systhreadnew() calls xTaskCreate(). Xilinx have one, as do we, in fact if you use the SDK wizard to create a FreeRTOS project you have the option of adding lwIP into the mix too. Alternatively the main FreeRTOS download has an lwIP example for the Zynq (http://www.freertos.org/RTOS-Xilinx-Zynq.html) and we have our own multi-threaded TCP running on the Zynq too: http://www.freertos.org/FreeRTOS-Plus/FreeRTOSPlusTCP/TCPIPFATExamplesXilinxZynq.html

    Zynq/FreeRTOS/lwip confusion

    I guess this is why I am confused. I used the SDK to create a FreeRTOS project and I added in the lwip to the BSP settings and I generated the FreeRTOS hello world example that the SDK creates for me. So far that is all I have done and the examples passes.

    I would think the Xilinx SDK would have handled this. But when I look at the lwipopt include file it has NOSYS set (and there is no mention of OSIS_FREERTOS). I would think both of those would need to be set for the FreeRTOS layer to be present that you mention. But then the lwip documentation talks about RAW API mode is for standalone without an OS. I got the impression that FreeRTOS port layer is only for the higher level socket/netconn API, not the RAW API. That is why I was thinking maybe for RAW API only I should use xTaskCreate() and run the lwip stuff in that task. Since it is single threaded it should not be creating or communicating with any other tasks.

    I don\'t know if I have the liberty to use the FreeRTOS+TCP and I know I need to support multiple (x3) netif.

    Zynq/FreeRTOS/lwip confusion

    If you decide to use lwIP, why not the latest 2.0.0 version ?

    FreeRTOS+TCP has recently been extended with the possibility to use multiple interfaces (NIC\'s). That works well with IPv4 sockets. That version has not been released officially, but anyone is welcome to try out this beta release.

    FreeRTOS+TCP is simple to use as it only offers a BSD socket interface and API\'s. It does have optimisations like zero-copy send()/recv().

    Zynq/FreeRTOS/lwip confusion

    There is an example integration here, but it is VERY OLD: https://interactive.freertos.org/hc/en-us/community/posts/210028826-FreeRTOS-Win32-project-with-lwIP-web-server

    \'Freertos\'

    Zynq/FreeRTOS/lwip confusion

    I did see that a 2.0.0 version of lwip was released but I thought it might be smarter to stick with what comes with the Xilinx SDK tools and with what they maintain rather than having to port something new.

    Xilinx already provides the network driver layer (with DMA support) for the emacps and axiethernet MAC on 1.4.1. Does the FreeRTOS+TCP provide that currently for both those?

    Zynq/FreeRTOS/lwip confusion

    FreeRTOS+TCP does not yet support \'axiethernet\'. If you write a networkInterface.c for it, you\'ll will get free support from us :-)

    Zynq/FreeRTOS/lwip confusion

    Hi,This post just to say I ran into the same error type with Vivado 2016.4 and zynq\'s ps7_ethernet.

    It seems that OSISFREERTOS definition is missing, but even when I manually define it (e.g. in lwipopts.h), I still obtain errors when creating a sample FreeRTOS LwIP echo server.

    I\'ll try manually dealing with RAWAPI instead of SOCKETAPI for now, as the sample echo server code for FreeRTOS seems to exclusively use sockets.

    There seems to be an issue in Xilinx SDK configuration of LwIP socket + FreeRTOS. If I can\'t get anywhere, I\'ll go to Xilinx forums for help.


    [ Back to the top ][ About FreeRTOS ][ Privacy ][ Sitemap ][ Report an error on this page (with anti-spam) ]


    Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
    ...'>Zynq Freertos Socket(04.03.2020)