GadgetSeed  0.9.6
main.c
[詳解]
1 /** @file
2  @brief GadgetSeed メイン
3 
4  @date 2009.01.10
5  @author Takashi SHUDO
6 
7  @mainpage GadgetSeedについて
8 
9  GadgetSeedは組み込み機器向けのマルチタスクOSです。
10 
11  GadgetSeedは現在、以下のハードウェアで動作します。
12 
13  | ハードウェア | MCU | アーキテクチャ |
14  |-------------------|:--------------|:---------------|
15  | 32F769IDISCOVERY | STM32F769NIH6 | ARM Cortex-M7 |
16  | 32F746GDISCOVERY | STM32F746NGH6 | ARM Cortex-M7 |
17  | 32F469IDISCOVERY | STM32F469NIH6 | ARM Cortex-M4 |
18  | NUCLEO-F411RE | STM32F401RET6 | ARM Cortex-M4 |
19  | NUCLEO-L152RE | STM32L152RET6 | ARM Cortex-M3 |
20 
21  ---
22  @section feature 特徴
23 
24  GadgetSeedは以下の機能があります。
25 
26  - マルチタスクカーネル - @ref task_syscall 参照
27  - デバッグを支援するコマンドシェル - @ref command_shell 参照
28  - 標準化されたデバイスドライバAPI - @ref device_driver 参照
29  - メモリ管理 - @ref memory_manage 参照
30  - 日付時刻API - @ref date_time 参照
31  - 標準化されたシステムイベント - @ref system_event 参照
32  - グラフィックス描画API - @ref graphics 参照
33  - 文字フォント描画API - @ref font_draw 参照
34  - ファイルシステムに FatFS 対応 - @ref file_system 参照
35  - LwIP TCP/IPプロトコルスタックに対応 - @ref network 参照
36 
37  @page configration コンフィグレーション
38 
39  GadgetSeed をビルドするには、最初にコンフィグレーションを行う必要があります。
40 
41  コンフィグレーションとは GadgetSeed のソースツリーのルートディレクトリに以下のファイルを作成することです。
42 
43  ```
44  config.mk
45  ```
46 
47  config.mk は GadgetSeed を実行するハードウェア(システム)と組み込まれるアプリケーションが記載されています。
48 
49  config.mk は make 実行でメニューよりシステム及びアプリケーションを選択することで作成することができます。
50 
51  以下に、 config.mk の例を示します。
52 
53  ```
54  $ cat config.mk
55  SYSTEM_CONFIG = 32F769IDISCOVERY
56  APPLICATION_CONFIG = musicplay_hr
57  ```
58 
59  config.mk は以下の2つの項目を記載します。
60 
61  | 項目 | 内容 |
62  |:--------------------------|:------------------------------|
63  | SYSTEM_CONFIG | 動作させるシステム |
64  | APPLICATION_CONFIG | 実行するアプリケーション |
65 
66 
67  ---
68  @section system_config システムコンフィグ
69 
70  SYSTEM_CONFIG には、ソースツリーの以下のディレクトリにあるファイルより、1つのファイル名を拡張子(.conf)を除いて記述します。
71 
72  ```
73  configs/systems
74  ```
75 
76  上記のディレクトリの各ファイルには、各システムに対応したCPUアーキテクチャや、デバイスドライバ等が記載されています。
77 
78 
79  ---
80  @section apprication_config アプリケーションコンフィグ
81 
82  APPLICATION_CONFIG には、ソースツリーの以下のディレクトリにあるファイルより、1つのファイル名を拡張子(.conf)を除いて記述します。
83 
84  ```
85  configs
86  ```
87 
88  上記のディレクトリの各ファイルには、各アプリケーションが必要とする GadgetSeed のコンポーネントやライブラリ等が記載されています。
89 
90 
91  ---
92  @section prepare_build ビルドの準備
93 
94  config.mk ファイル作成後 make コマンドを実行すると以下のファイルが作成されます。
95 
96  | ファイル名 | 内容 |
97  |:--------------------------|:----------------------------------------------------------------------|
98  | include/sysconfig.h | GadgetSeed コンフィグレーションの為のC言語マクロ定義ヘッダ |
99  | include/asm.h | GadgetSeed ターゲットアーキテクチャのヘッダファイルシンボリックリンク |
100  | targetconfig.mk | GadgetSeed ビルドのための Makefile インクルードファイル |
101 
102 
103  ---
104  @section config_item コンフィグレーション項目
105 
106  GadgetSeed 各ソースファイルのコンフィグレーション項目は include/sysconfig.h に記載されたC言語マクロ定義により設定されます。
107  各コンフィグレーションマクロには接頭詞 GSC_ が付きます。
108  configs/\*.conf および configs/systems/\*.conf ファイルの、各コンフィグレーション項目には GSC_ は記載しません。
109 
110  以下のコマンドで GadgetSeed で定義されているコンフィグレーション項目の一覧を表示することができます。
111 
112  ```
113  sh tools/configlist.sh
114  ```
115 */
116 
117 #include "sysconfig.h"
118 #include "gadgetseed.h"
119 #include "system.h"
120 #include "shell.h"
121 #include "task/syscall.h"
122 #include "datetime.h"
123 #include "tkprintf.h"
124 
125 #ifdef GSC_COMP_ENABLE_TCPIP
126 #include "net.h"
127 #endif
128 
129 extern void GSC_APP_STARTUP();
130 extern void GSC_APP_STARTUP2();
131 extern void GSC_APP_STARTUP3();
132 extern void GSC_APP_STARTUP4();
133 
134 int main(int argc, char *argv[])
135 {
136  init_gs(&argc, &argv);
137 
138  return 0;
139 }
140 
141 /**
142  @brief タスクコンテキストで実行される初期化処理
143 */
144 void startup(void)
145 {
147 
148 #ifdef GSC_COMP_ENABLE_TCPIP /// $gsc TCP/IPネットワークを有効にする
149  startup_network();
150 #endif
151 
152 #ifdef GSC_COMP_ENABLE_SHELL /// $gsc コマンドシェルを有効にする
153  startup_shell();
154 #endif
155 
156 #ifdef GSC_APP_STARTUP /// $gsc アプリケション起動関数名
157  GSC_APP_STARTUP();
158 #endif
159 
160 #ifdef GSC_APP_STARTUP2 /// $gsc アプリケション起動関数名(2番めに起動)
161  GSC_APP_STARTUP2();
162 #endif
163 
164 #ifdef GSC_APP_STARTUP3 /// $gsc アプリケション起動関数名(3番めに起動)
165  GSC_APP_STARTUP3();
166 #endif
167 
168 #ifdef GSC_APP_STARTUP4 /// $gsc アプリケション起動関数名(4番めに起動)
169  GSC_APP_STARTUP4();
170 #endif
171 
172 #ifdef GSC_DEV_ENABLE_RTC
173 #ifdef GSC_RTC_DATETIME_SYNC_CYCLE /// $gsc RTCとカーネル時刻の同期計算周期(msec)
174  while(1) {
175  // 定期的にRTCからシステム時刻を同期させる
176  task_sleep(GSC_RTC_DATETIME_SYNC_CYCLE);
177  adjust_systime();
178  }
179 #endif
180 #endif
181 }
コマンドシェル
void task_sleep(unsigned int stime)
タスクを指定時間タイマ待ち状態にする
Definition: syscall_api.c:290
Network API
日付時刻
カーネル用機能限定printf
GadgetSeed カーネル
システムコール
void init_system_process(void)
タスク起動後の初期化処理
void startup(void)
タスクコンテキストで実行される初期化処理
Definition: main.c:144
システム固有初期化関連
void init_gs(int *argc, char ***argv)
カーネルを初期化する
Definition: init.c:110