Skip to content
This repository was archived by the owner on Apr 25, 2021. It is now read-only.

Commit 911c1b1

Browse files
committed
oprom 에서 hook 관련 함수들 이름 및 함수 반환하도록 변경
1 parent eb0110b commit 911c1b1

4 files changed

Lines changed: 53 additions & 36 deletions

File tree

src/machine.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "machine.h"
77
#include "syscall.h"
88

9+
extern mp_obj_t signal_hook_obj;
10+
911
MP_DEFINE_EXCEPTION(SystemError, Exception)
1012

1113
void _start(void) {
@@ -45,20 +47,31 @@ void Reset_Handler(void) {
4547
_start();
4648
}
4749

48-
STATIC mp_obj_t handler = NULL;
50+
51+
STATIC mp_obj_t signal_hook0(mp_obj_t none_obj) {
52+
mp_call_function_0(signal_hook_obj);
53+
return mp_const_none;
54+
}
55+
56+
MP_DEFINE_CONST_FUN_OBJ_1(signal_hook0_obj, signal_hook0);
57+
58+
4959
void Signal_Handler() {
50-
if (handler == NULL) {
51-
handler = mp_obj_dict_get(
52-
MP_OBJ_FROM_PTR(&MP_STATE_VM(dict_main)),
53-
MP_OBJ_NEW_QSTR(MP_QSTR_signal_handler)
54-
);
60+
nlr_buf_t nlr;
61+
if (nlr_push(&nlr) == 0) {
62+
if (signal_hook_obj != mp_const_none) {
63+
mp_sched_schedule((mp_obj_t)&signal_hook0_obj, mp_const_none);
64+
}
65+
66+
nlr_pop();
67+
} else {
68+
__fatal_error("Signal_Handler() fail");
5569
}
5670

57-
// mp_call_function_1_protected(handler, mp_const_none);
58-
mp_sched_schedule(handler, mp_const_none);
5971
__syscall1(SYS_CONTROL, SYS_CONTROL_RETURN);
6072
}
6173

74+
6275
typedef int (*Handler)(int, int, int);
6376

6477
void Call_Handler(Handler handler, int a1, int a2, int a3) {

src/modmachine.c

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
#include <stdio.h>
2222
#include <string.h>
2323

24+
mp_obj_t signal_hook_obj = mp_const_none;
25+
mp_obj_t print_hook_obj = mp_const_none;
26+
mp_obj_t input_hook_obj = mp_const_none;
27+
2428

2529
typedef struct _openpie_syscall_result_t {
2630
byte *buf;
@@ -128,34 +132,27 @@ STATIC mp_obj_t usystem_repl_call(mp_obj_t func, mp_obj_t locals_obj) {
128132
MP_DEFINE_CONST_FUN_OBJ_2(usystem_repl_call_obj, usystem_repl_call);
129133

130134

131-
mp_obj_t interrupt_hook_obj = mp_const_none;
132-
133-
STATIC mp_obj_t usystem_interrupt_hook(mp_obj_t hook) {
134-
interrupt_hook_obj = hook;
135-
return mp_const_none;
135+
STATIC mp_obj_t usystem_hook_signal(mp_obj_t hook_obj) {
136+
signal_hook_obj = hook_obj;
137+
return hook_obj;
136138
}
137139

138-
MP_DEFINE_CONST_FUN_OBJ_1(usystem_interrupt_hook_obj, usystem_interrupt_hook);
139-
140+
MP_DEFINE_CONST_FUN_OBJ_1(usystem_hook_signal_obj, usystem_hook_signal);
140141

141-
mp_obj_t print_hook_obj = mp_const_none;
142142

143-
STATIC mp_obj_t usystem_print_hook(mp_obj_t hook) {
144-
print_hook_obj = hook;
145-
return mp_const_none;
143+
STATIC mp_obj_t usystem_hook_print(mp_obj_t hook_obj) {
144+
print_hook_obj = hook_obj;
145+
return hook_obj;
146146
}
147147

148-
MP_DEFINE_CONST_FUN_OBJ_1(usystem_print_hook_obj, usystem_print_hook);
149-
148+
MP_DEFINE_CONST_FUN_OBJ_1(usystem_hook_print_obj, usystem_hook_print);
150149

151-
mp_obj_t input_hook_obj = mp_const_none;
152-
153-
STATIC mp_obj_t usystem_input_hook(mp_obj_t hook) {
154-
input_hook_obj = hook;
155-
return mp_const_none;
150+
STATIC mp_obj_t usystem_hook_input(mp_obj_t hook_obj) {
151+
input_hook_obj = hook_obj;
152+
return hook_obj;
156153
}
157154

158-
MP_DEFINE_CONST_FUN_OBJ_1(usystem_input_hook_obj, usystem_input_hook);
155+
MP_DEFINE_CONST_FUN_OBJ_1(usystem_hook_input_obj, usystem_hook_input);
159156

160157

161158
STATIC mp_obj_t usystem_invoke(size_t n_args, const mp_obj_t *args) {
@@ -292,9 +289,9 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
292289
{MP_ROM_QSTR(MP_QSTR_repl_compile), MP_ROM_PTR(&usystem_repl_compile_obj)},
293290
{MP_ROM_QSTR(MP_QSTR_repl_call), MP_ROM_PTR(&usystem_repl_call_obj)},
294291

295-
{MP_ROM_QSTR(MP_QSTR_interrupt_hook), MP_ROM_PTR(&usystem_interrupt_hook_obj)},
296-
{MP_ROM_QSTR(MP_QSTR_input_hook), MP_ROM_PTR(&usystem_input_hook_obj)},
297-
{MP_ROM_QSTR(MP_QSTR_print_hook), MP_ROM_PTR(&usystem_print_hook_obj)},
292+
{MP_ROM_QSTR(MP_QSTR_hook_signal), MP_ROM_PTR(&usystem_hook_signal_obj)},
293+
{MP_ROM_QSTR(MP_QSTR_hook_input), MP_ROM_PTR(&usystem_hook_input_obj)},
294+
{MP_ROM_QSTR(MP_QSTR_hook_print), MP_ROM_PTR(&usystem_hook_print_obj)},
298295
{MP_ROM_QSTR(MP_QSTR_invoke), MP_ROM_PTR(&usystem_invoke_obj)},
299296
{MP_ROM_QSTR(MP_QSTR_signal), MP_ROM_PTR(&usystem_signal_obj)},
300297
{MP_ROM_QSTR(MP_QSTR_components), MP_ROM_PTR(&usystem_components_obj)},

src/mphalport.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "mphalport.h"
88
#include "syscall.h"
99

10-
extern mp_obj_t interrupt_hook_obj;
1110
extern mp_obj_t input_hook_obj;
1211
extern mp_obj_t print_hook_obj;
1312

src/umodules/machine.pyi

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def invoke(address: str, method: str, *args: Any) -> Union[Any, List]:
2121
pass
2222

2323

24-
def signal() -> List:
24+
def signal(ticks: int) -> List:
2525
pass
2626

2727

@@ -45,10 +45,6 @@ def get_stdout_str() -> int:
4545
pass
4646

4747

48-
def print_hook(func):
49-
pass
50-
51-
5248
def debug(*args):
5349
pass
5450

@@ -59,3 +55,15 @@ def shutdown():
5955

6056
def reboot():
6157
pass
58+
59+
60+
def hook_input(func):
61+
pass
62+
63+
64+
def hook_print(func):
65+
pass
66+
67+
68+
def hook_signal(func):
69+
pass

0 commit comments

Comments
 (0)