Commit a8f5ed10cc964eb744d3d1f82e2ec27588d4e777
authorMichel Pollet <buserror@gmail.com>
Sun, 3 Jun 2012 22:46:08 +0000 (23:46 +0100)
committerMichel Pollet <buserror@gmail.com>
Sun, 3 Jun 2012 22:46:08 +0000 (23:46 +0100)
Strangely, it didn't, so you could not allocate 2 cores even tho nothing else
is there to stop it...

Signed-off-by: Michel Pollet <buserror@gmail.com>
29 files changed:
simavr/cores/sim_90usb162.c
simavr/cores/sim_mega128.c
simavr/cores/sim_mega1280.c
simavr/cores/sim_mega1281.c
simavr/cores/sim_mega164.c
simavr/cores/sim_mega168.c
simavr/cores/sim_mega16m1.c
simavr/cores/sim_mega324.c
simavr/cores/sim_mega328.c
simavr/cores/sim_mega48.c
simavr/cores/sim_mega644.c
simavr/cores/sim_mega8.c
simavr/cores/sim_mega88.c
simavr/cores/sim_megax.h
simavr/cores/sim_megax4.h
simavr/cores/sim_megax8.h
simavr/cores/sim_megaxm1.h
simavr/cores/sim_tiny13.c
simavr/cores/sim_tiny2313.c
simavr/cores/sim_tiny24.c
simavr/cores/sim_tiny25.c
simavr/cores/sim_tiny44.c
simavr/cores/sim_tiny45.c
simavr/cores/sim_tiny84.c
simavr/cores/sim_tiny85.c
simavr/cores/sim_tinyx4.h
simavr/cores/sim_tinyx5.h
simavr/sim/sim_avr.c
simavr/sim/sim_avr.h

index 793f31af3da9455b844c18142aedab7f7b681914..974e2809b543d6bf4fe63ca9c4f4db8b0f763ed3 100644 (file)
@@ -40,7 +40,7 @@ void usb162_reset(struct avr_t * avr);
 #define __ASSEMBLER__
 #include "avr/iousb162.h"
 
