Skip to content

Commit 72ea4ab

Browse files
Merge pull request #49 from lrademacher/master
Fixed ESP8266 resets
2 parents a51987c + c10c9bd commit 72ea4ab

1 file changed

Lines changed: 67 additions & 60 deletions

File tree

Encoder.h

Lines changed: 67 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@
5151
#define ENCODER_ARGLIST_SIZE 0
5252
#endif
5353

54+
// Use ICACHE_RAM_ATTR for ISRs to prevent ESP8266 resets
55+
#if defined(ESP8266)
56+
#define ENCODER_ISR_ATTR ICACHE_RAM_ATTR
57+
#else
58+
#define ENCODER_ISR_ATTR
59+
#endif
60+
5461

5562

5663
// All the data needed by interrupts is consolidated into this ugly struct
@@ -749,184 +756,184 @@ class Encoder
749756

750757
#if defined(ENCODER_USE_INTERRUPTS) && !defined(ENCODER_OPTIMIZE_INTERRUPTS)
751758
#ifdef CORE_INT0_PIN
752-
static void isr0(void) { update(interruptArgs[0]); }
759+
static ENCODER_ISR_ATTR void isr0(void) { update(interruptArgs[0]); }
753760
#endif
754761
#ifdef CORE_INT1_PIN
755-
static void isr1(void) { update(interruptArgs[1]); }
762+
static ENCODER_ISR_ATTR void isr1(void) { update(interruptArgs[1]); }
756763
#endif
757764
#ifdef CORE_INT2_PIN
758-
static void isr2(void) { update(interruptArgs[2]); }
765+
static ENCODER_ISR_ATTR void isr2(void) { update(interruptArgs[2]); }
759766
#endif
760767
#ifdef CORE_INT3_PIN
761-
static void isr3(void) { update(interruptArgs[3]); }
768+
static ENCODER_ISR_ATTR void isr3(void) { update(interruptArgs[3]); }
762769
#endif
763770
#ifdef CORE_INT4_PIN
764-
static void isr4(void) { update(interruptArgs[4]); }
771+
static ENCODER_ISR_ATTR void isr4(void) { update(interruptArgs[4]); }
765772
#endif
766773
#ifdef CORE_INT5_PIN
767-
static void isr5(void) { update(interruptArgs[5]); }
774+
static ENCODER_ISR_ATTR void isr5(void) { update(interruptArgs[5]); }
768775
#endif
769776
#ifdef CORE_INT6_PIN
770-
static void isr6(void) { update(interruptArgs[6]); }
777+
static ENCODER_ISR_ATTR void isr6(void) { update(interruptArgs[6]); }
771778
#endif
772779
#ifdef CORE_INT7_PIN
773-
static void isr7(void) { update(interruptArgs[7]); }
780+
static ENCODER_ISR_ATTR void isr7(void) { update(interruptArgs[7]); }
774781
#endif
775782
#ifdef CORE_INT8_PIN
776-
static void isr8(void) { update(interruptArgs[8]); }
783+
static ENCODER_ISR_ATTR void isr8(void) { update(interruptArgs[8]); }
777784
#endif
778785
#ifdef CORE_INT9_PIN
779-
static void isr9(void) { update(interruptArgs[9]); }
786+
static ENCODER_ISR_ATTR void isr9(void) { update(interruptArgs[9]); }
780787
#endif
781788
#ifdef CORE_INT10_PIN
782-
static void isr10(void) { update(interruptArgs[10]); }
789+
static ENCODER_ISR_ATTR void isr10(void) { update(interruptArgs[10]); }
783790
#endif
784791
#ifdef CORE_INT11_PIN
785-
static void isr11(void) { update(interruptArgs[11]); }
792+
static ENCODER_ISR_ATTR void isr11(void) { update(interruptArgs[11]); }
786793
#endif
787794
#ifdef CORE_INT12_PIN
788-
static void isr12(void) { update(interruptArgs[12]); }
795+
static ENCODER_ISR_ATTR void isr12(void) { update(interruptArgs[12]); }
789796
#endif
790797
#ifdef CORE_INT13_PIN
791-
static void isr13(void) { update(interruptArgs[13]); }
798+
static ENCODER_ISR_ATTR void isr13(void) { update(interruptArgs[13]); }
792799
#endif
793800
#ifdef CORE_INT14_PIN
794-
static void isr14(void) { update(interruptArgs[14]); }
801+
static ENCODER_ISR_ATTR void isr14(void) { update(interruptArgs[14]); }
795802
#endif
796803
#ifdef CORE_INT15_PIN
797-
static void isr15(void) { update(interruptArgs[15]); }
804+
static ENCODER_ISR_ATTR void isr15(void) { update(interruptArgs[15]); }
798805
#endif
799806
#ifdef CORE_INT16_PIN
800-
static void isr16(void) { update(interruptArgs[16]); }
807+
static ENCODER_ISR_ATTR void isr16(void) { update(interruptArgs[16]); }
801808
#endif
802809
#ifdef CORE_INT17_PIN
803-
static void isr17(void) { update(interruptArgs[17]); }
810+
static ENCODER_ISR_ATTR void isr17(void) { update(interruptArgs[17]); }
804811
#endif
805812
#ifdef CORE_INT18_PIN
806-
static void isr18(void) { update(interruptArgs[18]); }
813+
static ENCODER_ISR_ATTR void isr18(void) { update(interruptArgs[18]); }
807814
#endif
808815
#ifdef CORE_INT19_PIN
809-
static void isr19(void) { update(interruptArgs[19]); }
816+
static ENCODER_ISR_ATTR void isr19(void) { update(interruptArgs[19]); }
810817
#endif
811818
#ifdef CORE_INT20_PIN
812-
static void isr20(void) { update(interruptArgs[20]); }
819+
static ENCODER_ISR_ATTR void isr20(void) { update(interruptArgs[20]); }
813820
#endif
814821
#ifdef CORE_INT21_PIN
815-
static void isr21(void) { update(interruptArgs[21]); }
822+
static ENCODER_ISR_ATTR void isr21(void) { update(interruptArgs[21]); }
816823
#endif
817824
#ifdef CORE_INT22_PIN
818-
static void isr22(void) { update(interruptArgs[22]); }
825+
static ENCODER_ISR_ATTR void isr22(void) { update(interruptArgs[22]); }
819826
#endif
820827
#ifdef CORE_INT23_PIN
821-
static void isr23(void) { update(interruptArgs[23]); }
828+
static ENCODER_ISR_ATTR void isr23(void) { update(interruptArgs[23]); }
822829
#endif
823830
#ifdef CORE_INT24_PIN
824-
static void isr24(void) { update(interruptArgs[24]); }
831+
static ENCODER_ISR_ATTR void isr24(void) { update(interruptArgs[24]); }
825832
#endif
826833
#ifdef CORE_INT25_PIN
827-
static void isr25(void) { update(interruptArgs[25]); }
834+
static ENCODER_ISR_ATTR void isr25(void) { update(interruptArgs[25]); }
828835
#endif
829836
#ifdef CORE_INT26_PIN
830-
static void isr26(void) { update(interruptArgs[26]); }
837+
static ENCODER_ISR_ATTR void isr26(void) { update(interruptArgs[26]); }
831838
#endif
832839
#ifdef CORE_INT27_PIN
833-
static void isr27(void) { update(interruptArgs[27]); }
840+
static ENCODER_ISR_ATTR void isr27(void) { update(interruptArgs[27]); }
834841
#endif
835842
#ifdef CORE_INT28_PIN
836-
static void isr28(void) { update(interruptArgs[28]); }
843+
static ENCODER_ISR_ATTR void isr28(void) { update(interruptArgs[28]); }
837844
#endif
838845
#ifdef CORE_INT29_PIN
839-
static void isr29(void) { update(interruptArgs[29]); }
846+
static ENCODER_ISR_ATTR void isr29(void) { update(interruptArgs[29]); }
840847
#endif
841848
#ifdef CORE_INT30_PIN
842-
static void isr30(void) { update(interruptArgs[30]); }
849+
static ENCODER_ISR_ATTR void isr30(void) { update(interruptArgs[30]); }
843850
#endif
844851
#ifdef CORE_INT31_PIN
845-
static void isr31(void) { update(interruptArgs[31]); }
852+
static ENCODER_ISR_ATTR void isr31(void) { update(interruptArgs[31]); }
846853
#endif
847854
#ifdef CORE_INT32_PIN
848-
static void isr32(void) { update(interruptArgs[32]); }
855+
static ENCODER_ISR_ATTR void isr32(void) { update(interruptArgs[32]); }
849856
#endif
850857
#ifdef CORE_INT33_PIN
851-
static void isr33(void) { update(interruptArgs[33]); }
858+
static ENCODER_ISR_ATTR void isr33(void) { update(interruptArgs[33]); }
852859
#endif
853860
#ifdef CORE_INT34_PIN
854-
static void isr34(void) { update(interruptArgs[34]); }
861+
static ENCODER_ISR_ATTR void isr34(void) { update(interruptArgs[34]); }
855862
#endif
856863
#ifdef CORE_INT35_PIN
857-
static void isr35(void) { update(interruptArgs[35]); }
864+
static ENCODER_ISR_ATTR void isr35(void) { update(interruptArgs[35]); }
858865
#endif
859866
#ifdef CORE_INT36_PIN
860-
static void isr36(void) { update(interruptArgs[36]); }
867+
static ENCODER_ISR_ATTR void isr36(void) { update(interruptArgs[36]); }
861868
#endif
862869
#ifdef CORE_INT37_PIN
863-
static void isr37(void) { update(interruptArgs[37]); }
870+
static ENCODER_ISR_ATTR void isr37(void) { update(interruptArgs[37]); }
864871
#endif
865872
#ifdef CORE_INT38_PIN
866-
static void isr38(void) { update(interruptArgs[38]); }
873+
static ENCODER_ISR_ATTR void isr38(void) { update(interruptArgs[38]); }
867874
#endif
868875
#ifdef CORE_INT39_PIN
869-
static void isr39(void) { update(interruptArgs[39]); }
876+
static ENCODER_ISR_ATTR void isr39(void) { update(interruptArgs[39]); }
870877
#endif
871878
#ifdef CORE_INT40_PIN
872-
static void isr40(void) { update(interruptArgs[40]); }
879+
static ENCODER_ISR_ATTR void isr40(void) { update(interruptArgs[40]); }
873880
#endif
874881
#ifdef CORE_INT41_PIN
875-
static void isr41(void) { update(interruptArgs[41]); }
882+
static ENCODER_ISR_ATTR void isr41(void) { update(interruptArgs[41]); }
876883
#endif
877884
#ifdef CORE_INT42_PIN
878-
static void isr42(void) { update(interruptArgs[42]); }
885+
static ENCODER_ISR_ATTR void isr42(void) { update(interruptArgs[42]); }
879886
#endif
880887
#ifdef CORE_INT43_PIN
881-
static void isr43(void) { update(interruptArgs[43]); }
888+
static ENCODER_ISR_ATTR void isr43(void) { update(interruptArgs[43]); }
882889
#endif
883890
#ifdef CORE_INT44_PIN
884-
static void isr44(void) { update(interruptArgs[44]); }
891+
static ENCODER_ISR_ATTR void isr44(void) { update(interruptArgs[44]); }
885892
#endif
886893
#ifdef CORE_INT45_PIN
887-
static void isr45(void) { update(interruptArgs[45]); }
894+
static ENCODER_ISR_ATTR void isr45(void) { update(interruptArgs[45]); }
888895
#endif
889896
#ifdef CORE_INT46_PIN
890-
static void isr46(void) { update(interruptArgs[46]); }
897+
static ENCODER_ISR_ATTR void isr46(void) { update(interruptArgs[46]); }
891898
#endif
892899
#ifdef CORE_INT47_PIN
893-
static void isr47(void) { update(interruptArgs[47]); }
900+
static ENCODER_ISR_ATTR void isr47(void) { update(interruptArgs[47]); }
894901
#endif
895902
#ifdef CORE_INT48_PIN
896-
static void isr48(void) { update(interruptArgs[48]); }
903+
static ENCODER_ISR_ATTR void isr48(void) { update(interruptArgs[48]); }
897904
#endif
898905
#ifdef CORE_INT49_PIN
899-
static void isr49(void) { update(interruptArgs[49]); }
906+
static ENCODER_ISR_ATTR void isr49(void) { update(interruptArgs[49]); }
900907
#endif
901908
#ifdef CORE_INT50_PIN
902-
static void isr50(void) { update(interruptArgs[50]); }
909+
static ENCODER_ISR_ATTR void isr50(void) { update(interruptArgs[50]); }
903910
#endif
904911
#ifdef CORE_INT51_PIN
905-
static void isr51(void) { update(interruptArgs[51]); }
912+
static ENCODER_ISR_ATTR void isr51(void) { update(interruptArgs[51]); }
906913
#endif
907914
#ifdef CORE_INT52_PIN
908-
static void isr52(void) { update(interruptArgs[52]); }
915+
static ENCODER_ISR_ATTR void isr52(void) { update(interruptArgs[52]); }
909916
#endif
910917
#ifdef CORE_INT53_PIN
911-
static void isr53(void) { update(interruptArgs[53]); }
918+
static ENCODER_ISR_ATTR void isr53(void) { update(interruptArgs[53]); }
912919
#endif
913920
#ifdef CORE_INT54_PIN
914-
static void isr54(void) { update(interruptArgs[54]); }
921+
static ENCODER_ISR_ATTR void isr54(void) { update(interruptArgs[54]); }
915922
#endif
916923
#ifdef CORE_INT55_PIN
917-
static void isr55(void) { update(interruptArgs[55]); }
924+
static ENCODER_ISR_ATTR void isr55(void) { update(interruptArgs[55]); }
918925
#endif
919926
#ifdef CORE_INT56_PIN
920-
static void isr56(void) { update(interruptArgs[56]); }
927+
static ENCODER_ISR_ATTR void isr56(void) { update(interruptArgs[56]); }
921928
#endif
922929
#ifdef CORE_INT57_PIN
923-
static void isr57(void) { update(interruptArgs[57]); }
930+
static ENCODER_ISR_ATTR void isr57(void) { update(interruptArgs[57]); }
924931
#endif
925932
#ifdef CORE_INT58_PIN
926-
static void isr58(void) { update(interruptArgs[58]); }
933+
static ENCODER_ISR_ATTR void isr58(void) { update(interruptArgs[58]); }
927934
#endif
928935
#ifdef CORE_INT59_PIN
929-
static void isr59(void) { update(interruptArgs[59]); }
936+
static ENCODER_ISR_ATTR void isr59(void) { update(interruptArgs[59]); }
930937
#endif
931938
#endif
932939
};

0 commit comments

Comments
 (0)