Commit 9ad0d2655a71a0292f0c92e3060ddc5e4f327af1
authorMichel Pollet <buserror@gmail.com>
Sun, 14 Jun 2015 10:48:54 +0000 (11:48 +0100)
committerMichel Pollet <buserror@gmail.com>
Thu, 2 Jul 2015 18:02:54 +0000 (19:02 +0100)
Added a 'custom' sub struct

Signed-off-by: Michel Pollet <buserror@gmail.com>
3 files changed:
simavr/sim/sim_avr.c
simavr/sim/sim_avr.h
tests/tests.c

index fc03d28cc96b39f30d3b9907bafaa9e511367314..549e36d2fa874613f003d081f806d55d63c5d287 100644 (file)
@@ -83,8 +83,8 @@ int avr_init(avr_t * avr)
        avr->state = cpu_Limbo;
        avr->frequency = 1000000;       // can be overridden via avr_mcu_section
        avr_interrupt_init(avr);
-       if (avr->special_init)
-               avr->special_init(avr, avr->special_data);
+       if (avr->custom.init)
+               avr->custom.init(avr, avr->custom.data);
        if (avr->init)
                avr->init(avr);
        // set default (non gdb) fast callbacks
@@ -99,8 +99,8 @@ int avr_init(avr_t * avr)
 
 void avr_terminate(avr_t * avr)
 {
-       if (avr->special_deinit)
-               avr->special_deinit(avr, avr->special_data);
+       if (avr->custom.deinit)
+               avr->custom.deinit(avr, avr->custom.data);
        if (avr->gdb) {
                avr_deinit_gdb(avr);
                avr->gdb = NULL;
index f71b575453689228923615c10ec78045757f632b..aad19b5b3bb097a4da28b0e723c7e982514e06e8 100644 (file)
@@ -179,15 +179,19 @@ typedef struct avr_t {
 
        // called at init time
        void (*init)(struct avr_t * avr);
-       // called at init time (for special purposes like using a memory mapped file as flash see: simduino)
-       void (*special_init)(struct avr_t * avr, void * data);
-       // called at termination time ( to clean special initializations)
-       void (*special_deinit)(struct avr_t * avr, void * data);
-    // value passed to special_init() and special_deinit()
-       void *special_data;
        // called at reset time
        void (*reset)(struct avr_t * avr);
 
+       struct {
+               // called at init time (for special purposes like using a
+               // memory mapped file as flash see: simduino)
+               void (*init)(struct avr_t * avr, void * data);
+               // called at termination time ( to clean special initializations)
+               void (*deinit)(struct avr_t * avr, void * data);
+               // value passed to init() and deinit()
+               void *data;
+       } custom;
+
        /*!
         * Default AVR core run function.
         * Two modes are available, a "raw" run that goes as fast as
index a6a504e484933fedd7e661599bc4f8f81e9d9c22..579b562d326725a9915d5b1feca19271b8767ca4 100644 (file)
@@ -121,7 +121,7 @@ int tests_run_test(avr_t *avr, unsigned long run_usec) {
        // assert that the simulation has not finished before that.
        jmp_buf jmp;
        special_deinit_jmpbuf = &jmp;
-       avr->special_deinit = special_deinit_longjmp_cb;
+       avr->custom.deinit = special_deinit_longjmp_cb;
        avr_cycle_timer_register_usec(avr, run_usec,
                                      cycle_timer_longjmp_cb, &jmp);
        int reason = setjmp(jmp);