diff --git a/app/src/processing/app/debug/Compiler.java b/app/src/processing/app/debug/Compiler.java index 77b362fe0..55329cd66 100644 --- a/app/src/processing/app/debug/Compiler.java +++ b/app/src/processing/app/debug/Compiler.java @@ -693,6 +693,8 @@ public class Compiler implements MessageConsumer { // 3. compile the core, outputting .o files to and then // collecting them into the core.a library file. + // Also compiles the variant (if it supplies actual source files), + // which are included in the link directly (not through core.a) void compileCore() throws RunnerException { @@ -705,13 +707,9 @@ public class Compiler implements MessageConsumer { if (variantFolder != null) includeFolders.add(variantFolder); - List objectFiles = compileFiles(buildFolder, coreFolder, true, - includeFolders); - if (variantFolder != null) - objectFiles.addAll(compileFiles(buildFolder, variantFolder, true, - includeFolders)); - - for (File file : objectFiles) { + List coreObjectFiles = compileFiles(buildFolder, coreFolder, true, + includeFolders); + for (File file : coreObjectFiles) { PreferencesMap dict = new PreferencesMap(prefs); dict.put("ide_version", "" + Base.REVISION); @@ -727,6 +725,10 @@ public class Compiler implements MessageConsumer { } execAsynchronously(cmdArray); } + + if (variantFolder != null) + objectFiles.addAll(compileFiles(buildFolder, variantFolder, true, + includeFolders)); } // 4. link it all together into the .elf file diff --git a/app/src/processing/app/debug/TargetPlatform.java b/app/src/processing/app/debug/TargetPlatform.java index 3dfb29f6e..2666347fa 100644 --- a/app/src/processing/app/debug/TargetPlatform.java +++ b/app/src/processing/app/debug/TargetPlatform.java @@ -71,7 +71,7 @@ public class TargetPlatform { if (!boardsFile.exists() || !boardsFile.canRead()) throw new TargetPlatformException( format(_("Could not find boards.txt in {0}. Is it pre-1.5?"), - boardsFile.getAbsolutePath())); + folder.getAbsolutePath())); // Load boards try { diff --git a/hardware/arduino/avr/cores/arduino/Arduino.h b/hardware/arduino/avr/cores/arduino/Arduino.h index ec1389e14..630f0d6d7 100644 --- a/hardware/arduino/avr/cores/arduino/Arduino.h +++ b/hardware/arduino/avr/cores/arduino/Arduino.h @@ -118,6 +118,7 @@ typedef uint8_t boolean; typedef uint8_t byte; void init(void); +void initVariant(void); void pinMode(uint8_t, uint8_t); void digitalWrite(uint8_t, uint8_t); @@ -194,20 +195,21 @@ extern const uint8_t PROGMEM digital_pin_to_timer_PGM[]; #define TIMER0B 2 #define TIMER1A 3 #define TIMER1B 4 -#define TIMER2 5 -#define TIMER2A 6 -#define TIMER2B 7 +#define TIMER1C 5 +#define TIMER2 6 +#define TIMER2A 7 +#define TIMER2B 8 -#define TIMER3A 8 -#define TIMER3B 9 -#define TIMER3C 10 -#define TIMER4A 11 -#define TIMER4B 12 -#define TIMER4C 13 -#define TIMER4D 14 -#define TIMER5A 15 -#define TIMER5B 16 -#define TIMER5C 17 +#define TIMER3A 9 +#define TIMER3B 10 +#define TIMER3C 11 +#define TIMER4A 12 +#define TIMER4B 13 +#define TIMER4C 14 +#define TIMER4D 15 +#define TIMER5A 16 +#define TIMER5B 17 +#define TIMER5C 18 #ifdef __cplusplus } // extern "C" diff --git a/hardware/arduino/avr/cores/arduino/main.cpp b/hardware/arduino/avr/cores/arduino/main.cpp index 0ad696215..091c365fc 100644 --- a/hardware/arduino/avr/cores/arduino/main.cpp +++ b/hardware/arduino/avr/cores/arduino/main.cpp @@ -19,10 +19,17 @@ #include +// Weak empty variant initialization function. +// May be redefined by variant files. +void initVariant() __attribute__((weak)); +void initVariant() { } + int main(void) { init(); + initVariant(); + #if defined(USBCON) USBDevice.attach(); #endif diff --git a/hardware/arduino/avr/cores/arduino/wiring_analog.c b/hardware/arduino/avr/cores/arduino/wiring_analog.c index 8feead957..48a9ef52d 100644 --- a/hardware/arduino/avr/cores/arduino/wiring_analog.c +++ b/hardware/arduino/avr/cores/arduino/wiring_analog.c @@ -160,6 +160,14 @@ void analogWrite(uint8_t pin, int val) break; #endif + #if defined(TCCR1A) && defined(COM1C1) + case TIMER1C: + // connect pwm to pin on timer 1, channel B + sbi(TCCR1A, COM1C1); + OCR1C = val; // set pwm duty + break; + #endif + #if defined(TCCR2) && defined(COM21) case TIMER2: // connect pwm to pin on timer 2 diff --git a/hardware/arduino/avr/cores/arduino/wiring_digital.c b/hardware/arduino/avr/cores/arduino/wiring_digital.c index be323b1df..df94cc1c5 100644 --- a/hardware/arduino/avr/cores/arduino/wiring_digital.c +++ b/hardware/arduino/avr/cores/arduino/wiring_digital.c @@ -84,6 +84,9 @@ static void turnOffPWM(uint8_t timer) #if defined(TCCR1A) && defined(COM1B1) case TIMER1B: cbi(TCCR1A, COM1B1); break; #endif + #if defined(TCCR1A) && defined(COM1C1) + case TIMER1C: cbi(TCCR1A, COM1C1); break; + #endif #if defined(TCCR2) && defined(COM21) case TIMER2: cbi(TCCR2, COM21); break;