diff TaskManager/kernel/main.cc @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/main.cc	Mon Nov 08 01:23:25 2010 +0900
@@ -0,0 +1,79 @@
+#include <stdlib.h>
+#include <string.h>
+#include <SDL.h>
+#include "TaskManager.h"
+
+/*!
+  User が書いた TMmain() (*名前は固定) を実行する
+ */
+
+/* User main function */
+extern int TMmain(TaskManager* manager, int argc, char *argv[]);
+
+static int profile = 0;
+
+/* Default TMend function */
+static void
+defaultTMend(TaskManager *manager) {
+}
+
+//TaskManager *manager;
+
+/*!
+  const char *usr_help_str を User 側で指定する必要がある
+  -help で出力される文字列
+ */
+const char *help_str = "\n\
+* Cerium program option *\n\
+  -help Print this message \n\
+  -cpu   Number of CPU (default 1) \n";
+
+extern const char *usr_help_str;
+
+int
+main(int argc, char *argv[])
+{
+    int machineNum = 1;
+
+    for (int i = 1; argv[i]; ++i) {
+        if (strcmp(argv[i], "-cpu") == 0) {
+            machineNum = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-p") == 0) {
+	    profile = 1;
+        }
+    }
+
+    TaskManager *manager = new TaskManager(machineNum);
+    manager->init();
+
+    manager->set_TMend(defaultTMend);
+
+    for (int i = 1; argv[i]; ++i) {
+        if (strcmp(argv[i], "-help") == 0) {
+	    if (usr_help_str) {
+		manager->get_scheduler()->printf("%s", usr_help_str);
+	    }
+	    manager->get_scheduler()->printf("%s", help_str);	    
+	    return EXIT_SUCCESS;
+        }
+    }
+    if (profile)
+	manager->start_profile();
+    if (TMmain(manager, argc, argv) < 0) {
+	goto FINISH;
+    }
+
+    manager->run();
+
+    (manager->tm_end)(manager);
+    if (profile)
+	manager->show_profile();
+    manager->run(); // tm_end/show_profile may create a Task..
+
+FINISH:
+    delete manager;
+
+    return EXIT_SUCCESS;
+}
+
+/* end */