22 const char syscall_name[][16] = {
59 void syscall_inthdr(
unsigned int intnum,
void *sp)
61 if(syscall_cnt == 0) {
62 SYSERR_PRINT(
"!!! Invalid syscall ?\n");
68 DKPRINTF(0x01,
"-- SYSCALL --\n");
69 DKPRINTF(0x01,
"task \"%s\"\n", run_task->
name);
70 DKPRINTF(0x01,
"SP = %p\n", sp);
71 DKPRINTF(0x01,
"type = %s(%d)\n", syscall_name[run_task->syscall.
type],
72 run_task->syscall.
type);
73 DKPRINTF(0x01,
"param = %p\n", run_task->syscall.
param);
78 DKPRINTF(0x01,
"systime = %ld\n", systime);
82 switch(run_task->syscall.
type) {
83 case SYSCALL_TASK_ADD:
88 DKPRINTF(0x01,
"SC param = %p\n", param);
89 DKPRINTF(0x01,
"SC func = %p\n", param->func);
90 DKPRINTF(0x01,
"SC name = \"%s\"\n", param->name);
91 DKPRINTF(0x01,
"SC priority= %d\n", param->priority);
92 DKPRINTF(0x01,
"SC stack= %p\n", param->stack);
93 DKPRINTF(0x01,
"SC stack_size = %d\n", param->stack_size);
94 DKPRINTF(0x01,
"SC arg = %d\n", param->arg);
97 SYSERR_PRINT(
"type=%d param=%p\n",
98 run_task->syscall.
type,
99 run_task->syscall.
param);
113 case SYSCALL_TASK_EXEC:
118 DKPRINTF(0x01,
"SC param = %p\n", param);
119 DKPRINTF(0x01,
"SC func = %p\n", param->func);
120 DKPRINTF(0x01,
"SC name = \"%s\"\n", param->name);
121 DKPRINTF(0x01,
"SC priority= %d\n", param->priority);
122 DKPRINTF(0x01,
"SC stack= %p\n", param->stack);
123 DKPRINTF(0x01,
"SC stack_size = %d\n", param->stack_size);
124 DKPRINTF(0x01,
"SC arg = %d\n", param->arg);
127 SYSERR_PRINT(
"type=%d param=%p\n",
128 run_task->syscall.
type,
129 run_task->syscall.
param);
143 case SYSCALL_TASK_EXIT:
147 case SYSCALL_TASK_PAUSE:
151 case SYSCALL_TASK_SLEEP:
152 task_sleep_ISR(sp, (
unsigned int)(
long)run_task->syscall.
param);
155 case SYSCALL_TASK_KILL:
156 task_kill_id_ISR(sp, (
int)(
long)run_task->syscall.
param);
159 case SYSCALL_TASK_WAKEUP:
163 case SYSCALL_EVTQUE_INIT:
171 case SYSCALL_EVTQUE_WAIT:
175 event_wait_ISR(sp, param->evtque, param->arg, param->timeout);
179 case SYSCALL_EVTQUE_CLEAR:
183 case SYSCALL_EVTQUE_CHECK:
191 case SYSCALL_EVTQUE_WAKEUP:
199 case SYSCALL_EVTQUE_DISPOSE:
204 case SYSCALL_MUTEX_INIT:
212 case SYSCALL_MUTEX_LOCK:
216 mutex_lock_ISR(sp, param->mutex, param->timeout);
220 case SYSCALL_MUTEX_UNLOCK:
224 mutex_unlock_ISR(sp, param->mutex);
228 case SYSCALL_MUTEX_DISPOSE:
232 case SYSCALL_SET_CONSOLE_IN:
236 case SYSCALL_SET_CONSOLE_OUT:
240 case SYSCALL_SET_ERROR_OUT:
244 case SYSCALL_PRINT_TASK_LIST:
248 case SYSCALL_PRINT_TASK_QUEUE:
249 task_print_task_queue();
252 case SYSCALL_PRINT_CALLTRACE:
256 case SYSCALL_GET_TASKS_INFO:
265 SYSERR_PRINT(
"Undifined SYSCALL %d\n", run_task->syscall.
type);
269 dispatch(run_task, run_task);
272 int last_syscall_type = 0;
274 void sys_call(
int type,
void *param)
276 DKFPRINTF(0x01,
"type = %d param = %p\n", type, param);
279 if(syscall_cnt != 0) {
280 SYSERR_PRINT(
"!!! Have not executed syscall %d ?\n",
286 if(run_task == &dummy_task) {
287 DKPRINTF(0x01,
"Cannot exec syscall type=%d\n", type);
290 run_task->syscall.
type = type;
291 run_task->syscall.
param = param;
293 last_syscall_type = type;
void event_clear_ISR(void *sp, struct st_event *evtque)
イベントカウンタをクリアリセットする
void task_exec_ISR(task_func func, char *name, int priority, struct st_tcb *tcb, void *stack, int stack_size, char *arg)
タスクを実行する
void set_console_out_device_ISR(struct st_device *dev)
標準出力デバイスを設定する
void eventqueue_unregister_ISR(struct st_event *evtque)
イベントキューを登録解除する
void set_error_out_device_ISR(struct st_device *dev)
エラー出力デバイスを設定する
int get_tasks_info(struct st_task_info *ti, int count)
タスク情報を取得する
void eventqueue_register_ISR(struct st_event *evtque, const char *name, void *args, unsigned int arg_size, int arg_count)
イベントキューを登録する
void event_wakeup_ISR(void *sp, struct st_event *evtque, void *arg)
イベントキューにイベントを登録し、イベント待ちタスクを起動する
char name[TASK_NAME_LEN+1]
タスク名
void * param
システムコール実行パラメータ
int event_check_ISR(void *sp, struct st_event *evtque)
イベントカウントを取得する
void task_add_ISR(task_func func, char *name, int priority, struct st_tcb *tcb, void *stack, int stack_size, char *arg)
タスクを追加する
void task_wakeup_id_ISR(void *sp, int id)
idタスクを実行する
void set_console_in_device_ISR(struct st_device *dev)
標準入力デバイスを設定する
unsigned long long get_kernel_time(void)
カーネル時間を取得する
void mutex_register_ISR(struct st_mutex *mutex, const char *name)
MUTEXを登録する
int mutex_unregister_ISR(struct st_mutex *mutex)
MUTEXを登録解除する