Starting Nut/OS. More...
Defines | |
#define | NUT_THREAD_MAINSTACK 1024 |
#define | NUT_THREAD_IDLESTACK 256 |
#define | NUTMEM_END (uintptr_t)(NUTMEM_START + NUTMEM_SIZE - 1U) |
Last memory address. | |
#define | HEAP_START &__heap_start |
#define | HEAP_SIZE ((uintptr_t) (NUTMEM_END - 256 - (uintptr_t) (&__heap_start))) |
Functions | |
void | NutAppMain (void *arg) |
void | NutIdle (void *arg) |
Idle thread. | |
void | NutInit (void) |
Nut/OS Initialization. | |
Variables | |
void * | __heap_start |
Starting Nut/OS.
#define NUT_THREAD_MAINSTACK 1024 |
#define NUTMEM_END (uintptr_t)(NUTMEM_START + NUTMEM_SIZE - 1U) |
#define HEAP_START &__heap_start |
#define HEAP_SIZE ((uintptr_t) (NUTMEM_END - 256 - (uintptr_t) (&__heap_start))) |
void NutAppMain | ( | void * | arg | ) |
void NutIdle | ( | void * | arg | ) |
Idle thread.
arg | Ignored by the idle thread. |
This function runs in an endless loop as a lowest priority thread.
Definition at line 229 of file nutinit.c.
References InitIrqHandler(), main, NUT_THREAD_MAINSTACK, NUT_THREAD_STACK_ADD, NUT_THREAD_STACK_MULT, NutIdleInit(), NutLoadConfig(), NutMainInit(), NutThreadCreate(), NutThreadDestroy(), NutThreadSetPriority(), NutThreadYield(), and NutTimerInit().
Referenced by NutInit().
void NutInit | ( | void | ) |
Nut/OS Initialization.
Initializes the memory management and the thread system and starts an idle thread, which in turn initializes the timer management. Finally the application's main() function is called.
Initializes the memory management and the thread system and starts an idle thread, which in turn initializes the timer management. Finally the application's main() function is called.
Depending on the compiler, different methods are used to execute this function before main() is called.
For ICCAVR the default crtatmega.o startup file is replaced by crtnut.o, which calls NutInit instead of main(). This is done by adding the following compiler options in the project:
-ucrtnut.o nutinit.o
crtnut.o should be replaced by crtnutram.o, if the application's variable space exceeds 4kB. For boards with RTL8019AS and EEPROM emulation (like Ethernut 1.3 Rev-G) use crtenut.o or crtenutram.o.
For AVRGCC this function is located in section .init8, which is called immediately before jumping to main(). NutInit is defined as:
void NutInit(void) __attribute__ ((naked)) __attribute__ ((section (".init8")));
Definition at line 274 of file nutinit.c.
References _O_CREAT, _O_TRUNC, _O_WRONLY, _NUTDEVICE::dev_init, _NUTDEVICE::dev_open, HEAP_SIZE, HEAP_START, MC_FMR, MC_FWS_2R3W, McuInit(), NUT_THREAD_IDLESTACK, NUT_THREAD_STACK_ADD, NUT_THREAD_STACK_MULT, NutBoardInit(), NutGetCpuClock(), NutHeapAdd, NutIdle(), NutThreadCreate(), outr, puts, and stdout.
void* __heap_start |