Stand Alone
RL-TCPnet is designed as a stand alone TCP/IP Operating System. This means it does not need any external RTOS or File System to run. It has an integrated tiny task scheduler that manages timeouts, events, and internal tasks. Each application (TCP, UDP, and Network Interface) is treated as a separate internal task.
A framework for a stand alone application basically needs to call a few system functions:
- init_TcpNet function needs to be called after the system starts to initialize the OS.
- init_user is the function that initializes your application. It can be placed before or after the call to init_TcpNet. If you call your initialization code before calling init_TcpNet, you cannot call any OS function from your init function (because the OS is not yet initialized).
- main_TcpNet function needs to be called frequently to properly handle system events and timeouts. It is normally placed in an endless loop.
- main_user is the main thread of your application. You must design it as a state machine. On each call to this function, events and timeouts must be processed according the current state of the application, and then the function should return. It should never run in an endless loop waiting for a event as this blocks the whole OS, and the system might stop functioning.
- timer_tick function is needed to generate timer ticks for the OS. This function can be called from the function that polls for the timer timeout or from a timer interrupt function. It is used to synchronize internal timeout processing to a system tick timer. It is very important that this function be called at regular time intervals.
Here is a framework for a stand alone application:
#include <RTL.h>
static void timer_poll () {
if (T1IR & 1) {
T1IR = 1;
/* Timer tick every 100 ms */
timer_tick ();
}
}
void main (void) {
init_TcpNet ();
init_user ();
while (1) {
/* Poll for a system tick timer overflow. */
timer_poll ();
main_TcpNet ();
/* A function call to your application. */
main_user ();
}
}
Note
- Avoid using waiting loops in your application because the RTL-TCPnet system is blocked if any application function runs in a loop.