What are none, nohost and semihost libraries?
The Code Red tools suite is supplied with several 'stubs' that form the very bottom of the C library and include certain low-level functions used by other functions in the library.
Each C library (Redlib and Newlib) is provided in three variants, with each variant providing a differing set of these stubs, and hence providing differing levels of functionality. The libraries are named as follows:
- Redlib (none)
- Redlib (nohost)
- Redlib (semihost)
- Newlib (none)
- Newlib (nohost)
- Newlib (semihost)
The functionality provided in each variant is as follows:
This library variant provides implementation of all functions, including file I/O. The file I/O will be directed through the debugger and will be performed on the host system. For example, printf/scanf will use the debugger console window and fread/fwrite will operate on files on the host system. Note that this emulated I/O is slow and can only be used when debugging.
For more information on the semihost variants of the library, please see the FAQ Using printf in your applications (Semihosting).
This library variant provides the string and memory handling functions and some file-based I/O functions. However, it assumes that you have no debugging host system, thus any file I/O will do nothing.
This is literally no stub and has the smallest memory footprint. It excludes low-level functions for all file-based I/O and some string and memory handling functions.
In many embedded microcontroller applications it is possible to use the None variant (ie no low level stubs) by careful use of the C library.