-
Notifications
You must be signed in to change notification settings - Fork 2
/
c2a_core_main.c
83 lines (75 loc) · 3.32 KB
/
c2a_core_main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#pragma section REPRO
#include "c2a_core_main.h"
#include "./library/git_revision.h"
#include "./library/print.h"
#include "./library/endian.h"
#include "./system/task_manager/task_dispatcher.h"
#include "./system/application_manager/app_manager.h"
#include "./system/event_manager/event_manager.h"
#include "./system/time_manager/time_manager.h"
#include "./system/mode_manager/mode_manager.h"
#include "./system/watchdog_timer/watchdog_timer.h"
#include "./tlm_cmd/packet_handler.h"
#include "./tlm_cmd/block_command_table.h"
#include "./tlm_cmd/command_analyze.h"
#include "./tlm_cmd/telemetry_frame.h"
#include <src_user/applications/app_registry.h>
#include <src_user/settings/build_settings.h>
// git revisionをコードに埋め込む
const char GIT_REV_CORE[41] = GIT_REVISION_C2A_CORE;
const uint32_t GIT_REV_CORE_SHORT = GIT_REVISION_C2A_CORE_SHORT;
const char GIT_REV_USER[41] = GIT_REVISION_C2A_USER;
const uint32_t GIT_REV_USER_SHORT = GIT_REVISION_C2A_USER_SHORT;
void C2A_core_init(void)
{
// エンディアンの設定が正しいかの確認
#ifdef IS_LITTLE_ENDIAN
if (ENDIAN_detect_system_endian() != ENDIAN_TYPE_LITTLE)
#else
if (ENDIAN_detect_system_endian() != ENDIAN_TYPE_BIG)
#endif
{
Printf("WARNING: ENDIAN MISMATCH BETWEEN BUILD SETTINGS AND RUNTIME!\n");
}
else
{
Printf("C2A_init: Endian OK.\n");
}
// C2A の初期化
CA_initialize(); // Cmd Analyze
Printf("C2A_init: CA_initialize done.\n");
TF_initialize(); // TLM frame
Printf("C2A_init: TF_initialize done.\n");
PH_init(); // Packet Handler
Printf("C2A_init: PH_init done.\n");
EM_initialize(); // Event Manager.App Managerより先に初期化するべき
Printf("C2A_init: EM_initialize done.\n");
AM_initialize(); // App Manager
Printf("C2A_init: AM_initialize done.\n");
AR_load_initial_settings(); // App Registry
Printf("C2A_init: AR_load_initial_settings done.\n");
AM_initialize_all_apps(); // App Managerに登録されてる全アプリの初期化
Printf("C2A_init: AM_initialize_all_apps done.\n");
BCT_initialize(); // Block Cmd Table
// BC_load_defaults() もここで呼ばれる
Printf("C2A_init: BCT_initialize done.\n");
MM_initialize(); // Mode Manager
// ここでSTART UP to INITIALのモード遷移も行われる
Printf("C2A_init: MM_initialize done.\n");
TDSP_initialize(); // Task Dispatcher
// MM初期化よりもあとに行われる必要がある
Printf("C2A_init: TDSP_initialize done.\n");
// DebugOutInit(); // Debugのinit // LVTTL UART ch1での出力.邪魔なのでPrintfの中身とともに無効化 (2019-04-09)
// Printf("C2A_init: DebugOutInit done.\n");
TMGR_down_initializing_flag();
}
void C2A_core_main(void)
{
// ここでいうtask dispatcherは,TL0とかではなく,
// task listのBlockCommandをdispatchしている.
// TL0などのPLをdispatchしているのは,tlc_dispatcher @ App/timeline_command_dispatcher である.
// なお,PL (packetList) のPL_infoとは,順次dispatchしていくパケットを時系列にならべたlinked listである.
TDSP_execute_pl_as_task_list();
WDT_clear_wdt();
}
#pragma section