Edit: there is now a GitHub project: https://github.com/TG9541/stm8ef-modbus
One STM8 eForth needs something that I had planned to implement for a long time: a basic MODBUS server with RTU communication (serial binary protocol).
Implementing a MODBUS RTU server requires some of the following:
- understanding MODBUS vernacular,
- writing test code (with JAMOD and libmodbus.py),
- ISR timing validation, and
- fixing odd bugs
I wrote the UART ISR code in Forth: on a 8bit µC that's fast enough for 115200 baud full-duplex, or for 240400 baud half-duplex MODBUS RTU!
The diagram shows full-duplex mode at 115200 baud. The ISR do buffer bounds checking and media access control (including MODBUS timing requirements).
A Forth "idle task" builds the MODBUS response. The "background task" is free for local logic (i.e. following the input-process-output pattern).
Right now some simple MODBUS FCs are implemented (FC01 & FC05, some of FC02 & FC16). More FCs will be implemented when the need arises.
The code is very compact: the basic implementation is in 300 lines of Forth code (including debug code). Before optimizations 1.4K Flash are needed .
A (long) discussion around the development is here.