GadgetSeed  0.9.6
emu_task.c
[詳解]
1 /** @file
2  @brief エミュレータ疑似タスク制御
3 
4  @date 2012.12.08
5  @author Takashi SHUDO
6 */
7 
8 #include "asm-emu.h"
9 #include "task/task.h"
10 #include "tprintf.h"
11 
12 #include <stdio.h>
13 
14 //#define DEBUG
15 #ifdef DEBUG
16 #define PCPRINTF printf
17 #else
18 #define PCPRINTF(x, ...)
19 #endif
20 
21 static ucontext_t uctx;
22 
23 void setup_task(void *sp, int stack_size, void (* task)(void),
24  struct st_tcb *tcb)
25 {
26  PCPRINTF("setup_task sp=%p, stack_size=%d, task=%p,"
27  " tcb=%p\r\n", sp, stack_size,
28  task, tcb);
29 
30  if(getcontext(&(tcb->ctx.uc)) == -1) {
31  fprintf(stderr, "getcontext error");
32  }
33  tcb->ctx.uc.uc_stack.ss_sp = sp;
34  tcb->ctx.uc.uc_stack.ss_size = stack_size;
35  tcb->ctx.uc.uc_link = &uctx;
36  makecontext(&(tcb->ctx.uc), (void *)task, 0);
37 }
38 
39 void disp_regs(void *sp)
40 {
41  // EMUはレジスタは表示できない
42 }
タスク制御
struct st_context ctx
CPUコンテキスト(CPUアーキテクチャ依存)
Definition: tcb.h:43
タスクコンテキスト
Definition: tcb.h:32
機能限定printf
エミュレータ用制御