The C library includes a function declared as:
void |
This function is used to start an environment in which an ISO C style program can run in the most compatible way.
What this function does is to create a thread which will invoke main()
— normally
considered a program's entry point. In particular, it can
supply arguments to main()
using the CYGDAT_LIBC_ARGUMENTS
configuration option, and when returning from main()
,
or calling exit()
, pending stdio file output
is flushed and any functions registered with atexit()
are
invoked. This is all compliant with the ISO C standard in this respect.
This thread starts execution when the eCos scheduler
is started. If the eCos kernel package is not
available (and hence there is no scheduler), then cyg_iso_c_start()
will
invoke the main()
function directly, i.e.
it will not return until the main()
function
returns.
The main()
function should be defined
as the following, and if defined in a C++ file,
should have “C” linkage:
extern int |
The thread that is started by cyg_iso_c_start()
can
be manipulated directly, if you wish. For example you can suspend
it. The kernel C API needs a handle to do this, which is available
by including the following in your source code.
extern cyg_handle_t cyg_libc_main_thread; |
Then for example, you can suspend the thread with the line:
cyg_thread_suspend( cyg_libc_main_thread ); |
If you call cyg_iso_c_start()
and
do not provide your own main()
function,
the system will provide a main()
for you
which will simply return immediately.
In the default configuration, cyg_iso_c_start()
is
invoked automatically by the cyg_package_start()
function
in the infrastructure configuration. This means that in the simplest
case, your program can indeed consist of simply:
int main( int argc, char *argv[] ) { printf("Hello eCos\n"); } |
If you override cyg_package_start()
or cyg_start()
,
or disable the infrastructure configuration option CYGSEM_START_ISO_C_COMPATIBILITY
then you must ensure that you call cyg_iso_c_start()
yourself
if you want to be able to have your program start at the entry point
of main()
automatically.