Keil Logo

Technical Support

On-Line Manuals

RL-ARM User's Guide (MDK v4)

RL-RTX RL-FlashFS RL-TCPnet TCP Socket Opening TCP Connection TCP Active Open TCP Passive Open Sending TCP Data Example for Sending Data Multiple TCP Connections UDP Socket Opening UDP Connection Sending UDP Data When DHCP Enabled When ARP Cache Empty Example for Sending Data IP Multicasting Multiple UDP Connections Configuring RL-TCPnet Static Configuration System Definitions Ethernet Network Interface PPP Network Interface SLIP Network Interface UDP Socket TCP Socket BSD Socket HTTP Server Telnet Server TFTP Server TFTP Client FTP Server FTP Client DNS Client SMTP Client SNMP Agent SNTP Client Error Function Runtime Configuration Library Files Using RL-TCPnet Stand Alone With RTX Kernel Event Driven Operation IP Address Assignment Ethernet Interface PPP Interface SLIP Interface Localhost Applications HTTP Server Script Language CGI Functions Ajax Support Using XML XML Example How it works SOAP Support SOAP Interface Large POST Messages Web Pages Default Page Error Pages Web on SD Card Web Update File System Interface Http Caching How it works Internal Web External Web Multi-user Authentication Using RAM File System FCARM File Converter PRINT Directive NOPRINT Directive PAGEWIDTH Directive PAGELENGTH Directive ROOT Directive Telnet Server Command Line Interface Multi-user Authentication Sending Reply Message Short Reply Long Reply Continuous Screen Update TFTP Server File System Interface TFTP Client File System Interface FTP Server File System Interface Multi-user Authentication Supported Commands FTP Client File System Interface SMTP Client SNMP Agent MIB Database MIB Interface MIB Entry MIB Table DNS Resolver Starting DNS Device Drivers Ethernet Driver Interrupt Mode Modem Driver Serial Driver Using Serial Link Cable Connection Modem Connection Windows Dial-up Add Direct Serial Link New Dial-up Connection Configure PPP Dial-up Configure SLIP Dial-up Debugging Enabling Debug Debug Level Redirecting Output Function Overview BSD Routines CGI Routines Ethernet Routines FTP Routines HTTP Routines IGMP Routines Miscellaneous Routines Modem Routines PPP Routines Serial Routines SLIP Routines SMTP Routines SNMP Routines System Functions TCP Routines Telnet Routines TFTP Routines UDP Routines RL-CAN RL-USB Example Programs Library Reference Appendix

Runtime Configuration

Each embedded ethernet device must have a unique MAC address, IP address, and host name. This is very important when multiple devices are connected to the same LAN. Otherwise, network collisions might occur, network communications on local LAN might be disturbed, and the system might not work.

You can use the same application code for serial production of embedded devices. The runtime configuration feature allows you to read configuration parameters from the EEPROM and configure the ethernet network interface for each embedded device differently.

  • The MAC address is written to the ethernet controller registers when the controller initializes (when calling the function init_TcpNet()). For this reason, the variable own_hw_adr[6] must be set before the system initializes.
  • The ethernet interface configuration parameters must be set after the system initializes. The structure localm[0] can simply be overwritten with new values.
  • The local host name can be changed by overwriting the default value, which is set in the Net_Config.c system configuration file. The local host name accesses the embedded system by the name instead of the IP address.
  • Dynamic Host Configuration can be disabled at runtime. In this case, user provided network parameters defined in the Net_Config.c configuration file are used instead. The DHCP Client can be disabled by calling the function dhcp_disable() after the system initializes. The DHCP Client must be enabled in the configuration so that the DHCP Client code links to the application code.

Here is an example of dynamic system configuration:

#include <Net_Config.h>

extern U8 own_hw_adr[];
extern U8 lhost_name[];
extern LOCALM localm[];

/* The following values are read out of EEPROM. */
U8 const mac_adr[6] = { 0,1,2,50,60,70 };
LOCALM const ip_config = {
  { 192,168,0,150 },             // IP address
  { 192,168,0,1 },               // Default Gateway
  { 255,255,255,0 },             // Net mask
  { 194,25,2,129 },              // Primary DNS server
  { 194,25,2,130 }               // Secondary DNS server
U8 const DHCP_mode = 0;
U8 const dev_name[16] = { "Keil_MCB" };

void main (void) {

  /* Change the MAC address */
  mem_copy (own_hw_adr, (U8 *)mac_adr, 6);

  init_TcpNet ();

  /* Change the host name */
  str_copy (lhost_name, (U8 *)dev_name);

  /* Change the IP address if dynamic mode is not used */
  if (DHCP_mode == 0) {
    dhcp_disable ();
    mem_copy ((U8 *)&localm[NETIF_ETH], (U8 *)&ip_config, sizeof(ip_config));

  while (1) {
    timer_poll ();
    main_TcpNet ();

In this example, the new parameters are defined in the code. However, in your application, this would be the network parameters read out from the EEPROM or NV RAM.


  • You can change the localm[NETIF_ETH] - ethernet IP parameters also when the system is working. See the HTTP_demo example. The ethernet controller MAC address can only be changed when the system starts. It is not advisable to change it later.
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.