Beispiel #1
0
/*
 *  OS�̋N��
 */
void
StartOS(AppModeType mode)
{
	volatile FP startuphook_adr;

	LOG_STAOS_ENTER(mode);

	/*
	 *  �A�v���P�[�V�������[�h�̐ݒ�
	 */
	appmode = mode;

	/*
	 *  �^�[�Q�b�g�ˑ��̏�����
	 */
	cpu_initialize();
	sys_initialize();
	tool_initialize();

	/*
	 *  �e���W���[���̏�����
	 */
	object_initialize();

	/*
	 *  StartupHook �̌Ăяo��
	 *  
	 *  C�����̋K�i�ł͊֐��̃A�h���X��0�ɂȂ��Ȃ��Ƃ����O�񂩂�,
	 *  �R���p�C���̍œK���ɂ���StartupHook�̃A�h���X���蕪����
	 *  �폜�����Ă��܂��ꍇ�����邽��, volatile�w�肵�����[�J���ϐ���
	 *  �A�h���X���������Ă��画�肵�Ă����D
	 *
	 */
	startuphook_adr = (FP)StartupHook;
	
	if (startuphook_adr != NULL) {
		/*
		 *  StartupHook �̒��ŁCSuspendAllInterrupts ���Ă΂�
		 *  �Ă������v�Ȃ悤�ɁCsus_all_cnt �����[���ɂ��Ă����D
		 */
		callevel = TCL_STARTUP;
		sus_all_cnt++;
		StartupHook();
		sus_all_cnt--;
	}
	callevel = TCL_TASK;

	LOG_STAOS_LEAVE();

	start_dispatch();
}
Beispiel #2
0
/*
 *  OSの起動
 */
void
StartOS(AppModeType mode)
{
	volatile FP startuphook_adr;

	LOG_STAOS_ENTER(mode);

	/*
	 *  アプリケーションモードの設定
	 */
	appmode = mode;

	/*
	 *  ターゲット依存の初期化
	 */
	cpu_initialize();
	sys_initialize();
	tool_initialize();

	/*
	 *  各モジュールの初期化
	 */
	object_initialize();

	/*
	 *  StartupHook の呼び出し
	 *  
	 *  C言語の規格では関数のアドレスは0にならないという前提から,
	 *  コンパイラの最適化によりStartupHookのアドレス判定分岐が
	 *  削除されてしまう場合があるため, volatile指定したローカル変数に
	 *  アドレスを代入してから判定している.
	 *
	 */
	startuphook_adr = (FP)StartupHook;
	
	if (startuphook_adr != NULL) {
		/*
		 *  StartupHook の中で,SuspendAllInterrupts が呼ばれ
		 *  ても大丈夫なように,sus_all_cnt を非ゼロにしておく.
		 */
		callevel = TCL_STARTUP;
		sus_all_cnt++;
		StartupHook();
		sus_all_cnt--;
	}
	callevel = TCL_TASK;

	LOG_STAOS_LEAVE();
	start_dispatch();
}
Beispiel #3
0
/*
 *  OS Start
 */
void
StartOS(AppModeType mode)
{
    volatile FP startuphook_adr;

    LOG_STAOS_ENTER(mode);

    /*
     *  Store
     */
    appmode = mode;

    /*
     *  Do the needed initialize
     */
    cpu_initialize();  /* implemented in cpu_context.c */
    sys_initialize();  /* user defined interface */
    tool_initialize(); /* user defined interface */

    /*
     *  Initialize OSEK OS objects.
     */
    object_initialize();

    /*
     *  StartupHook の呼び出し
     *
     *  C言語の規格では関数のアドレスは0にならないという前提から,
     *  コンパイラの最適化によりStartupHookのアドレス判定分岐が
     *  削除されてしまう場合があるため, volatile指定したローカル変数に
     *  アドレスを代入してから判定している.
     *
     */
    startuphook_adr = (FP)StartupHook;

    if (startuphook_adr != NULL) {
        /*
         *  StartupHook の中で,SuspendAllInterrupts が呼ばれ
         *  ても大丈夫なように,sus_all_cnt を非ゼロにしておく.
         */
        callevel = TCL_STARTUP;
        sus_all_cnt++;
        StartupHook();
        sus_all_cnt--;
    }
    callevel = TCL_TASK;

    LOG_STAOS_LEAVE();
    start_dispatch();
}