|
51 | 51 | #define ENCODER_ARGLIST_SIZE 0 |
52 | 52 | #endif |
53 | 53 |
|
| 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 | + |
54 | 61 |
|
55 | 62 |
|
56 | 63 | // All the data needed by interrupts is consolidated into this ugly struct |
@@ -749,184 +756,184 @@ class Encoder |
749 | 756 |
|
750 | 757 | #if defined(ENCODER_USE_INTERRUPTS) && !defined(ENCODER_OPTIMIZE_INTERRUPTS) |
751 | 758 | #ifdef CORE_INT0_PIN |
752 | | - static void isr0(void) { update(interruptArgs[0]); } |
| 759 | + static ENCODER_ISR_ATTR void isr0(void) { update(interruptArgs[0]); } |
753 | 760 | #endif |
754 | 761 | #ifdef CORE_INT1_PIN |
755 | | - static void isr1(void) { update(interruptArgs[1]); } |
| 762 | + static ENCODER_ISR_ATTR void isr1(void) { update(interruptArgs[1]); } |
756 | 763 | #endif |
757 | 764 | #ifdef CORE_INT2_PIN |
758 | | - static void isr2(void) { update(interruptArgs[2]); } |
| 765 | + static ENCODER_ISR_ATTR void isr2(void) { update(interruptArgs[2]); } |
759 | 766 | #endif |
760 | 767 | #ifdef CORE_INT3_PIN |
761 | | - static void isr3(void) { update(interruptArgs[3]); } |
| 768 | + static ENCODER_ISR_ATTR void isr3(void) { update(interruptArgs[3]); } |
762 | 769 | #endif |
763 | 770 | #ifdef CORE_INT4_PIN |
764 | | - static void isr4(void) { update(interruptArgs[4]); } |
| 771 | + static ENCODER_ISR_ATTR void isr4(void) { update(interruptArgs[4]); } |
765 | 772 | #endif |
766 | 773 | #ifdef CORE_INT5_PIN |
767 | | - static void isr5(void) { update(interruptArgs[5]); } |
| 774 | + static ENCODER_ISR_ATTR void isr5(void) { update(interruptArgs[5]); } |
768 | 775 | #endif |
769 | 776 | #ifdef CORE_INT6_PIN |
770 | | - static void isr6(void) { update(interruptArgs[6]); } |
| 777 | + static ENCODER_ISR_ATTR void isr6(void) { update(interruptArgs[6]); } |
771 | 778 | #endif |
772 | 779 | #ifdef CORE_INT7_PIN |
773 | | - static void isr7(void) { update(interruptArgs[7]); } |
| 780 | + static ENCODER_ISR_ATTR void isr7(void) { update(interruptArgs[7]); } |
774 | 781 | #endif |
775 | 782 | #ifdef CORE_INT8_PIN |
776 | | - static void isr8(void) { update(interruptArgs[8]); } |
| 783 | + static ENCODER_ISR_ATTR void isr8(void) { update(interruptArgs[8]); } |
777 | 784 | #endif |
778 | 785 | #ifdef CORE_INT9_PIN |
779 | | - static void isr9(void) { update(interruptArgs[9]); } |
| 786 | + static ENCODER_ISR_ATTR void isr9(void) { update(interruptArgs[9]); } |
780 | 787 | #endif |
781 | 788 | #ifdef CORE_INT10_PIN |
782 | | - static void isr10(void) { update(interruptArgs[10]); } |
| 789 | + static ENCODER_ISR_ATTR void isr10(void) { update(interruptArgs[10]); } |
783 | 790 | #endif |
784 | 791 | #ifdef CORE_INT11_PIN |
785 | | - static void isr11(void) { update(interruptArgs[11]); } |
| 792 | + static ENCODER_ISR_ATTR void isr11(void) { update(interruptArgs[11]); } |
786 | 793 | #endif |
787 | 794 | #ifdef CORE_INT12_PIN |
788 | | - static void isr12(void) { update(interruptArgs[12]); } |
| 795 | + static ENCODER_ISR_ATTR void isr12(void) { update(interruptArgs[12]); } |
789 | 796 | #endif |
790 | 797 | #ifdef CORE_INT13_PIN |
791 | | - static void isr13(void) { update(interruptArgs[13]); } |
| 798 | + static ENCODER_ISR_ATTR void isr13(void) { update(interruptArgs[13]); } |
792 | 799 | #endif |
793 | 800 | #ifdef CORE_INT14_PIN |
794 | | - static void isr14(void) { update(interruptArgs[14]); } |
| 801 | + static ENCODER_ISR_ATTR void isr14(void) { update(interruptArgs[14]); } |
795 | 802 | #endif |
796 | 803 | #ifdef CORE_INT15_PIN |
797 | | - static void isr15(void) { update(interruptArgs[15]); } |
| 804 | + static ENCODER_ISR_ATTR void isr15(void) { update(interruptArgs[15]); } |
798 | 805 | #endif |
799 | 806 | #ifdef CORE_INT16_PIN |
800 | | - static void isr16(void) { update(interruptArgs[16]); } |
| 807 | + static ENCODER_ISR_ATTR void isr16(void) { update(interruptArgs[16]); } |
801 | 808 | #endif |
802 | 809 | #ifdef CORE_INT17_PIN |
803 | | - static void isr17(void) { update(interruptArgs[17]); } |
| 810 | + static ENCODER_ISR_ATTR void isr17(void) { update(interruptArgs[17]); } |
804 | 811 | #endif |
805 | 812 | #ifdef CORE_INT18_PIN |
806 | | - static void isr18(void) { update(interruptArgs[18]); } |
| 813 | + static ENCODER_ISR_ATTR void isr18(void) { update(interruptArgs[18]); } |
807 | 814 | #endif |
808 | 815 | #ifdef CORE_INT19_PIN |
809 | | - static void isr19(void) { update(interruptArgs[19]); } |
| 816 | + static ENCODER_ISR_ATTR void isr19(void) { update(interruptArgs[19]); } |
810 | 817 | #endif |
811 | 818 | #ifdef CORE_INT20_PIN |
812 | | - static void isr20(void) { update(interruptArgs[20]); } |
| 819 | + static ENCODER_ISR_ATTR void isr20(void) { update(interruptArgs[20]); } |
813 | 820 | #endif |
814 | 821 | #ifdef CORE_INT21_PIN |
815 | | - static void isr21(void) { update(interruptArgs[21]); } |
| 822 | + static ENCODER_ISR_ATTR void isr21(void) { update(interruptArgs[21]); } |
816 | 823 | #endif |
817 | 824 | #ifdef CORE_INT22_PIN |
818 | | - static void isr22(void) { update(interruptArgs[22]); } |
| 825 | + static ENCODER_ISR_ATTR void isr22(void) { update(interruptArgs[22]); } |
819 | 826 | #endif |
820 | 827 | #ifdef CORE_INT23_PIN |
821 | | - static void isr23(void) { update(interruptArgs[23]); } |
| 828 | + static ENCODER_ISR_ATTR void isr23(void) { update(interruptArgs[23]); } |
822 | 829 | #endif |
823 | 830 | #ifdef CORE_INT24_PIN |
824 | | - static void isr24(void) { update(interruptArgs[24]); } |
| 831 | + static ENCODER_ISR_ATTR void isr24(void) { update(interruptArgs[24]); } |
825 | 832 | #endif |
826 | 833 | #ifdef CORE_INT25_PIN |
827 | | - static void isr25(void) { update(interruptArgs[25]); } |
| 834 | + static ENCODER_ISR_ATTR void isr25(void) { update(interruptArgs[25]); } |
828 | 835 | #endif |
829 | 836 | #ifdef CORE_INT26_PIN |
830 | | - static void isr26(void) { update(interruptArgs[26]); } |
| 837 | + static ENCODER_ISR_ATTR void isr26(void) { update(interruptArgs[26]); } |
831 | 838 | #endif |
832 | 839 | #ifdef CORE_INT27_PIN |
833 | | - static void isr27(void) { update(interruptArgs[27]); } |
| 840 | + static ENCODER_ISR_ATTR void isr27(void) { update(interruptArgs[27]); } |
834 | 841 | #endif |
835 | 842 | #ifdef CORE_INT28_PIN |
836 | | - static void isr28(void) { update(interruptArgs[28]); } |
| 843 | + static ENCODER_ISR_ATTR void isr28(void) { update(interruptArgs[28]); } |
837 | 844 | #endif |
838 | 845 | #ifdef CORE_INT29_PIN |
839 | | - static void isr29(void) { update(interruptArgs[29]); } |
| 846 | + static ENCODER_ISR_ATTR void isr29(void) { update(interruptArgs[29]); } |
840 | 847 | #endif |
841 | 848 | #ifdef CORE_INT30_PIN |
842 | | - static void isr30(void) { update(interruptArgs[30]); } |
| 849 | + static ENCODER_ISR_ATTR void isr30(void) { update(interruptArgs[30]); } |
843 | 850 | #endif |
844 | 851 | #ifdef CORE_INT31_PIN |
845 | | - static void isr31(void) { update(interruptArgs[31]); } |
| 852 | + static ENCODER_ISR_ATTR void isr31(void) { update(interruptArgs[31]); } |
846 | 853 | #endif |
847 | 854 | #ifdef CORE_INT32_PIN |
848 | | - static void isr32(void) { update(interruptArgs[32]); } |
| 855 | + static ENCODER_ISR_ATTR void isr32(void) { update(interruptArgs[32]); } |
849 | 856 | #endif |
850 | 857 | #ifdef CORE_INT33_PIN |
851 | | - static void isr33(void) { update(interruptArgs[33]); } |
| 858 | + static ENCODER_ISR_ATTR void isr33(void) { update(interruptArgs[33]); } |
852 | 859 | #endif |
853 | 860 | #ifdef CORE_INT34_PIN |
854 | | - static void isr34(void) { update(interruptArgs[34]); } |
| 861 | + static ENCODER_ISR_ATTR void isr34(void) { update(interruptArgs[34]); } |
855 | 862 | #endif |
856 | 863 | #ifdef CORE_INT35_PIN |
857 | | - static void isr35(void) { update(interruptArgs[35]); } |
| 864 | + static ENCODER_ISR_ATTR void isr35(void) { update(interruptArgs[35]); } |
858 | 865 | #endif |
859 | 866 | #ifdef CORE_INT36_PIN |
860 | | - static void isr36(void) { update(interruptArgs[36]); } |
| 867 | + static ENCODER_ISR_ATTR void isr36(void) { update(interruptArgs[36]); } |
861 | 868 | #endif |
862 | 869 | #ifdef CORE_INT37_PIN |
863 | | - static void isr37(void) { update(interruptArgs[37]); } |
| 870 | + static ENCODER_ISR_ATTR void isr37(void) { update(interruptArgs[37]); } |
864 | 871 | #endif |
865 | 872 | #ifdef CORE_INT38_PIN |
866 | | - static void isr38(void) { update(interruptArgs[38]); } |
| 873 | + static ENCODER_ISR_ATTR void isr38(void) { update(interruptArgs[38]); } |
867 | 874 | #endif |
868 | 875 | #ifdef CORE_INT39_PIN |
869 | | - static void isr39(void) { update(interruptArgs[39]); } |
| 876 | + static ENCODER_ISR_ATTR void isr39(void) { update(interruptArgs[39]); } |
870 | 877 | #endif |
871 | 878 | #ifdef CORE_INT40_PIN |
872 | | - static void isr40(void) { update(interruptArgs[40]); } |
| 879 | + static ENCODER_ISR_ATTR void isr40(void) { update(interruptArgs[40]); } |
873 | 880 | #endif |
874 | 881 | #ifdef CORE_INT41_PIN |
875 | | - static void isr41(void) { update(interruptArgs[41]); } |
| 882 | + static ENCODER_ISR_ATTR void isr41(void) { update(interruptArgs[41]); } |
876 | 883 | #endif |
877 | 884 | #ifdef CORE_INT42_PIN |
878 | | - static void isr42(void) { update(interruptArgs[42]); } |
| 885 | + static ENCODER_ISR_ATTR void isr42(void) { update(interruptArgs[42]); } |
879 | 886 | #endif |
880 | 887 | #ifdef CORE_INT43_PIN |
881 | | - static void isr43(void) { update(interruptArgs[43]); } |
| 888 | + static ENCODER_ISR_ATTR void isr43(void) { update(interruptArgs[43]); } |
882 | 889 | #endif |
883 | 890 | #ifdef CORE_INT44_PIN |
884 | | - static void isr44(void) { update(interruptArgs[44]); } |
| 891 | + static ENCODER_ISR_ATTR void isr44(void) { update(interruptArgs[44]); } |
885 | 892 | #endif |
886 | 893 | #ifdef CORE_INT45_PIN |
887 | | - static void isr45(void) { update(interruptArgs[45]); } |
| 894 | + static ENCODER_ISR_ATTR void isr45(void) { update(interruptArgs[45]); } |
888 | 895 | #endif |
889 | 896 | #ifdef CORE_INT46_PIN |
890 | | - static void isr46(void) { update(interruptArgs[46]); } |
| 897 | + static ENCODER_ISR_ATTR void isr46(void) { update(interruptArgs[46]); } |
891 | 898 | #endif |
892 | 899 | #ifdef CORE_INT47_PIN |
893 | | - static void isr47(void) { update(interruptArgs[47]); } |
| 900 | + static ENCODER_ISR_ATTR void isr47(void) { update(interruptArgs[47]); } |
894 | 901 | #endif |
895 | 902 | #ifdef CORE_INT48_PIN |
896 | | - static void isr48(void) { update(interruptArgs[48]); } |
| 903 | + static ENCODER_ISR_ATTR void isr48(void) { update(interruptArgs[48]); } |
897 | 904 | #endif |
898 | 905 | #ifdef CORE_INT49_PIN |
899 | | - static void isr49(void) { update(interruptArgs[49]); } |
| 906 | + static ENCODER_ISR_ATTR void isr49(void) { update(interruptArgs[49]); } |
900 | 907 | #endif |
901 | 908 | #ifdef CORE_INT50_PIN |
902 | | - static void isr50(void) { update(interruptArgs[50]); } |
| 909 | + static ENCODER_ISR_ATTR void isr50(void) { update(interruptArgs[50]); } |
903 | 910 | #endif |
904 | 911 | #ifdef CORE_INT51_PIN |
905 | | - static void isr51(void) { update(interruptArgs[51]); } |
| 912 | + static ENCODER_ISR_ATTR void isr51(void) { update(interruptArgs[51]); } |
906 | 913 | #endif |
907 | 914 | #ifdef CORE_INT52_PIN |
908 | | - static void isr52(void) { update(interruptArgs[52]); } |
| 915 | + static ENCODER_ISR_ATTR void isr52(void) { update(interruptArgs[52]); } |
909 | 916 | #endif |
910 | 917 | #ifdef CORE_INT53_PIN |
911 | | - static void isr53(void) { update(interruptArgs[53]); } |
| 918 | + static ENCODER_ISR_ATTR void isr53(void) { update(interruptArgs[53]); } |
912 | 919 | #endif |
913 | 920 | #ifdef CORE_INT54_PIN |
914 | | - static void isr54(void) { update(interruptArgs[54]); } |
| 921 | + static ENCODER_ISR_ATTR void isr54(void) { update(interruptArgs[54]); } |
915 | 922 | #endif |
916 | 923 | #ifdef CORE_INT55_PIN |
917 | | - static void isr55(void) { update(interruptArgs[55]); } |
| 924 | + static ENCODER_ISR_ATTR void isr55(void) { update(interruptArgs[55]); } |
918 | 925 | #endif |
919 | 926 | #ifdef CORE_INT56_PIN |
920 | | - static void isr56(void) { update(interruptArgs[56]); } |
| 927 | + static ENCODER_ISR_ATTR void isr56(void) { update(interruptArgs[56]); } |
921 | 928 | #endif |
922 | 929 | #ifdef CORE_INT57_PIN |
923 | | - static void isr57(void) { update(interruptArgs[57]); } |
| 930 | + static ENCODER_ISR_ATTR void isr57(void) { update(interruptArgs[57]); } |
924 | 931 | #endif |
925 | 932 | #ifdef CORE_INT58_PIN |
926 | | - static void isr58(void) { update(interruptArgs[58]); } |
| 933 | + static ENCODER_ISR_ATTR void isr58(void) { update(interruptArgs[58]); } |
927 | 934 | #endif |
928 | 935 | #ifdef CORE_INT59_PIN |
929 | | - static void isr59(void) { update(interruptArgs[59]); } |
| 936 | + static ENCODER_ISR_ATTR void isr59(void) { update(interruptArgs[59]); } |
930 | 937 | #endif |
931 | 938 | #endif |
932 | 939 | }; |
|
0 commit comments