mirror of
https://github.com/cesanta/mongoose.git
synced 2024-11-24 19:19:00 +08:00
.. | ||
boot.c | ||
link.ld | ||
main.c | ||
Makefile | ||
mcu.h | ||
README.md | ||
syscalls.c |
Baremetal webserver on NUCLEO-F746ZG
This firmware uses experimental TCP/IP stack of the Mongoose Network Library, which implements the following:
- Implements HTTP server and SNTP time synchronisation
- No dependencies: no HAL, no CMSIS, no RTOS
- Hand-written mcu.h header based on a datasheet
- Interrupt-driven driver_stm32.c ethernet driver
- Blue LED blinky, based on SysTick interrupt
- User button handler, turns off/on green LED, based on EXTI, interrupt-driven
- HardFault handler that blinks red LED
- Debug log on UART3 (st-link)
Requirements
Usage
Plugin your Nucleo board into USB, and attach an Ethernet cable. To build and flash:
$ make clean flash
To see debug log, use any serial monitor program like picocom
at 115200 bps and configure it to insert carriage returns after line feeds:
$ picocom /dev/ttyACM0 -i -b 115200 --imap=lfcrlf
Benchmark
A quick comparison is made with several other implementations.
Note: IP
in the table below is the IP address printed on the console after
boot. The benchmark command is the same: siege -c 5 -t 5s http://IP
Zephyr | LWIP sockets | LWIP raw | MIP | |
---|---|---|---|---|
Requests per second | 3 | 16 | 286 | 1080 |
Firmware size | 117k (*) | 160k | 114k | 28k |
- Zephyr: uses Zehypr's RTOS and TCP stack, with Mongoose library on top,
source code.
(*) By default, Zephyr example is TLS-enabled. To compare sizes, a TLS-disabled
build was done by disabling TLS in
prj.conf
andCMakeLists.txt
- LWIP sockets: uses FreeRTOS and LWIP with sockets support, with Mongoose
library on top, source code.
built with
#define MG
inCore/main.c
- LWIP raw: uses FreeRTOS and LWIP without sockets, LWIP's httpd server,
source code.
built with
#define MG
line commented out inCore/main.c
- MIP: this repository