]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/main_lwIP.c
Completely re-generate the Zynq 7000 demo using the 2016.1 SDK tools.
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo / src / lwIP_Demo / main_lwIP.c
diff --git a/FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/main_lwIP.c b/FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/main_lwIP.c
new file mode 100644 (file)
index 0000000..efabe73
--- /dev/null
@@ -0,0 +1,188 @@
+/*\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
+\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/******************************************************************************\r
+ * NOTE 1:  This project provides three demo applications.  A simple blinky\r
+ * style project, a more comprehensive test and demo application, and an\r
+ * lwIP example.  The mainSELECTED_APPLICATION setting in main.c is used to\r
+ * select between the three.  See the notes on using mainSELECTED_APPLICATION\r
+ * in main.c.  This file implements the simply blinky style version.\r
+ *\r
+ * NOTE 2:  This file only contains the source code that is specific to the\r
+ * basic demo.  Generic functions, such FreeRTOS hook functions, and functions\r
+ * required to configure the hardware are defined in main.c.\r
+ ******************************************************************************\r
+ *\r
+ * The lwIP example can be configured to use either a static or dynamic IP\r
+ * address:\r
+ *    + To use a dynamically allocated IP address set LWIP_DHCP to 1 in\r
+ *      lwipopts.h and connect the target to a network that includes a DHCP\r
+ *      server.  The obtained IP address is printed to the UART console.\r
+ *    + To use a static IP address set LWIP_DHCP to 0 in lwipopts.h and set\r
+ *      the static IP address using the configIP_ADDR0 to configIP_ADDR3\r
+ *      constants at the bottom of FreeRTOSConfig.h.  Constants used to define\r
+ *      a netmask are also located at the bottom of FreeRTOSConfig.h.\r
+ *\r
+ * When connected correctly the demo uses the lwIP sockets API to create\r
+ * a FreeRTOS+CLI command console, and the lwIP raw API to create a basic HTTP\r
+ * web server with server side includes that generate dynamic run time web\r
+ * pages.  See http://www.freertos.org/RTOS-Xilinx-Zynq.html for more\r
+ * information.\r
+ *\r
+ * To connect to FreeRTOS+CLI, open a command prompt and enter "telnet <ipaddr>"\r
+ * where <ipaddr> is the IP address of the target.  Once connected type "help"\r
+ * to see a list of registered commands.  Note this example does not implement\r
+ * a real telnet server, it just uses the telnet port number to allow easy\r
+ * connection using telnet tools.\r
+ *\r
+ * To connect to the http server simply type the IP address of the target into\r
+ * the address bar of a web browser.\r
+ *\r
+ */\r
+\r
+/* Kernel includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "timers.h"\r
+\r
+/* Standard demo includes. */\r
+#include "partest.h"\r
+\r
+/* lwIP includes. */\r
+#include "lwip/tcpip.h"\r
+\r
+/* The rate at which data is sent to the queue.  The 200ms value is converted\r
+to ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainTIMER_PERIOD_MS                    ( 200 / portTICK_PERIOD_MS )\r
+\r
+/* The LED toggled by the Rx task. */\r
+#define mainTIMER_LED                          ( 0 )\r
+\r
+/* A block time of zero just means "don't block". */\r
+#define mainDONT_BLOCK                         ( 0 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * The callback for the timer that just toggles an LED to show the system is\r
+ * running.\r
+ */\r
+static void prvLEDToggleTimer( TimerHandle_t pxTimer );\r
+\r
+/*\r
+ * Defined in lwIPApps.c.\r
+ */\r
+extern void lwIPAppsInit( void *pvArguments );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void main_lwIP( void )\r
+{\r
+TimerHandle_t xTimer;\r
+\r
+       /* Init lwIP and start lwIP tasks. */\r
+       tcpip_init( lwIPAppsInit, NULL );\r
+\r
+       /* A timer is used to toggle an LED just to show the application is\r
+       executing. */\r
+       xTimer = xTimerCreate(  "LED",                                  /* Text name to make debugging easier. */\r
+                                                       mainTIMER_PERIOD_MS,    /* The timer's period. */\r
+                                                       pdTRUE,                                 /* This is an auto reload timer. */\r
+                                                       NULL,                                   /* ID is not used. */\r
+                                                       prvLEDToggleTimer );    /* The callback function. */\r
+\r
+       /* Start the timer. */\r
+       configASSERT( xTimer );\r
+       xTimerStart( xTimer, mainDONT_BLOCK );\r
+\r
+       /* Start the tasks and timer running. */\r
+       vTaskStartScheduler();\r
+\r
+       /* If all is well, the scheduler will now be running, and the following\r
+       line will never be reached.  If the following line does execute, then\r
+       there was either insufficient FreeRTOS heap memory available for the idle\r
+       and/or timer tasks to be created, or vTaskStartScheduler() was called from\r
+       User mode.  See the memory management section on the FreeRTOS web site for\r
+       more details on the FreeRTOS heap http://www.freertos.org/a00111.html.  The\r
+       mode from which main() is called is set in the C start up code and must be\r
+       a privileged mode (not user mode). */\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvLEDToggleTimer( TimerHandle_t pxTimer )\r
+{\r
+       /* Prevent compiler warnings. */\r
+       ( void ) pxTimer;\r
+\r
+       /* Just toggle an LED to show the application is running. */\r
+       vParTestToggleLED( mainTIMER_LED );\r
+}\r
+\r
+/*-----------------------------------------------------------*/\r