diff --git a/examples/resource.rs b/examples/resource.rs index 9655aad634b8c69739438ce46d5a2c6e4da1163e..b925ffb06486baa1074d8cf9e1d3c056829ff841 100644 --- a/examples/resource.rs +++ b/examples/resource.rs @@ -73,13 +73,17 @@ fn exti2(t: &mut Threshold, mut r: EXTI2::Resources) { #[inline(never)] #[no_mangle] fn enter() { - rtfm::nop(); + unsafe { + rtfm::bkpt_1(); + } } #[inline(never)] #[no_mangle] fn exit() { - rtfm::nop(); + unsafe { + rtfm::bkpt_2(); + } } #[allow(non_snake_case)] @@ -106,6 +110,12 @@ fn idle() -> ! { k_read(&r()); let r = stub_EXTI3; k_read(&r()); + let r = _EXTI1; + unsafe { k_read(&r()) }; + let r = _EXTI2; + unsafe { k_read(&r()) }; + let r = _EXTI3; + unsafe { k_read(&r()) }; enter(); exit(); loop { diff --git a/klee.py b/klee.py index 2961ae4a59f161465287b7bb8270067f7cc6e19d..0161b90f23d7a203e6455cda7f6c35a406362a5d 100644 --- a/klee.py +++ b/klee.py @@ -10,7 +10,8 @@ import glob # gdb helper functions def gdb_continue(): - gdb.execute("continue") + # gdb.execute("continue") + gdb.execute("signal 0") def gdb_cyccnt_enable(): @@ -39,15 +40,19 @@ def gdb_cyccnt_write(num): gdb.execute('mon mww 0xe0001004 %r' % num) +def gdb_set_pc(task): + gdb.execute("set $pc = stub_{}()".format(task)) + + def gdb_call(task): # call task print("#### call task %s" % task) - try: - gdb.execute('call %s' % "stub_" + task + "()") - print("<<<<<<<<<<<<<<<<< after call >>>>>>>>>>>>>>>>>") + # try: + gdb.execute('call %s' % "stub_" + task + "()") + # print("<<<<<<<<<<<<<<<<< after call >>>>>>>>>>>>>>>>>") - except gdb.error: - print("!!!!!!!!!!!!!!!!! after call !!!!!!!!!!!!!!!!!") + # except gdb.error: + # print("!!!!!!!!!!!!!!!!! after call !!!!!!!!!!!!!!!!!") def gdb_bkpt_read(): @@ -58,18 +63,21 @@ def gdb_bkpt_read(): def gdb_setup(): # Commands for making GDB scriptable print("gbd init") - gdb.execute("set confirm off") - gdb.execute("set pagination off") - # gdb.execute("set verbose off") - # gdb.execute("set height 0") - # gdb.execute("set unwindonsignal off") - # gdb.execute("set unwind-on-terminating-exception off") - gdb.execute("set unwindonsignal on") - # gdb.execute("set unwind-on-terminating-exception on") + # gdb.execute("set confirm off") + # gdb.execute("set pagination off") + # # gdb.execute("set verbose off") + # # gdb.execute("set height 0") + # # gdb.execute("set unwindonsignal off") + # # gdb.execute("set unwind-on-terminating-exception off") + # gdb.execute("set unwindonsignal on") + gdb.execute("set unwind-on-terminating-exception on") gdb.execute("show unwindonsignal") gdb.execute("show unwind-on-terminating-exception") +# set unwindonsignal on +# will unwind the stack on a signal error, we don't want that + # Event handling # GDB event, called on breakpoint @@ -77,7 +85,10 @@ def gdb_setup(): def stop_event(evt): print("#### stop event %r" % evt) - gdb.execute("break") + # gdb.execute("finish") + # gdb.execute("continue") + + # gdb.execute("break") imm = gdb_bkpt_read() print(" imm = {}".format(imm)) @@ -99,6 +110,7 @@ def stop_event(evt): if imm == 3: print("Finished") + next_task() # gdb.execute("return") @@ -106,18 +118,44 @@ def exit_handler(event): print("event type: exit") print("exit code: %d" % (event.exit_code)) - # gdb.events.inferior_call_post.connect(exit_handler) +def next_task(): + global tasks + global task_nr + print("--------------------------- task nr {}".format(task_nr)) + + if task_nr >= len(tasks): + print("--------------------------- tasks done") + else: + try: + gdb_call(tasks[task_nr]) + print("--------------------------- call done, no bkpts") + task_nr = task_nr + 1 + next_task() + return + except: + print("--------------------------- call except, with bkpts wait to be called") + task_nr = task_nr + 1 + + + # globals -tasks = ["EXTI1"] +tasks = ["EXTI2", "EXTI3", "EXTI3"] task_nr = 0 print("simple python script started") gdb_setup() gdb.events.stop.connect(stop_event) +next_task() +# gdb.execute("b enter") +# gdb.execute("b exit") + + +# gdb_set_pc("EXTI1") -for t_nr, t_index in enumerate(tasks): - print("-------------- t_nr {}".format(t_nr)) - gdb_call(tasks[t_nr]) +# for t_nr, task in enumerate(tasks): +# print("-------------- t_nr {}".format(t_nr)) +# # gdb_set_pc(task) +# gdb_call(tasks[t_nr])