/*---------------------------------------------------------------------------*
Project: Horizon
File: init_StartUp.h
Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Rev: 27876 $
*---------------------------------------------------------------------------*/
/*! @file
@brief StartUp に関するAPI の宣言
*/
#ifndef NN_INIT_INIT_STARTUP_H_
#define NN_INIT_INIT_STARTUP_H_
#ifdef __cplusplus
extern "C" {
#endif
/*!
@addtogroup init init
@{
*/
/*!
@defgroup init_StartUp StartUp
@brief StartUp に関するAPI
nn/init/init_StartUp.h
@{
*/
/*!
@defgroup about_StartUp StartUp APIについて
@brief アプリケーションのスタートアップに関するAPI です。
アプリケーションの起動は下記の流れで行われます。
@li BSS 領域の初期化。
@li nninitSystem の呼び出し。
@li nninitStartUp の呼び出し。
@li スタティックイニシャライザの呼び出し。
@li nninitSetup の呼び出し。
@li nnMain の実行。
nninitStartUp は weak シンボルでコンパイルされているため、
ユーザ独自の定義に書き換えが可能です。
これらの関数は C++ のスタティックイニシャライザの呼び出しよりも先に呼ばれるため、
自明でないコンストラクタを持つクラスの static に置かれたインスタンスを使うことはできません。
そのため呼べる関数は大きく制限されています。
ライブラリにある関数のうち、スタティックイニシャライザより前に呼ぶことのできる関数は以下のもののみです。
@li @ref nn::init::InitializeAllocator
@li @ref nn::os::InitializeDeviceMemory
これらの関数以外を呼んだ場合の動作は保障されません。
独自の処理を書く場合も、十分に注意をする必要があります。
@{
@}
*/
/*!
@brief アプリケーションのエントリ関数です。
@return なし。
*/
void nnMain(void);
/*!
@brief アプリケーションのスタートアップルーチンです。
nnMain が呼ばれる前に実行されます。
デフォルトの実装は weak シンボルでコンパイルされているため、ユーザが上書きをすることができます。
デフォルトの実装では、以下のことをします。
@li @ref nn::init::InitializeAllocator (8MB);
@li @ref nn::os::InitializeDeviceMemory ();
オーバライドする場合は、基本的に os ライブラリの初期化とヒープの初期化以外をしないことを、
強くお勧めします。
@return なし。
*/
void nninitStartUp(void);
typedef void (*nninitStaticInitFunc)(void);
void nninitCallStaticInitializers(void);
void nninitSetup(void);
void nninitSetupDaemons(void);
void nninitSystem(void);
/*!
@}
*/
/*!
@}
*/
#ifdef __cplusplus
} // extern "C"
#endif
#endif // NN_INIT_INIT_STARTUP_H_