-struct mcu_t {
+const struct mcu_t {
        avr_t                    core;
        avr_eeprom_t    eeprom;
        avr_flash_t     selfprog;
@@ -261,7 +261,7 @@ struct mcu_t {
 
 static avr_t * make()
 {
-       return &mcu_usb162.core;
+       return avr_core_allocate(&mcu_usb162.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t usb162 = {
index 4745cedf8dde88f6e7066189b6b267892972578e..fd617ed6469b9484579c82174ea674a94c3d5d33 100644 (file)
@@ -43,7 +43,7 @@ void m128_reset(struct avr_t * avr);
 /*
  * This is a template for all of the 128 devices, hopefuly
  */
-struct mcu_t {
+const struct mcu_t {
        avr_t          core;
        avr_eeprom_t    eeprom;
        avr_flash_t     selfprog;
@@ -481,7 +481,7 @@ struct mcu_t {
 
 static avr_t * make()
 {
-        return &mcu_mega128.core;
+       return avr_core_allocate(&mcu_mega128.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega128 = {
index e943cf98322b02eae6375ee169d6e7bb2387de09..3f60e7c1ded1ed2f446357c13556b96b55f59178 100755 (executable)
@@ -46,7 +46,7 @@ void m1280_reset(struct avr_t * avr);
 /*
  * This is a template for all of the 1280 devices, hopefully
  */
-struct mcu_t {
+const struct mcu_t {
        avr_t          core;
        avr_eeprom_t    eeprom;
        avr_flash_t     selfprog;
@@ -596,7 +596,7 @@ struct mcu_t {
 
 static avr_t * make()
 {
-        return &mcu_mega1280.core;
+       return avr_core_allocate(&mcu_mega1280.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega1280 = {
index d0bbd5bb18a85a80ac015dfd6897da48622a8258..8ec486c04ac83a7957ab7c99d315c2465f4bf7d6 100644 (file)
@@ -43,7 +43,7 @@ void m1281_reset(struct avr_t * avr);
 /*
  * This is a template for all of the 1281 devices, hopefully
  */
-struct mcu_t {
+const struct mcu_t {
        avr_t          core;
        avr_eeprom_t    eeprom;
        avr_flash_t     selfprog;
@@ -509,7 +509,7 @@ struct mcu_t {
 
 static avr_t * make()
 {
-        return &mcu_mega1281.core;
+       return avr_core_allocate(&mcu_mega1281.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega1281 = {
index d9f2c91fffc29d14e56dbf8d084b1ef2138824b6..baa59d307cecd84ca05c24aecd48736d2558aa36 100644 (file)
@@ -32,7 +32,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega164 = {
index 8d0f2e4f9c8aec690e51c60adb448a2f734e9887..70f1b4ed85324c5cd321ab0f2cc03aa6f8bf26cc 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega168 = {
index 389e1743e1707734ffe14836698ef3532ecdb390..29fefa7c34c811a6a9020ad82503502b0fedfeae 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega16m1 = {
index 2bbebec149523b89f62be610876b95e02f67ee31..7b32be5b3bde1268b1c9c1c6c8160f0cf39cc694 100644 (file)
@@ -32,7 +32,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega324 = {
index 3ed50d0d553b3f15cea35173d7a378c159e92b66..83115f37eed7209187cf5b9ffd9570d8cd27376a 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega328 = {
index 08771afa2446e6ad276ee422de4e6eafab04d088..18fe00a787f82afddad93566f6b7d76f9740c08b 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega48 = {
index bc20f6e4bbdce03eb4a5adf51bf9ae5b9551eee7..0e54e6afa0c34d36003c560f77b99623a0cad2ab 100644 (file)
@@ -32,7 +32,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega644 = {
index 7bd2934931c998798cf4106a1fa1700d825700e5..cad021b27136d2d4d55886cc306e57b3a97eaa8e 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega8 = {
index 59bc48059b356e949c008a6f4182d1c55139c610..84c58ea69a4ea0406b84f0760799cb6352a4b04a 100644 (file)
@@ -33,7 +33,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t mega88 = {
index e26613251678e1aa50d6c6e5442627e164434f0b..f192780f2b2238e9ff194a78686c64077d7039ea 100644 (file)
@@ -70,7 +70,7 @@ struct mcu_t {
 #define EIMSK GICR
 #define EIFR GIFR
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
        .core = {
                .mmcu = SIM_MMCU,
                DEFAULT_CORE(SIM_VECTOR_SIZE),
index 21f3130dd8661074330da26787d9cac3e84e526d..030aebba00eb276a8a26ff22ef2e1f4b47b07ac3 100644 (file)
@@ -61,7 +61,7 @@ struct mcu_t {
 #error SIM_MMCU is not declared
 #endif
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
        .core = {
                .mmcu = SIM_MMCU,
                DEFAULT_CORE(4),
index 75dc8351a38a5ef4edeea85395c1692e30d214e6..385bc8f20ad101ead1a5d0a71d96d0cac811f324 100644 (file)
@@ -64,7 +64,7 @@ struct mcu_t {
 #error SIM_MMCU is not declared
 #endif
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
        .core = {
                .mmcu = SIM_MMCU,
                DEFAULT_CORE(SIM_VECTOR_SIZE),
index e39bcb4ef9068326abe0ba1262b5ab4d4af182a1..46c72fb98c4bd692f3b63c129174280b1d848941 100644 (file)
@@ -63,7 +63,7 @@ struct mcu_t {
 #error SIM_MMCU is not declared
 #endif
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
        .core = {
                .mmcu = SIM_MMCU,
                DEFAULT_CORE(SIM_VECTOR_SIZE),
index 99587ce9e8ad6da8ca846c5c883e0636be594c4d..71a30a312a02fd0dfc9ad282feb6be763a639e5b 100644 (file)
@@ -37,7 +37,7 @@ static void init(struct avr_t * avr);
 static void reset(struct avr_t * avr);
 
 
-static struct mcu_t {
+const static struct mcu_t {
        avr_t core;
        avr_eeprom_t    eeprom;
        avr_watchdog_t  watchdog;
@@ -122,7 +122,7 @@ static struct mcu_t {
 
 static avr_t * make()
 {
-       return &mcu.core;
+       return avr_core_allocate(&mcu.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny13 = {
index faeffd1e2ab55c62e5b5b149d022bf9daf6dc2e2..0a8ed6cdfcb7ebd1f20d36b2d55f585cb10dadbe 100644 (file)
@@ -38,7 +38,7 @@ static void reset(struct avr_t * avr);
 /*
  * This is a template for all of the tinyx5 devices, hopefully
  */
-static struct mcu_t {
+const static struct mcu_t {
        avr_t core;
        avr_eeprom_t    eeprom;
        avr_watchdog_t  watchdog;
@@ -214,7 +214,7 @@ static struct mcu_t {
 
 static avr_t * make()
 {
-       return &mcu.core;
+       return avr_core_allocate(&mcu.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny2313 = {
index 4a424f5f30ca9303bc3a503065ff68d11469e81b..7babdf98cc2e17b4f56cdb6caeb79a0c1e6e40ac 100644 (file)
@@ -34,7 +34,7 @@
 
 static avr_t * make()
 {
-    return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny24 = {
index 5c32576e2e742cec84c8e3d8e74ff69592914438..b0ff4bc220149f1f92aa7c17aeb6acbe650cac52 100644 (file)
@@ -34,7 +34,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny25 = {
index e181eef94a5c27bc336fc9de53f9f24325a40d9e..25f99a964de93f87b83dae7b02307770112fe03b 100644 (file)
@@ -34,7 +34,7 @@
 
 static avr_t * make()
 {
-    return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny44 = {
index 1500b549b59f009e987524e5aad1e683214615df..4e79a1edadd84685d296dedb8b73088ae430a575 100644 (file)
@@ -34,7 +34,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny45 = {
index a868bfe8430d5fbc041870b676481d73359e9c8f..70bae75c6b2c42193bec80296e8ebf90e83313e5 100644 (file)
@@ -35,7 +35,7 @@
 
 static avr_t * make()
 {
-    return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny84 = {
index 1508a4f82feefc75e3180a5a606bd5ddc82a2057..4ffe66d45ca3e7832d33326d0dc74d83c0b14acb 100644 (file)
@@ -34,7 +34,7 @@
 
 static avr_t * make()
 {
-       return &SIM_CORENAME.core;
+       return avr_core_allocate(&SIM_CORENAME.core, sizeof(struct mcu_t));
 }
 
 avr_kind_t tiny85 = {
index ca415cf335ff7a1c4b753e1adc19843d9ff3087c..2ce12b34388e172cacf7334e61c96b6510713bb4 100644 (file)
@@ -57,7 +57,7 @@ struct mcu_t {
 #error SIM_MMCU is not declared
 #endif
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
     .core = {
         .mmcu = SIM_MMCU,
         DEFAULT_CORE(SIM_VECTOR_SIZE),
index 90792dfb4499e2b10f91c7d83cb8a3f8fab7b329..44dbd06b88b2fd83b4e9a55fba05cb39e32fb342 100644 (file)
@@ -57,7 +57,7 @@ struct mcu_t {
 #error SIM_MMCU is not declared
 #endif
 
-struct mcu_t SIM_CORENAME = {
+const struct mcu_t SIM_CORENAME = {
        .core = {
                .mmcu = SIM_MMCU,
                DEFAULT_CORE(SIM_VECTOR_SIZE),
index de3ea410ad749e2bf6c27fb492c014a183fc5a20..805c84f2a5d2578d78b8a1631af73f2ac85e271c 100644 (file)
@@ -292,36 +292,19 @@ int avr_run(avr_t * avr)
        return avr->state;
 }
 
-#if 0
-extern avr_kind_t tiny13;
-extern avr_kind_t tiny2313;
-extern avr_kind_t tiny25,tiny45,tiny85;
-extern avr_kind_t tiny24,tiny44,tiny84;
-extern avr_kind_t mega8;
-extern avr_kind_t mega48,mega88,mega168,mega328;
-extern avr_kind_t mega164,mega324,mega644;
-extern avr_kind_t mega128;
-extern avr_kind_t mega1281;
-extern avr_kind_t mega16m1;
-extern avr_kind_t usb162;
-
-avr_kind_t * avr_kind[] = {
-       &tiny13,
-       &tiny2313,
-       &tiny25, &tiny45, &tiny85,
-       &tiny24, &tiny44, &tiny84,
-       &mega8,
-       &mega48, &mega88, &mega168, &mega328,
-       &mega164, &mega324, &mega644,
-       &mega128,
-       &mega1281,
-       &mega16m1,
-       &usb162,
-       NULL
-};
-#endif
+avr_t *
+avr_core_allocate(
+               const avr_t * core,
+               uint32_t coreLen)
+{
+       uint8_t * b = malloc(coreLen);
+       memcpy(b, core, coreLen);
+       return (avr_t *)b;
+}
 
-avr_t * avr_make_mcu_by_name(const char *name)
+avr_t *
+avr_make_mcu_by_name(
+               const char *name)
 {
        avr_kind_t * maker = NULL;
        for (int i = 0; avr_kind[i] && !maker; i++) {
index dcc8f5c9bb196f68141cb755fd62baac6c853957..c9414db38ae3f66fa5ba00a6b297fd2a0cb18ed9 100644 (file)
@@ -281,6 +281,12 @@ avr_make_mcu_by_name(
 int
 avr_init(
                avr_t * avr);
+// Used by the cores, allocated a mutable avr_t from the const global
+avr_t *
+avr_core_allocate(
+               const avr_t * core,
+               uint32_t coreLen);
+
 // resets the AVR, and the IO modules
 void
 avr_reset(