From c51fe85472bb85f85e4dd3b972d34733493cd86e Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Tue, 10 Dec 2013 17:09:51 +0000 Subject: [PATCH] 20131210-181002 --- Button/Button.atsuo | Bin 19968 -> 20480 bytes Button/Button/Button.cpp | 40 +- Button/Button/Debug/Button.elf | Bin 16049 -> 42578 bytes Button/Button/Debug/Button.hex | 222 ++- Button/Button/Debug/Button.lss | 2262 +++++++++++++++++++++++++++---- Button/Button/Debug/Button.map | 276 +++- Button/Button/Debug/Button.srec | 222 ++- Button/Button/Led.hpp | 3 +- Button/Button/Spi.hpp | 5 +- Button/Button/uart.hpp | 2 + 10 files changed, 2647 insertions(+), 385 deletions(-) diff --git a/Button/Button.atsuo b/Button/Button.atsuo index 1368763c4609141401e5294de8a6a5957111cfa1..6e60b6ff5aa4b08482d6d9ebc4b1b04c851d911b 100644 GIT binary patch delta 1171 zcmYjQeMnPL6uLym^m{|opYHfrp}yYP1G_f!XU#!OXkxyzbM=v{t+UT zJ3YpI0e_9ZIpX=U62Y&CK^E>z4bKX7Y`p;7T1v)*+ z(OhYQJ4^$7cfzTGUro2ZJ*Nsnh_e`m`KKE47lqky(wYZ;frmk*TSFOZim{12m(NQ- zl>L-WL9aT6zsX$V>hDws)LjNI?e#O7Iu1g733#>58k&uMK@OL~+Gb_MrEd{dBO5P! zAgphOPmm({Gh~< zDHS0+xe9u7F_arOt9M|%6!)5kf{{7?YD)hJn(1z^?K-aMhVE)VTDv;_q^?k!yZ(ox{m_dqk!wnlR%4h%P0&*W z!5*WC5~J7%L01PQNJ^0C&(a5<)513qdKgqBv~$;8&v5QN=lkwC_uO;uXv0K%PQrsM z*&c7bLV|pE((rWIr3WiN3CEy#V1WNB5+|CesPHH!7c_x~ep3_7@`a!!^XxB9-!k1K zT(~1d5#2~oOd=^jH+gT7 zwMDR_V~GKVRiT^4jUgZr7_c=8N6<`&@^SmonBri|)?gxe6tueCpr%BEBo_jUEDk8~ zOc+ncGN3fSg)u3VNEkwPDW zIFO-jGe;TSI55ve`eZm;gd9XOV~pxrVcZOAkcDcdq5txD<8dm zQA9WL=2)?t1kvi;#g%Vhk|ycgs}^FzaDN zlcG%OGc;bHQt3XqJ6FK6y9h$Qbok;a56X79?J0)$LJef4Cc#H0UcgRH@tUEiTuK9g)(0H@Adkpo)4f^ z_F0QwPIj-oJHKAg|09r4+chVEmLusIRUyJnK5@eAsVQ^a#}loN^dZoyXW|DZ!*^T_ zBbNgLH2O+mrt-LTqqAPSxAt_TxoySqePc*AV}^=gt`nU8oX8VU{qvFgR%;X!If`Y{ zH)t6~Bi2_;eIu=t>BVog@tdb6Z?x4i_NOb3>-|gXDTU!wH+*(W6Lo$f9K*mknuY#% zYW+E=x4FTnkL;lv4Hg12&y(FN8uOfn2H62=LN>78b_i8vhykXX>A;(h2jUGN;^e69 KQkFng&in@f(JI{l diff --git a/Button/Button/Button.cpp b/Button/Button/Button.cpp index 4eae6f7..c664efa 100644 --- a/Button/Button/Button.cpp +++ b/Button/Button/Button.cpp @@ -24,7 +24,7 @@ outclass o; //////////////////// LED ////////////////////////////////////////// typedef Led ledclass; ledclass l; -/*///////////////////////// UART //////////////////////////////////// +///////////////////////// UART //////////////////////////////////// typedef Uart<9600> uartclass; uartclass u; ///////////////////////// SPI ///////////////////////////////////// @@ -32,7 +32,7 @@ typedef Spi spiclass; spiclass s; ///////////////////////// CAN ///////////////////////////////////// typedef Can canclass; -canclass c;*/ +canclass c;//*/ uint8_t button_id = 1; @@ -66,26 +66,28 @@ uint8_t button_id = 1; int main(void) { + sei(); + CANMessage m; //init(); -while(1) { - l.setColor(0xAA,0xFE,0x63); - /*for(uint16_t i=0; i<0xFF; i++) { - asm volatile ("nop"); - }*/ - _delay_ms(350); - l.setColor(0xFE,0xFE,0xFE); - /*for(uint16_t i=0; i<0xFF; i++) { - asm volatile ("nop"); - }*/ - _delay_ms(350); - l.rainbow(5); -} while(1) { + m.length = 1; + m.data[0] = 1; + m.id = 1; + c.can_send_message(&m); + u.send("gesendet..\n"); _delay_ms(2000); - - _delay_ms(2000); - + l.setColor(0xAA,0xFE,0x63); + /*for(uint16_t i=0; i<0xFF; i++) { + asm volatile ("nop"); + }*/ + _delay_ms(350); + l.setColor(0xFE,0xFE,0xFE); + /*for(uint16_t i=0; i<0xFF; i++) { + asm volatile ("nop"); + }*/ + _delay_ms(350); + l.rainbow(5); /*CANMessage m; if(0xff != c.can_get_message(&m)) { if(m.data[0] == button_id) { @@ -115,5 +117,5 @@ while(1) { } ISR(TIMER2_COMP_vect) { //l.color(l.RED); - //l.timer(); + l.timer(); } \ No newline at end of file diff --git a/Button/Button/Debug/Button.elf b/Button/Button/Debug/Button.elf index be3b8847e786b10591e7e6805b01552cda56dcde..162a4164368df056e20255e8e0690a5ec8fbee76 100644 GIT binary patch literal 42578 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 literal 16049 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 W!thi|b*zAN_VmR=!M=bDMEpO;kZark diff --git a/Button/Button/Debug/Button.hex b/Button/Button/Debug/Button.hex index 9915310..694512a 100644 --- a/Button/Button/Debug/Button.hex +++ b/Button/Button/Debug/Button.hex @@ -1,34 +1,198 @@ :100000000C942B000C9453000C9453000C9453004C -:100010000C94D5000C9453000C9453000C94530092 +:100010000C94A8000C9453000C9453000C945300BF :100020000C9453000C9453000C9453000C94530004 :100030000C9453000C9453000C9453000C945300F4 :100040000C9453000C9453000C9453000C945300E4 -:100050000C945300DF0011241FBECFE5D8E0DEBFB3 -:10006000CDBF10E0A0E6B0E0EEEFF1E002C00590F9 -:100070000D92A236B107D9F720E0A2E6B0E001C0A8 -:100080001D92A636B207E1F710E0C6E5D0E004C045 -:100090002297FE010E94F900C435D107C9F70E94DA -:1000A0009B000C94FD000C94000080FF02C0A89AF5 -:1000B00001C0A898A09A81FF02C0A99A01C0A9987E -:1000C000A19A82FF02C0AA9A01C0AA98A29A089592 -:1000D000CF92DF92EF92FF920F931F93CF93DF9314 -:1000E000D82EC62EC0E0D0E019C08D2D0E9455003C -:1000F0001F5F1F3FD1F700E010E005C08C2D0E946C -:1001000055000F5F1F4F0C171D07C4F3FA9411F031 -:100110001E2DEBCF2196CF3FD10521F0EC2E85E0AF -:10012000F82EF6CFDF91CF911F910F91FF90EF90B6 -:10013000DF90CF9008951AEACEEFD3E610936200D5 -:10014000C0936300D09364002FEF86E191E12150CA -:1001500080409040E1F700C00000C0936200C0936F -:100160006300C09364002FEF86E191E1215080404D -:100170009040E1F700C0000066E084E00E94680063 -:1001800062E086E00E94680063E082E00E9468000E -:1001900061E083E00E94680065E081E00E94680001 -:1001A00064E085E00E946800C9CF1F920F920FB6ED -:1001B0000F9211240F900FBE0F901F901895A59AC3 -:1001C000AD98A59AA49AAC98A49A10926200109245 -:1001D000630010926400A29AA19AA09A12BC85E0D2 -:1001E00085BD14BC13BC80E889BF78940895EE0FD8 -:0E01F000FF1F0590F491E02D0994F894FFCFC5 -:0201FE000100FE +:100050000C945300FB0211241FBECFE5D8E0DEBF95 +:10006000CDBF10E0A0E6B0E0ECE1FCE002C00590FE +:100070000D92A039B107D9F720E0A0E9B0E001C0A6 +:100080001D92A839B207E1F710E0C6E5D0E004C040 +:100090002297FE010E943303C435D107C9F70E949D +:1000A00077020C940C060C940000FC0103C05D9BCD +:1000B000FECF8CB981918111FACF0895BD9A089530 +:1000C000BF9A089580FF02C0A89A01C0A898A09A7C +:1000D00081FF02C0A99A01C0A998A19A82FF02C01B +:1000E000AA9A01C0AA98A29A0895CF92DF92EF929D +:1000F000FF920F931F93CF93DF93D82EC62EC0E0AD +:10010000D0E019C08D2D0E9462001F5F1F3FD1F704 +:1001100000E010E005C08C2D0E9462000F5F1F4FB1 +:100120000C171D07C4F3FA9411F01E2DEBCF219686 +:10013000CF3FD10521F0EC2E85E0F82EF6CFDF91F0 +:10014000CF911F910F91FF90EF90DF90CF90089586 +:100150001F920F920FB60F9211242F933F934F933C +:100160005F936F937F938F939F93AF93BF93CF933F +:10017000EF93FF93C0E080919400C81710F080E0E7 +:1001800001C084E090919500C91708F482609091B5 +:100190009600C91708F481600E946200CF5FCF3FCC +:1001A00051F7FF91EF91CF91BF91AF919F918F91B7 +:1001B0007F916F915F914F913F912F910F900FBE63 +:1001C0000F901F901895EF92FF920F931F93CF936C +:1001D000DF93CDB7DEB7E2970FB6F894DEBF0FBE60 +:1001E000CDBFE62E1F926F9381E690E09F938F9391 +:1001F0008E010F5F1F4F1F930F930E943703C8019B +:100200000E945500EFB80F900F900F900F900F9035 +:100210000F90779BFECF8FB118E0F12CFF0CC798A1 +:100220000E946000E7FE02C0C59A01C0C5980E9406 +:100230005E0085E08A95F1F70000B69B02C081E080 +:10024000F82A85E08A95F1F70000C79A0E946000BD +:100250008AE08A95F1F700C0EE0C1150F9F61F9272 +:10026000FF922BE630E03F932F938E010F5F1F4FDD +:100270001F930F930E943703C8010E9455000F90EF +:100280000F900F900F900F900F908F2DE2960FB65A +:10029000F894DEBF0FBECDBFDF91CF911F910F91BC +:1002A000FF90EF900895C498BC9A0895C49ABC9AA0 +:1002B0000895FF920F931F93CF93DF931F92CDB7B3 +:1002C000DEB7F82E092F162F49830E94530162E0F2 +:1002D0008F2D902F0E94E300612F8F2D902F0E9471 +:1002E000E3004981642F8F2D902F0E94E3000F902F +:1002F000DF91CF911F910F91FF900C945601CF93F6 +:10030000DF93EC010E94530160ECCE010E94E300F8 +:100310008FE99FE00197F1F700C000000E945601AD +:100320008FE39CE90197F1F700C0000047E06AE223 +:10033000CE010E94590140E969E2CE010E945901B3 +:1003400042E068E2CE010E94590143E06BE2CE0137 +:100350000E94590140E660E6CE010E94590140E644 +:1003600060E7CE010E94590140E060E2CE010E94A8 +:10037000590140E061E2CE010E94590140E062E291 +:10038000CE010E94590140E063E2CE010E94590172 +:1003900040E064E2CE010E94590140E065E2CE01F6 +:1003A0000E94590140E066E2CE010E94590140E0FE +:1003B00067E2CE010E94590140E06CE0CE01DF917E +:1003C000CF910C945901AF92BF92CF92DF92EF92EE +:1003D000FF920F931F93CF93DF931F92CDB7DEB79A +:1003E0006C018B010E94530160EAC6010E94E30088 +:1003F0006FEFC6010E94E30089836FEFC6010E9480 +:10040000E3000E945601898182FF09C0898184FF2F +:1004100008C0898186FD5EC044E0B42E04C0B12CC2 +:1004200002C032E0B32E0E9453016B2D6064C601FE +:100430000E94E300F8016081718123E07695679561 +:100440002A95E1F7C6010E94E300F80160816295F8 +:10045000660F607EC6010E94E30060E0C6010E9454 +:10046000E30060E0C6010E94E300F801A380F8E029 +:10047000FA1510F498E0A92EF80182816A2D8823DC +:1004800029F06064C6010E94E30012C0C6010E9408 +:10049000E300E12CF12C0AC0F801EE0DFF1D648190 +:1004A000C6010E94E300FFEFEF1AFF0AEA14A0F36F +:1004B0000E94560100000E945301B11002C061E881 +:1004C00002C06B2D6068C6010E94E3000E945601C5 +:1004D00081E001C080E00F90DF91CF911F910F91DB +:1004E000FF90EF90DF90CF90BF90AF900895CF93A3 +:1004F000DF93CDB7DEB72C970FB6F894DEBF0FBEF3 +:10050000CDBF7894EE24E39401E010E05AEAC52EC2 +:100510006EEFF62E73E6D72EEC82ED821A830983F6 +:10052000BE016F5F7F4F80E990E00E94E30187E7A3 +:1005300090E00E9455002FEF87EA91E6215080401D +:100540009040E1F700C00000C0929400F092950046 +:10055000D09296002FEF86E191E1215080409040AB +:10056000E1F700C00000F0929400F0929500F09244 +:1005700096002FEF86E191E1215080409040E1F715 +:1005800000C0000066E084E00E94750062E086E042 +:100590000E94750063E082E00E94750061E083E0E4 +:1005A0000E94750065E081E00E94750064E085E0CE +:1005B0000E947500B1CF87E689B988E08AB986E8DC +:1005C00080BD83E890E00E9455000E945E00C598BF +:1005D0000E945E000E946000C7980E946000BC9A62 +:1005E0000E945601BE98C698C698BE9A80E58DB9FD +:1005F00081E08EB908951F93CF93DF93A59AAD98AC +:10060000A59AA49AAC98A49A10929400109295007E +:1006100010929600A29AA19AA09A15BC14BC13BC81 +:1006200019BE17E619B9D8E0DAB9C6E8C0BD83E843 +:1006300090E00E94550082E990E00E94DB0280E990 +:1006400090E00E94DB0219B9DAB9C0BD83E890E0FE +:100650000E94550080E990E0DF91CF911F910C94AA +:100660007F01EE0FFF1F0590F491E02D0994AEE09D +:10067000B0E0EDE3F3E00C94E3050D891E8986E01C +:100680008C831A8309838FEF9FE79E838D83CE012E +:100690004996AC016F89788DCE0101960E9459036D +:1006A000EF81F885E00FF11F10822E96E4E00C94A4 +:1006B000FF05ACE0B0E0EFE5F3E00C94D5057C017C +:1006C0006B018A01FC0117821682838181FFC6C1FA +:1006D00088248394912C8C0E9D1EF7019381F60142 +:1006E00093FD859193FF81916F01882309F4B2C135 +:1006F000853239F493FD859193FF81916F018532A5 +:1007000029F4B70190E00E944B05E7CF512C312C22 +:1007100020E02032A8F48B3261F028F4803251F0CE +:10072000833271F40BC08D3239F0803349F421608B +:1007300028C02260246025C0286023C0206121C019 +:1007400027FD27C0382F30533A3078F426FF06C0F3 +:10075000FAE05F9E300D1124532E13C08AE0389EBC +:10076000300D1124332E20620CC08E3221F426FD70 +:1007700071C1206406C08C3611F4206802C088362E +:1007800041F4F60193FD859193FF81916F018111F1 +:10079000C0CF982F9554933018F09052933028F48E +:1007A0000C5F1F4FFFE3F9830DC0833631F08337B1 +:1007B00071F0833509F05EC023C0F8018081898320 +:1007C0000E5F1F4F44244394512C540115C038012F +:1007D000F2E06F0E711CF801A080B18026FF03C00B +:1007E000652D70E002C06FEF7FEFC5012C870E947E +:1007F00040052C0183012C856FE7262E222218C08C +:100800003801F2E06F0E711CF801A080B18026FF64 +:1008100003C0652D70E002C06FEF7FEFC5012C872C +:100820000E9435052C012C8550E8252E222A8301B3 +:1008300023FC1CC006C0B70180E290E00E944B057B +:100840003A94832D90E048165906A8F30FC0F5019D +:1008500027FC859127FE81915F01B70190E00E94FE +:100860004B0531103A94F1E04F1A510841145104EC +:1008700071F7EDC0843611F0893641F5F80127FF94 +:1008800007C060817181828193810C5F1F4F08C016 +:1008900060817181882777FD8095982F0E5F1F4FAB +:1008A0004FE6B42EB22297FF09C0909580957095BF +:1008B00061957F4F8F4F9F4FF0E8BF2A2AE030E0CD +:1008C000A4010E947705A82EA81843C0853731F4EB +:1008D0003FEEB32EB2222AE030E024C099EFB92EC9 +:1008E000B2228F36B9F020F4883509F0B3C00DC0BC +:1008F000803721F0883709F0ADC002C020E1B22A6C +:10090000B4FE0BC084E0B82A08C024FF09C0E6E0AA +:10091000BE2A06C028E030E005C020E130E002C079 +:1009200020E132E0F801B7FE07C060817181828169 +:1009300093810C5F1F4F06C06081718180E090E061 +:100940000E5F1F4FA4010E947705A82EA818FFE78D +:10095000BF22B6FE0BC02B2D2E7FA51450F4B4FE83 +:100960000AC0B2FC08C02B2D2E7E05C07A2C2B2D80 +:1009700003C07A2C01C0752C24FF0DC0FE01EA0DC6 +:10098000F11D8081803311F4297E09C022FF06C049 +:100990007394739404C0822F867809F0739423FDB6 +:1009A00014C020FF0FC05A2C731460F4530C571856 +:1009B000732C08C0B70180E290E02C870E944B05A1 +:1009C00073942C857314B0F304C0731410F43718A7 +:1009D00001C0312C24FF12C0B70180E390E02C87C6 +:1009E0000E944B052C8522FF1EC021FF03C088E515 +:1009F00090E002C088E790E0B7010CC0822F8678B3 +:100A000091F021FD02C080E201C08BE227FD8DE262 +:100A1000B70190E00E944B0506C0B70180E390E06B +:100A20000E944B055A94A514C0F3AA94F401EA0D50 +:100A3000F11DB701808190E00E944B05A110F5CF18 +:100A400006C0B70180E290E00E944B053A94311055 +:100A5000F8CF43CEF7012681378102C02FEF3FEF59 +:100A6000C9012C96E2E10C94F105FC01059061505E +:100A700070400110D8F7809590958E0F9F1F0895B4 +:100A8000FC016150704001900110D8F7809590955D +:100A90008E0F9F1F08950F931F93CF93DF938C01A9 +:100AA000EB018B8181FD03C00FEF1FEF1AC082FFA6 +:100AB0000DC02E813F818C819D812817390764F4F8 +:100AC000E881F9810193F983E88306C0E885F98517 +:100AD000802F0995892B41F78E819F8101969F83F5 +:100AE0008E83C801DF91CF911F910F910895FA0174 +:100AF000AA27283051F1203181F1E8946F936E7F5D +:100B00006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E04D +:100B10003CD0670F781F891F9A1FA11D680F791F8E +:100B20008A1F911DA11D6A0F711D811D911DA11D9F +:100B300020D009F468943F912AE0269F11243019AF +:100B4000305D3193DEF6CF010895462F4770405D4A +:100B50004193B3E00FD0C9F7F6CF462F4F70405DF9 +:100B60004A3318F0495D31FD4052419302D0A9F754 +:100B7000EACFB4E0A6959795879577956795BA954E +:100B8000C9F700976105710508959B01AC010A2E14 +:100B900006945795479537952795BA95C9F7620FEB +:100BA000731F841F951FA01D08952F923F924F928F +:100BB0005F926F927F928F929F92AF92BF92CF92ED +:100BC000DF92EF92FF920F931F93CF93DF93CDB7F6 +:100BD000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF6E +:100BE00009942A88398848885F846E847D848C843F +:100BF0009B84AA84B984C884DF80EE80FD800C8148 +:100C00001B81AA81B981CE0FD11D0FB6F894DEBF2A +:0C0C10000FBECDBFED010895F894FFCF9A +:100C1C00012D3E2030782530327800203C2D2030BC +:100C2C0078253032780A00676573656E6465742EBA +:100C3C002E0A005561727420646F6E65210D0A00D6 :00000001FF diff --git a/Button/Button/Debug/Button.lss b/Button/Button/Debug/Button.lss index 2768df5..7bee74c 100644 --- a/Button/Button/Debug/Button.lss +++ b/Button/Button/Debug/Button.lss @@ -3,33 +3,33 @@ Button.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .text 000001fe 00000000 00000000 00000094 2**1 + 0 .text 00000c1c 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000002 00800060 000001fe 00000292 2**0 + 1 .data 00000030 00800060 00000c1c 00000cb0 2**0 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 00000004 00800062 00800062 00000294 2**0 + 2 .bss 00000008 00800090 00800090 00000ce0 2**0 ALLOC - 3 .stab 000006cc 00000000 00000000 00000294 2**2 + 3 .stab 00000c84 00000000 00000000 00000ce0 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 00000082 00000000 00000000 00000960 2**0 + 4 .stabstr 000001aa 00000000 00000000 00001964 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 000009e2 2**0 + 5 .comment 0000002f 00000000 00000000 00001b0e 2**0 CONTENTS, READONLY - 6 .debug_aranges 00000040 00000000 00000000 00000a11 2**0 + 6 .debug_aranges 000000f0 00000000 00000000 00001b3d 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00001454 00000000 00000000 00000a51 2**0 + 7 .debug_info 00003985 00000000 00000000 00001c2d 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 0000037f 00000000 00000000 00001ea5 2**0 + 8 .debug_abbrev 00000970 00000000 00000000 000055b2 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00000289 00000000 00000000 00002224 2**0 + 9 .debug_line 00000a48 00000000 00000000 00005f22 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000098 00000000 00000000 000024b0 2**2 + 10 .debug_frame 000002d4 00000000 00000000 0000696c 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00000ac2 00000000 00000000 00002548 2**0 + 11 .debug_str 000018ee 00000000 00000000 00006c40 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00000210 00000000 00000000 0000300a 2**0 + 12 .debug_loc 00000dfd 00000000 00000000 0000852e 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000078 00000000 00000000 0000321a 2**0 + 13 .debug_ranges 00000158 00000000 00000000 0000932b 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -39,7 +39,7 @@ Disassembly of section .text: 4: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 8: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> - 10: 0c 94 d5 00 jmp 0x1aa ; 0x1aa <__vector_4> + 10: 0c 94 a8 00 jmp 0x150 ; 0x150 <__vector_4> 14: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 18: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 1c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> @@ -58,7 +58,7 @@ Disassembly of section .text: 50: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 00000054 <__ctors_start>: - 54: df 00 .word 0x00df ; ???? + 54: fb 02 muls r31, r27 00000056 <__ctors_end>: 56: 11 24 eor r1, r1 @@ -72,18 +72,18 @@ Disassembly of section .text: 62: 10 e0 ldi r17, 0x00 ; 0 64: a0 e6 ldi r26, 0x60 ; 96 66: b0 e0 ldi r27, 0x00 ; 0 - 68: ee ef ldi r30, 0xFE ; 254 - 6a: f1 e0 ldi r31, 0x01 ; 1 + 68: ec e1 ldi r30, 0x1C ; 28 + 6a: fc e0 ldi r31, 0x0C ; 12 6c: 02 c0 rjmp .+4 ; 0x72 <__do_copy_data+0x10> 6e: 05 90 lpm r0, Z+ 70: 0d 92 st X+, r0 - 72: a2 36 cpi r26, 0x62 ; 98 + 72: a0 39 cpi r26, 0x90 ; 144 74: b1 07 cpc r27, r17 76: d9 f7 brne .-10 ; 0x6e <__do_copy_data+0xc> 00000078 <__do_clear_bss>: 78: 20 e0 ldi r18, 0x00 ; 0 - 7a: a2 e6 ldi r26, 0x62 ; 98 + 7a: a0 e9 ldi r26, 0x90 ; 144 7c: b0 e0 ldi r27, 0x00 ; 0 7e: 01 c0 rjmp .+2 ; 0x82 <.do_clear_bss_start> @@ -91,7 +91,7 @@ Disassembly of section .text: 80: 1d 92 st X+, r1 00000082 <.do_clear_bss_start>: - 82: a6 36 cpi r26, 0x66 ; 102 + 82: a8 39 cpi r26, 0x98 ; 152 84: b2 07 cpc r27, r18 86: e1 f7 brne .-8 ; 0x80 <.do_clear_bss_loop> @@ -102,371 +102,2141 @@ Disassembly of section .text: 8e: 04 c0 rjmp .+8 ; 0x98 <__do_global_ctors+0x10> 90: 22 97 sbiw r28, 0x02 ; 2 92: fe 01 movw r30, r28 - 94: 0e 94 f9 00 call 0x1f2 ; 0x1f2 <__tablejump__> + 94: 0e 94 33 03 call 0x666 ; 0x666 <__tablejump__> 98: c4 35 cpi r28, 0x54 ; 84 9a: d1 07 cpc r29, r17 9c: c9 f7 brne .-14 ; 0x90 <__do_global_ctors+0x8> - 9e: 0e 94 9b 00 call 0x136 ; 0x136
- a2: 0c 94 fd 00 jmp 0x1fa ; 0x1fa <_exit> + 9e: 0e 94 77 02 call 0x4ee ; 0x4ee
+ a2: 0c 94 0c 06 jmp 0xc18 ; 0xc18 <_exit> 000000a6 <__bad_interrupt>: a6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -000000aa <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10>: +000000aa <_ZN4UartILm9600EE4sendEPKc.isra.2>: + public: + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + aa: fc 01 movw r30, r24 + ac: 03 c0 rjmp .+6 ; 0xb4 <_ZN4UartILm9600EE4sendEPKc.isra.2+0xa> + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + UCSRB = /*(1< + UDR = c; + b2: 8c b9 out 0x0c, r24 ; 12 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + b4: 81 91 ld r24, Z+ + b6: 81 11 cpse r24, r1 + b8: fa cf rjmp .-12 ; 0xae <_ZN4UartILm9600EE4sendEPKc.isra.2+0x4> + { + uart_putchar(*text); + text++; + } + } + ba: 08 95 ret + +000000bc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.22>: + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + bc: bd 9a sbi 0x17, 5 ; 23 + be: 08 95 ret + +000000c0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23>: + c0: bf 9a sbi 0x17, 7 ; 23 + c2: 08 95 ret + +000000c4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19>: public: Led() { init(); } void color(uint8_t mask) { (mask & (1<<0)) ? blue::make_high() : blue::make_low(); - aa: 80 ff sbrs r24, 0 - ac: 02 c0 rjmp .+4 ; 0xb2 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0x8> + c4: 80 ff sbrs r24, 0 + c6: 02 c0 rjmp .+4 ; 0xcc <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0x8> namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - ae: a8 9a sbi 0x15, 0 ; 21 - b0: 01 c0 rjmp .+2 ; 0xb4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0xa> - b2: a8 98 cbi 0x15, 0 ; 21 + c8: a8 9a sbi 0x15, 0 ; 21 + ca: 01 c0 rjmp .+2 ; 0xce <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0xa> + cc: a8 98 cbi 0x15, 0 ; 21 static uint8_t pin() { return PINC; } static void pin(uint8_t v) { PINC = v; } static uint8_t dir() { return DDRC; } static void dir(uint8_t v) { DDRC = v; } - b4: a0 9a sbi 0x14, 0 ; 20 + ce: a0 9a sbi 0x14, 0 ; 20 (mask & (1<<1)) ? green::make_high() : green::make_low(); - b6: 81 ff sbrs r24, 1 - b8: 02 c0 rjmp .+4 ; 0xbe <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0x14> + d0: 81 ff sbrs r24, 1 + d2: 02 c0 rjmp .+4 ; 0xd8 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0x14> namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - ba: a9 9a sbi 0x15, 1 ; 21 - bc: 01 c0 rjmp .+2 ; 0xc0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0x16> - be: a9 98 cbi 0x15, 1 ; 21 + d4: a9 9a sbi 0x15, 1 ; 21 + d6: 01 c0 rjmp .+2 ; 0xda <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0x16> + d8: a9 98 cbi 0x15, 1 ; 21 static uint8_t pin() { return PINC; } static void pin(uint8_t v) { PINC = v; } static uint8_t dir() { return DDRC; } static void dir(uint8_t v) { DDRC = v; } - c0: a1 9a sbi 0x14, 1 ; 20 + da: a1 9a sbi 0x14, 1 ; 20 (mask & (1<<2)) ? red::make_high() : red::make_low(); - c2: 82 ff sbrs r24, 2 - c4: 02 c0 rjmp .+4 ; 0xca <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0x20> + dc: 82 ff sbrs r24, 2 + de: 02 c0 rjmp .+4 ; 0xe4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0x20> namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - c6: aa 9a sbi 0x15, 2 ; 21 - c8: 01 c0 rjmp .+2 ; 0xcc <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10+0x22> - ca: aa 98 cbi 0x15, 2 ; 21 + e0: aa 9a sbi 0x15, 2 ; 21 + e2: 01 c0 rjmp .+2 ; 0xe6 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19+0x22> + e4: aa 98 cbi 0x15, 2 ; 21 static uint8_t pin() { return PINC; } static void pin(uint8_t v) { PINC = v; } static uint8_t dir() { return DDRC; } static void dir(uint8_t v) { DDRC = v; } - cc: a2 9a sbi 0x14, 2 ; 20 - ce: 08 95 ret + e6: a2 9a sbi 0x14, 2 ; 20 + e8: 08 95 ret -000000d0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18>: +000000ea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34>: fade(GREEN, CYAN, time); fade(CYAN, BLUE, time); fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { - d0: cf 92 push r12 - d2: df 92 push r13 - d4: ef 92 push r14 - d6: ff 92 push r15 - d8: 0f 93 push r16 - da: 1f 93 push r17 - dc: cf 93 push r28 - de: df 93 push r29 - e0: d8 2e mov r13, r24 - e2: c6 2e mov r12, r22 + ea: cf 92 push r12 + ec: df 92 push r13 + ee: ef 92 push r14 + f0: ff 92 push r15 + f2: 0f 93 push r16 + f4: 1f 93 push r17 + f6: cf 93 push r28 + f8: df 93 push r29 + fa: d8 2e mov r13, r24 + fc: c6 2e mov r12, r22 for (uint8_t i=0;i<0xFF;i++) { for(uint8_t k=0;k + fe: c0 e0 ldi r28, 0x00 ; 0 + 100: d0 e0 ldi r29, 0x00 ; 0 + 102: 19 c0 rjmp .+50 ; 0x136 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x4c> color(from); - ea: 8d 2d mov r24, r13 - ec: 0e 94 55 00 call 0xaa ; 0xaa <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10> + 104: 8d 2d mov r24, r13 + 106: 0e 94 62 00 call 0xc4 ; 0xc4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19> fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { for (uint8_t i=0;i<0xFF;i++) { for(uint8_t k=0;k - f6: 00 e0 ldi r16, 0x00 ; 0 - f8: 10 e0 ldi r17, 0x00 ; 0 - fa: 05 c0 rjmp .+10 ; 0x106 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18+0x36> + 10a: 1f 5f subi r17, 0xFF ; 255 + 10c: 1f 3f cpi r17, 0xFF ; 255 + 10e: d1 f7 brne .-12 ; 0x104 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x1a> + 110: 00 e0 ldi r16, 0x00 ; 0 + 112: 10 e0 ldi r17, 0x00 ; 0 + 114: 05 c0 rjmp .+10 ; 0x120 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x36> color(from); } for (int j=0;j + 116: 8c 2d mov r24, r12 + 118: 0e 94 62 00 call 0xc4 ; 0xc4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19> for (uint8_t i=0;i<0xFF;i++) { for(uint8_t k=0;k - 10c: fa 94 dec r15 + 11c: 0f 5f subi r16, 0xFF ; 255 + 11e: 1f 4f sbci r17, 0xFF ; 255 + 120: 0c 17 cp r16, r28 + 122: 1d 07 cpc r17, r29 + 124: c4 f3 brlt .-16 ; 0x116 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x2c> + 126: fa 94 dec r15 fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { for (uint8_t i=0;i<0xFF;i++) { for(uint8_t k=0;k + 128: 11 f0 breq .+4 ; 0x12e <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x44> fade(GREEN, CYAN, time); fade(CYAN, BLUE, time); fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { - 110: 1e 2d mov r17, r14 - 112: eb cf rjmp .-42 ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18+0x1a> - 114: 21 96 adiw r28, 0x01 ; 1 + 12a: 1e 2d mov r17, r14 + 12c: eb cf rjmp .-42 ; 0x104 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x1a> + 12e: 21 96 adiw r28, 0x01 ; 1 for (uint8_t i=0;i<0xFF;i++) { - 116: cf 3f cpi r28, 0xFF ; 255 - 118: d1 05 cpc r29, r1 - 11a: 21 f0 breq .+8 ; 0x124 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18+0x54> - 11c: ec 2e mov r14, r28 + 130: cf 3f cpi r28, 0xFF ; 255 + 132: d1 05 cpc r29, r1 + 134: 21 f0 breq .+8 ; 0x13e <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x54> + 136: ec 2e mov r14, r28 for(uint8_t k=0;k + 138: 85 e0 ldi r24, 0x05 ; 5 + 13a: f8 2e mov r15, r24 + 13c: f6 cf rjmp .-20 ; 0x12a <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34+0x40> for (int j=0;j: - static const uint8_t RED = 4; - static const uint8_t MAGENTA = 5; - static const uint8_t YELLOW = 6; - static const uint8_t WHITE = 7; - void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { - r = cr; - 136: 1a ea ldi r17, 0xAA ; 170 - g = cg; - 138: ce ef ldi r28, 0xFE ; 254 - b = cb; - 13a: d3 e6 ldi r29, 0x63 ; 99 - static const uint8_t RED = 4; - static const uint8_t MAGENTA = 5; - static const uint8_t YELLOW = 6; - static const uint8_t WHITE = 7; - void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { - r = cr; - 13c: 10 93 62 00 sts 0x0062, r17 - g = cg; - 140: c0 93 63 00 sts 0x0063, r28 - b = cb; - 144: d0 93 64 00 sts 0x0064, r29 - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 148: 2f ef ldi r18, 0xFF ; 255 - 14a: 86 e1 ldi r24, 0x16 ; 22 - 14c: 91 e1 ldi r25, 0x11 ; 17 - 14e: 21 50 subi r18, 0x01 ; 1 - 150: 80 40 sbci r24, 0x00 ; 0 - 152: 90 40 sbci r25, 0x00 ; 0 - 154: e1 f7 brne .-8 ; 0x14e - 156: 00 c0 rjmp .+0 ; 0x158 - 158: 00 00 nop - static const uint8_t RED = 4; - static const uint8_t MAGENTA = 5; - static const uint8_t YELLOW = 6; - static const uint8_t WHITE = 7; - void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { - r = cr; - 15a: c0 93 62 00 sts 0x0062, r28 - g = cg; - 15e: c0 93 63 00 sts 0x0063, r28 - b = cb; - 162: c0 93 64 00 sts 0x0064, r28 - 166: 2f ef ldi r18, 0xFF ; 255 - 168: 86 e1 ldi r24, 0x16 ; 22 - 16a: 91 e1 ldi r25, 0x11 ; 17 - 16c: 21 50 subi r18, 0x01 ; 1 - 16e: 80 40 sbci r24, 0x00 ; 0 - 170: 90 40 sbci r25, 0x00 ; 0 - 172: e1 f7 brne .-8 ; 0x16c - 174: 00 c0 rjmp .+0 ; 0x176 - 176: 00 00 nop - (mask & (1<<0)) ? blue::make_high() : blue::make_low(); - (mask & (1<<1)) ? green::make_high() : green::make_low(); - (mask & (1<<2)) ? red::make_high() : red::make_low(); - } - void rainbow(uint8_t time) { - fade(RED, YELLOW, time); - 178: 66 e0 ldi r22, 0x06 ; 6 - 17a: 84 e0 ldi r24, 0x04 ; 4 - 17c: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - fade(YELLOW, GREEN, time); - 180: 62 e0 ldi r22, 0x02 ; 2 - 182: 86 e0 ldi r24, 0x06 ; 6 - 184: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - fade(GREEN, CYAN, time); - 188: 63 e0 ldi r22, 0x03 ; 3 - 18a: 82 e0 ldi r24, 0x02 ; 2 - 18c: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - fade(CYAN, BLUE, time); - 190: 61 e0 ldi r22, 0x01 ; 1 - 192: 83 e0 ldi r24, 0x03 ; 3 - 194: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - fade(BLUE, MAGENTA, time); - 198: 65 e0 ldi r22, 0x05 ; 5 - 19a: 81 e0 ldi r24, 0x01 ; 1 - 19c: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - fade(MAGENTA, RED, time); - 1a0: 64 e0 ldi r22, 0x04 ; 4 - 1a2: 85 e0 ldi r24, 0x05 ; 5 - 1a4: 0e 94 68 00 call 0xd0 ; 0xd0 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18> - 1a8: c9 cf rjmp .-110 ; 0x13c - -000001aa <__vector_4>: +00000150 <__vector_4>: //_delay_ms(10000); } } ISR(TIMER2_COMP_vect) { - 1aa: 1f 92 push r1 - 1ac: 0f 92 push r0 - 1ae: 0f b6 in r0, 0x3f ; 63 - 1b0: 0f 92 push r0 - 1b2: 11 24 eor r1, r1 + 150: 1f 92 push r1 + 152: 0f 92 push r0 + 154: 0f b6 in r0, 0x3f ; 63 + 156: 0f 92 push r0 + 158: 11 24 eor r1, r1 + 15a: 2f 93 push r18 + 15c: 3f 93 push r19 + 15e: 4f 93 push r20 + 160: 5f 93 push r21 + 162: 6f 93 push r22 + 164: 7f 93 push r23 + 166: 8f 93 push r24 + 168: 9f 93 push r25 + 16a: af 93 push r26 + 16c: bf 93 push r27 + 16e: cf 93 push r28 + 170: ef 93 push r30 + 172: ff 93 push r31 + TIMSK=(1< + + } + /* TIMER0_OVF_vect */ + void timer() { + for(uint8_t i=0;i<0xFF;i++) { + uint8_t rgb = 0; + 17e: 80 e0 ldi r24, 0x00 ; 0 + 180: 01 c0 rjmp .+2 ; 0x184 <__vector_4+0x34> + if(i + rgb |= GREEN; + 18c: 82 60 ori r24, 0x02 ; 2 + } + if(i + rgb |= BLUE; + 196: 81 60 ori r24, 0x01 ; 1 + } + color(rgb); + 198: 0e 94 62 00 call 0xc4 ; 0xc4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19> + TIMSK=(1< //l.color(l.RED); - //l.timer(); - 1b4: 0f 90 pop r0 - 1b6: 0f be out 0x3f, r0 ; 63 - 1b8: 0f 90 pop r0 - 1ba: 1f 90 pop r1 - 1bc: 18 95 reti + l.timer(); + 1a2: ff 91 pop r31 + 1a4: ef 91 pop r30 + 1a6: cf 91 pop r28 + 1a8: bf 91 pop r27 + 1aa: af 91 pop r26 + 1ac: 9f 91 pop r25 + 1ae: 8f 91 pop r24 + 1b0: 7f 91 pop r23 + 1b2: 6f 91 pop r22 + 1b4: 5f 91 pop r21 + 1b6: 4f 91 pop r20 + 1b8: 3f 91 pop r19 + 1ba: 2f 91 pop r18 + 1bc: 0f 90 pop r0 + 1be: 0f be out 0x3f, r0 ; 63 + 1c0: 0f 90 pop r0 + 1c2: 1f 90 pop r1 + 1c4: 18 95 reti -000001be <_GLOBAL__sub_I_o>: - 1be: a5 9a sbi 0x14, 5 ; 20 +000001c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh>: + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + 1c6: ef 92 push r14 + 1c8: ff 92 push r15 + 1ca: 0f 93 push r16 + 1cc: 1f 93 push r17 + 1ce: cf 93 push r28 + 1d0: df 93 push r29 + 1d2: cd b7 in r28, 0x3d ; 61 + 1d4: de b7 in r29, 0x3e ; 62 + 1d6: e2 97 sbiw r28, 0x32 ; 50 + 1d8: 0f b6 in r0, 0x3f ; 63 + 1da: f8 94 cli + 1dc: de bf out 0x3e, r29 ; 62 + 1de: 0f be out 0x3f, r0 ; 63 + 1e0: cd bf out 0x3d, r28 ; 61 + 1e2: e6 2e mov r14, r22 + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1e4: 1f 92 push r1 + 1e6: 6f 93 push r22 + 1e8: 81 e6 ldi r24, 0x61 ; 97 + 1ea: 90 e0 ldi r25, 0x00 ; 0 + 1ec: 9f 93 push r25 + 1ee: 8f 93 push r24 + 1f0: 8e 01 movw r16, r28 + 1f2: 0f 5f subi r16, 0xFF ; 255 + 1f4: 1f 4f sbci r17, 0xFF ; 255 + 1f6: 1f 93 push r17 + 1f8: 0f 93 push r16 + 1fa: 0e 94 37 03 call 0x66e ; 0x66e + u.send(t); + 1fe: c8 01 movw r24, r16 + 200: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + } + return datain; + } + uint8_t send_hard(uint8_t data) { + // Sendet ein Byte + SPDR = data; + 204: ef b8 out 0x0f, r14 ; 15 + 206: 0f 90 pop r0 + 208: 0f 90 pop r0 + 20a: 0f 90 pop r0 + 20c: 0f 90 pop r0 + 20e: 0f 90 pop r0 + 210: 0f 90 pop r0 + + // Wartet bis Byte gesendet wurde + loop_until_bit_is_set(SPSR, SPIF); + 212: 77 9b sbis 0x0e, 7 ; 14 + 214: fe cf rjmp .-4 ; 0x212 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x4c> + + return SPDR; + 216: 8f b1 in r24, 0x0f ; 15 + 218: 18 e0 ldi r17, 0x08 ; 8 + void init_spi() { + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 21c: ff 0c add r15, r15 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 21e: c7 98 cbi 0x18, 7 ; 24 + 220: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23> + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 224: e7 fe sbrs r14, 7 + 226: 02 c0 rjmp .+4 ; 0x22c <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x66> + 228: c5 9a sbi 0x18, 5 ; 24 + 22a: 01 c0 rjmp .+2 ; 0x22e <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x68> + 22c: c5 98 cbi 0x18, 5 ; 24 + 22e: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.22> + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 232: 85 e0 ldi r24, 0x05 ; 5 + 234: 8a 95 dec r24 + 236: f1 f7 brne .-4 ; 0x234 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x6e> + 238: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 23a: b6 9b sbis 0x16, 6 ; 22 + 23c: 02 c0 rjmp .+4 ; 0x242 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x7c> + { + datain |= 1; + 23e: 81 e0 ldi r24, 0x01 ; 1 + 240: f8 2a or r15, r24 + 242: 85 e0 ldi r24, 0x05 ; 5 + 244: 8a 95 dec r24 + 246: f1 f7 brne .-4 ; 0x244 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x7e> + 248: 00 00 nop + 24a: c7 9a sbi 0x18, 7 ; 24 + 24c: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23> + 250: 8a e0 ldi r24, 0x0A ; 10 + 252: 8a 95 dec r24 + 254: f1 f7 brne .-4 ; 0x252 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x8c> + 256: 00 c0 rjmp .+0 ; 0x258 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x92> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 258: ee 0c add r14, r14 + 25a: 11 50 subi r17, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 25c: f9 f6 brne .-66 ; 0x21c <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x56> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\n", r); + 25e: 1f 92 push r1 + 260: ff 92 push r15 + 262: 2b e6 ldi r18, 0x6B ; 107 + 264: 30 e0 ldi r19, 0x00 ; 0 + 266: 3f 93 push r19 + 268: 2f 93 push r18 + 26a: 8e 01 movw r16, r28 + 26c: 0f 5f subi r16, 0xFF ; 255 + 26e: 1f 4f sbci r17, 0xFF ; 255 + 270: 1f 93 push r17 + 272: 0f 93 push r16 + 274: 0e 94 37 03 call 0x66e ; 0x66e + u.send(t); + 278: c8 01 movw r24, r16 + 27a: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + return r; + 27e: 0f 90 pop r0 + 280: 0f 90 pop r0 + 282: 0f 90 pop r0 + 284: 0f 90 pop r0 + 286: 0f 90 pop r0 + 288: 0f 90 pop r0 + } + 28a: 8f 2d mov r24, r15 + 28c: e2 96 adiw r28, 0x32 ; 50 + 28e: 0f b6 in r0, 0x3f ; 63 + 290: f8 94 cli + 292: de bf out 0x3e, r29 ; 62 + 294: 0f be out 0x3f, r0 ; 63 + 296: cd bf out 0x3d, r28 ; 61 + 298: df 91 pop r29 + 29a: cf 91 pop r28 + 29c: 1f 91 pop r17 + 29e: 0f 91 pop r16 + 2a0: ff 90 pop r15 + 2a2: ef 90 pop r14 + 2a4: 08 95 ret + +000002a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv>: + 2a6: c4 98 cbi 0x18, 4 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 2a8: bc 9a sbi 0x17, 4 ; 23 + 2aa: 08 95 ret + +000002ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv>: +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2ac: c4 9a sbi 0x18, 4 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 2ae: bc 9a sbi 0x17, 4 ; 23 + 2b0: 08 95 ret + +000002b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh>: + mcp2515_write_register( TXRTSCTRL, 0 ); + + // Device zurueck in den normalen Modus versetzten + mcp2515_bit_modify( CANCTRL, 0xE0, 0); + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + 2b2: ff 92 push r15 + 2b4: 0f 93 push r16 + 2b6: 1f 93 push r17 + 2b8: cf 93 push r28 + 2ba: df 93 push r29 + 2bc: 1f 92 push r1 + 2be: cd b7 in r28, 0x3d ; 61 + 2c0: de b7 in r29, 0x3e ; 62 + 2c2: f8 2e mov r15, r24 + 2c4: 09 2f mov r16, r25 + 2c6: 16 2f mov r17, r22 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 2c8: 49 83 std Y+1, r20 ; 0x01 + 2ca: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 2ce: 62 e0 ldi r22, 0x02 ; 2 + 2d0: 8f 2d mov r24, r15 + 2d2: 90 2f mov r25, r16 + 2d4: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(adress); + 2d8: 61 2f mov r22, r17 + 2da: 8f 2d mov r24, r15 + 2dc: 90 2f mov r25, r16 + 2de: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(data); + 2e2: 49 81 ldd r20, Y+1 ; 0x01 + 2e4: 64 2f mov r22, r20 + 2e6: 8f 2d mov r24, r15 + 2e8: 90 2f mov r25, r16 + 2ea: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // /CS Leitung wieder freigeben + s.CSOff(); + } + 2ee: 0f 90 pop r0 + 2f0: df 91 pop r29 + 2f2: cf 91 pop r28 + 2f4: 1f 91 pop r17 + 2f6: 0f 91 pop r16 + 2f8: ff 90 pop r15 + } + void CSOff() { + cs::make_high(); + 2fa: 0c 94 56 01 jmp 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + +000002fe <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv>: + return (status & 0x07); + } + private: + spiclass s; + uart u; + void init_can() { + 2fe: cf 93 push r28 + 300: df 93 push r29 + 302: ec 01 movw r28, r24 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 304: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + + // MCP2515 per Software Reset zuruecksetzten, + // danach ist der MCP2515 im Configuration Mode + s.CSOn(); + s.send( SPI_RESET ); + 308: 60 ec ldi r22, 0xC0 ; 192 + 30a: ce 01 movw r24, r28 + 30c: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 310: 8f e9 ldi r24, 0x9F ; 159 + 312: 9f e0 ldi r25, 0x0F ; 15 + 314: 01 97 sbiw r24, 0x01 ; 1 + 316: f1 f7 brne .-4 ; 0x314 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x16> + 318: 00 c0 rjmp .+0 ; 0x31a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x1c> + 31a: 00 00 nop + } + void CSOff() { + cs::make_high(); + 31c: 0e 94 56 01 call 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + 320: 8f e3 ldi r24, 0x3F ; 63 + 322: 9c e9 ldi r25, 0x9C ; 156 + 324: 01 97 sbiw r24, 0x01 ; 1 + 326: f1 f7 brne .-4 ; 0x324 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x26> + 328: 00 c0 rjmp .+0 ; 0x32a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x2c> + 32a: 00 00 nop + * Bus speed = 1 / (Total # of TQ) * TQ + * = 1 / 8 * TQ = 125 kHz + */ + + // BRP = 7 + mcp2515_write_register( CNF1, (1< + + // Prop Seg und Phase Seg1 einstellen + mcp2515_write_register( CNF2, (1< + + // Wake-up Filter deaktivieren, Phase Seg2 einstellen + mcp2515_write_register( CNF3, (1< + + // Aktivieren der Rx Buffer Interrupts + mcp2515_write_register( CANINTE, (1< + /* + * Einstellen der Filter + */ + + // Buffer 0 : Empfangen aller Nachrichten + mcp2515_write_register( RXB0CTRL, (1< + + // Buffer 1 : Empfangen aller Nachrichten + mcp2515_write_register( RXB1CTRL, (1< + + // Alle Bits der Empfangsmaske loeschen, + // damit werden alle Nachrichten empfangen + mcp2515_write_register( RXM0SIDH, 0 ); //return; + 368: 40 e0 ldi r20, 0x00 ; 0 + 36a: 60 e2 ldi r22, 0x20 ; 32 + 36c: ce 01 movw r24, r28 + 36e: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0SIDL, 0 ); //return; + 372: 40 e0 ldi r20, 0x00 ; 0 + 374: 61 e2 ldi r22, 0x21 ; 33 + 376: ce 01 movw r24, r28 + 378: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0EID8, 0 ); + 37c: 40 e0 ldi r20, 0x00 ; 0 + 37e: 62 e2 ldi r22, 0x22 ; 34 + 380: ce 01 movw r24, r28 + 382: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0EID0, 0 ); + 386: 40 e0 ldi r20, 0x00 ; 0 + 388: 63 e2 ldi r22, 0x23 ; 35 + 38a: ce 01 movw r24, r28 + 38c: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + + mcp2515_write_register( RXM1SIDH, 0 ); //return; + 390: 40 e0 ldi r20, 0x00 ; 0 + 392: 64 e2 ldi r22, 0x24 ; 36 + 394: ce 01 movw r24, r28 + 396: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1SIDL, 0 ); //return; + 39a: 40 e0 ldi r20, 0x00 ; 0 + 39c: 65 e2 ldi r22, 0x25 ; 37 + 39e: ce 01 movw r24, r28 + 3a0: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1EID8, 0 ); + 3a4: 40 e0 ldi r20, 0x00 ; 0 + 3a6: 66 e2 ldi r22, 0x26 ; 38 + 3a8: ce 01 movw r24, r28 + 3aa: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1EID0, 0 ); + 3ae: 40 e0 ldi r20, 0x00 ; 0 + 3b0: 67 e2 ldi r22, 0x27 ; 39 + 3b2: ce 01 movw r24, r28 + 3b4: 0e 94 59 01 call 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + /* + * Einstellen der Pin Funktionen + */ + + // Deaktivieren der Pins RXnBF Pins (High Impedance State) + mcp2515_write_register( BFPCTRL, 0 ); return; + 3b8: 40 e0 ldi r20, 0x00 ; 0 + 3ba: 6c e0 ldi r22, 0x0C ; 12 + 3bc: ce 01 movw r24, r28 + // TXnRTS Bits als Inputs schalten + mcp2515_write_register( TXRTSCTRL, 0 ); + + // Device zurueck in den normalen Modus versetzten + mcp2515_bit_modify( CANCTRL, 0xE0, 0); + } + 3be: df 91 pop r29 + 3c0: cf 91 pop r28 + /* + * Einstellen der Pin Funktionen + */ + + // Deaktivieren der Pins RXnBF Pins (High Impedance State) + mcp2515_write_register( BFPCTRL, 0 ); return; + 3c2: 0c 94 59 01 jmp 0x2b2 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + +000003c6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage>: + m.data[i] = (uint8_t)va_arg(params, unsigned int); + } + va_end(params); + return can_send_message(&m); + } + uint8_t can_send_message(CANMessage *p_message) { + 3c6: af 92 push r10 + 3c8: bf 92 push r11 + 3ca: cf 92 push r12 + 3cc: df 92 push r13 + 3ce: ef 92 push r14 + 3d0: ff 92 push r15 + 3d2: 0f 93 push r16 + 3d4: 1f 93 push r17 + 3d6: cf 93 push r28 + 3d8: df 93 push r29 + 3da: 1f 92 push r1 + 3dc: cd b7 in r28, 0x3d ; 61 + 3de: de b7 in r29, 0x3e ; 62 + 3e0: 6c 01 movw r12, r24 + 3e2: 8b 01 movw r16, r22 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 3e4: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + uint8_t status, address; + + // Status des MCP2515 auslesen + s.CSOn(); + s.send(SPI_READ_STATUS); + 3e8: 60 ea ldi r22, 0xA0 ; 160 + 3ea: c6 01 movw r24, r12 + 3ec: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + status = s.send(0xff); + 3f0: 6f ef ldi r22, 0xFF ; 255 + 3f2: c6 01 movw r24, r12 + 3f4: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + 3f8: 89 83 std Y+1, r24 ; 0x01 + s.send(0xff); + 3fa: 6f ef ldi r22, 0xFF ; 255 + 3fc: c6 01 movw r24, r12 + 3fe: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + } + void CSOff() { + cs::make_high(); + 402: 0e 94 56 01 call 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + * 2 TXB0CNTRL.TXREQ + * 4 TXB1CNTRL.TXREQ + * 6 TXB2CNTRL.TXREQ + */ + + if (bit_is_clear(status, 2)) { + 406: 89 81 ldd r24, Y+1 ; 0x01 + 408: 82 ff sbrs r24, 2 + 40a: 09 c0 rjmp .+18 ; 0x41e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x58> + address = 0x00; + } + else if (bit_is_clear(status, 4)) { + 40c: 89 81 ldd r24, Y+1 ; 0x01 + 40e: 84 ff sbrs r24, 4 + 410: 08 c0 rjmp .+16 ; 0x422 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x5c> + address = 0x02; + } + else if (bit_is_clear(status, 6)) { + 412: 89 81 ldd r24, Y+1 ; 0x01 + 414: 86 fd sbrc r24, 6 + 416: 5e c0 rjmp .+188 ; 0x4d4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x10e> + address = 0x04; + 418: 44 e0 ldi r20, 0x04 ; 4 + 41a: b4 2e mov r11, r20 + 41c: 04 c0 rjmp .+8 ; 0x426 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x60> + * 4 TXB1CNTRL.TXREQ + * 6 TXB2CNTRL.TXREQ + */ + + if (bit_is_clear(status, 2)) { + address = 0x00; + 41e: b1 2c mov r11, r1 + 420: 02 c0 rjmp .+4 ; 0x426 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x60> + } + else if (bit_is_clear(status, 4)) { + address = 0x02; + 422: 32 e0 ldi r19, 0x02 ; 2 + 424: b3 2e mov r11, r19 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 426: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + Nachricht kann nicht verschickt werden */ + return 0; + } + + s.CSOn(); // CS Low + s.send(SPI_WRITE_TX | address); + 42a: 6b 2d mov r22, r11 + 42c: 60 64 ori r22, 0x40 ; 64 + 42e: c6 01 movw r24, r12 + 430: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Standard ID einstellen + s.send((uint8_t) (p_message->id>>3)); + 434: f8 01 movw r30, r16 + 436: 60 81 ld r22, Z + 438: 71 81 ldd r23, Z+1 ; 0x01 + 43a: 23 e0 ldi r18, 0x03 ; 3 + 43c: 76 95 lsr r23 + 43e: 67 95 ror r22 + 440: 2a 95 dec r18 + 442: e1 f7 brne .-8 ; 0x43c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x76> + 444: c6 01 movw r24, r12 + 446: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send((uint8_t) (p_message->id<<5)); + 44a: f8 01 movw r30, r16 + 44c: 60 81 ld r22, Z + 44e: 62 95 swap r22 + 450: 66 0f add r22, r22 + 452: 60 7e andi r22, 0xE0 ; 224 + 454: c6 01 movw r24, r12 + 456: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Extended ID + s.send(0x00); + 45a: 60 e0 ldi r22, 0x00 ; 0 + 45c: c6 01 movw r24, r12 + 45e: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(0x00); + 462: 60 e0 ldi r22, 0x00 ; 0 + 464: c6 01 movw r24, r12 + 466: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + uint8_t length = p_message->length; + 46a: f8 01 movw r30, r16 + 46c: a3 80 ldd r10, Z+3 ; 0x03 + 46e: f8 e0 ldi r31, 0x08 ; 8 + 470: fa 15 cp r31, r10 + 472: 10 f4 brcc .+4 ; 0x478 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xb2> + 474: 98 e0 ldi r25, 0x08 ; 8 + 476: a9 2e mov r10, r25 + if (length > 8) { + length = 8; + } + + // Ist die Nachricht ein "Remote Transmit Request" ? + if (p_message->rtr) + 478: f8 01 movw r30, r16 + 47a: 82 81 ldd r24, Z+2 ; 0x02 + { + /* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten */ + + // Nachrichten Laenge + RTR einstellen + s.send((1< 8) { + length = 8; + } + + // Ist die Nachricht ein "Remote Transmit Request" ? + if (p_message->rtr) + 47e: 88 23 and r24, r24 + 480: 29 f0 breq .+10 ; 0x48c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xc6> + { + /* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten */ + + // Nachrichten Laenge + RTR einstellen + s.send((1< + 48a: 12 c0 rjmp .+36 ; 0x4b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xea> + } + else + { + // Nachrichten Laenge einstellen + s.send(length); + 48c: c6 01 movw r24, r12 + 48e: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Daten + for (uint8_t i=0;i + m.data[i] = (uint8_t)va_arg(params, unsigned int); + } + va_end(params); + return can_send_message(&m); + } + uint8_t can_send_message(CANMessage *p_message) { + 498: f8 01 movw r30, r16 + 49a: ee 0d add r30, r14 + 49c: ff 1d adc r31, r15 + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;idata[i]); + 49e: 64 81 ldd r22, Z+4 ; 0x04 + 4a0: c6 01 movw r24, r12 + 4a2: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + 4a6: ff ef ldi r31, 0xFF ; 255 + 4a8: ef 1a sub r14, r31 + 4aa: ff 0a sbc r15, r31 + { + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;i + } + void CSOff() { + cs::make_high(); + 4b0: 0e 94 56 01 call 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + s.send(p_message->data[i]); + } + } + s.CSOff(); // CS auf High + + asm volatile ("nop"); + 4b4: 00 00 nop + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 4b6: 0e 94 53 01 call 0x2a6 ; 0x2a6 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + + /* CAN Nachricht verschicken + die letzten drei Bit im RTS Kommando geben an welcher + Puffer gesendet werden soll */ + s.CSOn(); // CS wieder Low + if (address == 0x00) { + 4ba: b1 10 cpse r11, r1 + 4bc: 02 c0 rjmp .+4 ; 0x4c2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xfc> + s.send(SPI_RTS | 0x01); + 4be: 61 e8 ldi r22, 0x81 ; 129 + 4c0: 02 c0 rjmp .+4 ; 0x4c6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x100> + } else { + s.send(SPI_RTS | address); + 4c2: 6b 2d mov r22, r11 + 4c4: 60 68 ori r22, 0x80 ; 128 + 4c6: c6 01 movw r24, r12 + 4c8: 0e 94 e3 00 call 0x1c6 ; 0x1c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + } + void CSOff() { + cs::make_high(); + 4cc: 0e 94 56 01 call 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + } + s.CSOff(); // CS auf High + + return 1; + 4d0: 81 e0 ldi r24, 0x01 ; 1 + 4d2: 01 c0 rjmp .+2 ; 0x4d6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x110> + address = 0x04; + } + else { + /* Alle Puffer sind belegt, + Nachricht kann nicht verschickt werden */ + return 0; + 4d4: 80 e0 ldi r24, 0x00 ; 0 + s.send(SPI_RTS | address); + } + s.CSOff(); // CS auf High + + return 1; + } + 4d6: 0f 90 pop r0 + 4d8: df 91 pop r29 + 4da: cf 91 pop r28 + 4dc: 1f 91 pop r17 + 4de: 0f 91 pop r16 + 4e0: ff 90 pop r15 + 4e2: ef 90 pop r14 + 4e4: df 90 pop r13 + 4e6: cf 90 pop r12 + 4e8: bf 90 pop r11 + 4ea: af 90 pop r10 + 4ec: 08 95 ret + +000004ee
: + + l.color(l.WHITE); +}*/ + +int main(void) +{ + 4ee: cf 93 push r28 + 4f0: df 93 push r29 + 4f2: cd b7 in r28, 0x3d ; 61 + 4f4: de b7 in r29, 0x3e ; 62 + 4f6: 2c 97 sbiw r28, 0x0c ; 12 + 4f8: 0f b6 in r0, 0x3f ; 63 + 4fa: f8 94 cli + 4fc: de bf out 0x3e, r29 ; 62 + 4fe: 0f be out 0x3f, r0 ; 63 + 500: cd bf out 0x3d, r28 ; 61 + sei(); + 502: 78 94 sei + CANMessage m; + //init(); + while(1) + { + m.length = 1; + 504: ee 24 eor r14, r14 + 506: e3 94 inc r14 + m.data[0] = 1; + m.id = 1; + 508: 01 e0 ldi r16, 0x01 ; 1 + 50a: 10 e0 ldi r17, 0x00 ; 0 + static const uint8_t RED = 4; + static const uint8_t MAGENTA = 5; + static const uint8_t YELLOW = 6; + static const uint8_t WHITE = 7; + void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { + r = cr; + 50c: 5a ea ldi r21, 0xAA ; 170 + 50e: c5 2e mov r12, r21 + g = cg; + 510: 6e ef ldi r22, 0xFE ; 254 + 512: f6 2e mov r15, r22 + b = cb; + 514: 73 e6 ldi r23, 0x63 ; 99 + 516: d7 2e mov r13, r23 + sei(); + CANMessage m; + //init(); + while(1) + { + m.length = 1; + 518: ec 82 std Y+4, r14 ; 0x04 + m.data[0] = 1; + 51a: ed 82 std Y+5, r14 ; 0x05 + m.id = 1; + 51c: 1a 83 std Y+2, r17 ; 0x02 + 51e: 09 83 std Y+1, r16 ; 0x01 + c.can_send_message(&m); + 520: be 01 movw r22, r28 + 522: 6f 5f subi r22, 0xFF ; 255 + 524: 7f 4f sbci r23, 0xFF ; 255 + 526: 80 e9 ldi r24, 0x90 ; 144 + 528: 90 e0 ldi r25, 0x00 ; 0 + 52a: 0e 94 e3 01 call 0x3c6 ; 0x3c6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage> + u.send("gesendet..\n"); + 52e: 87 e7 ldi r24, 0x77 ; 119 + 530: 90 e0 ldi r25, 0x00 ; 0 + 532: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + 536: 2f ef ldi r18, 0xFF ; 255 + 538: 87 ea ldi r24, 0xA7 ; 167 + 53a: 91 e6 ldi r25, 0x61 ; 97 + 53c: 21 50 subi r18, 0x01 ; 1 + 53e: 80 40 sbci r24, 0x00 ; 0 + 540: 90 40 sbci r25, 0x00 ; 0 + 542: e1 f7 brne .-8 ; 0x53c + 544: 00 c0 rjmp .+0 ; 0x546 + 546: 00 00 nop + static const uint8_t RED = 4; + static const uint8_t MAGENTA = 5; + static const uint8_t YELLOW = 6; + static const uint8_t WHITE = 7; + void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { + r = cr; + 548: c0 92 94 00 sts 0x0094, r12 + g = cg; + 54c: f0 92 95 00 sts 0x0095, r15 + b = cb; + 550: d0 92 96 00 sts 0x0096, r13 + 554: 2f ef ldi r18, 0xFF ; 255 + 556: 86 e1 ldi r24, 0x16 ; 22 + 558: 91 e1 ldi r25, 0x11 ; 17 + 55a: 21 50 subi r18, 0x01 ; 1 + 55c: 80 40 sbci r24, 0x00 ; 0 + 55e: 90 40 sbci r25, 0x00 ; 0 + 560: e1 f7 brne .-8 ; 0x55a + 562: 00 c0 rjmp .+0 ; 0x564 + 564: 00 00 nop + static const uint8_t RED = 4; + static const uint8_t MAGENTA = 5; + static const uint8_t YELLOW = 6; + static const uint8_t WHITE = 7; + void setColor(uint8_t cr, uint8_t cg, uint8_t cb) { + r = cr; + 566: f0 92 94 00 sts 0x0094, r15 + g = cg; + 56a: f0 92 95 00 sts 0x0095, r15 + b = cb; + 56e: f0 92 96 00 sts 0x0096, r15 + 572: 2f ef ldi r18, 0xFF ; 255 + 574: 86 e1 ldi r24, 0x16 ; 22 + 576: 91 e1 ldi r25, 0x11 ; 17 + 578: 21 50 subi r18, 0x01 ; 1 + 57a: 80 40 sbci r24, 0x00 ; 0 + 57c: 90 40 sbci r25, 0x00 ; 0 + 57e: e1 f7 brne .-8 ; 0x578 + 580: 00 c0 rjmp .+0 ; 0x582 + 582: 00 00 nop + (mask & (1<<0)) ? blue::make_high() : blue::make_low(); + (mask & (1<<1)) ? green::make_high() : green::make_low(); + (mask & (1<<2)) ? red::make_high() : red::make_low(); + } + void rainbow(uint8_t time) { + fade(RED, YELLOW, time); + 584: 66 e0 ldi r22, 0x06 ; 6 + 586: 84 e0 ldi r24, 0x04 ; 4 + 588: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + fade(YELLOW, GREEN, time); + 58c: 62 e0 ldi r22, 0x02 ; 2 + 58e: 86 e0 ldi r24, 0x06 ; 6 + 590: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + fade(GREEN, CYAN, time); + 594: 63 e0 ldi r22, 0x03 ; 3 + 596: 82 e0 ldi r24, 0x02 ; 2 + 598: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + fade(CYAN, BLUE, time); + 59c: 61 e0 ldi r22, 0x01 ; 1 + 59e: 83 e0 ldi r24, 0x03 ; 3 + 5a0: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + fade(BLUE, MAGENTA, time); + 5a4: 65 e0 ldi r22, 0x05 ; 5 + 5a6: 81 e0 ldi r24, 0x01 ; 1 + 5a8: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + fade(MAGENTA, RED, time); + 5ac: 64 e0 ldi r22, 0x04 ; 4 + 5ae: 85 e0 ldi r24, 0x05 ; 5 + 5b0: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34> + 5b4: b1 cf rjmp .-158 ; 0x518 + +000005b6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev>: + void send(uint8_t wert) { + uart_putchar(wert); + } + private: + void init() { + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + 5b6: 87 e6 ldi r24, 0x67 ; 103 + 5b8: 89 b9 out 0x09, r24 ; 9 + UCSRB = /*(1< +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + 5c2: 83 e8 ldi r24, 0x83 ; 131 + 5c4: 90 e0 ldi r25, 0x00 ; 0 + 5c6: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + 5ca: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.22> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 5ce: c5 98 cbi 0x18, 5 ; 24 + 5d0: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.22> + 5d4: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23> + 5d8: c7 98 cbi 0x18, 7 ; 24 + 5da: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23> + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 5de: bc 9a sbi 0x17, 4 ; 23 + mosi::make_output(); + mosi::make_low(); + sck::make_output(); + sck::make_low(); + cs::make_output(); + cs::make_high(); + 5e0: 0e 94 56 01 call 0x2ac ; 0x2ac <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + 5e4: be 98 cbi 0x17, 6 ; 23 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 5e6: c6 98 cbi 0x18, 6 ; 24 + 5e8: c6 98 cbi 0x18, 6 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 5ea: be 9a sbi 0x17, 6 ; 23 + miso::make_input(); + miso::make_low(); + } + void init_spi() { + SPCR = (1<: + } +} +ISR(TIMER2_COMP_vect) { + //l.color(l.RED); + l.timer(); + 5f6: 1f 93 push r17 + 5f8: cf 93 push r28 + 5fa: df 93 push r29 + 5fc: a5 9a sbi 0x14, 5 ; 20 namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - 1c0: ad 98 cbi 0x15, 5 ; 21 + 5fe: ad 98 cbi 0x15, 5 ; 21 static uint8_t pin() { return PINC; } static void pin(uint8_t v) { PINC = v; } static uint8_t dir() { return DDRC; } static void dir(uint8_t v) { DDRC = v; } - 1c2: a5 9a sbi 0x14, 5 ; 20 - 1c4: a4 9a sbi 0x14, 4 ; 20 + 600: a5 9a sbi 0x14, 5 ; 20 + 602: a4 9a sbi 0x14, 4 ; 20 namespace avrlib { struct portc { static uint8_t port() { return PORTC; } static void port(uint8_t v) { PORTC = v; } - 1c6: ac 98 cbi 0x15, 4 ; 21 + 604: ac 98 cbi 0x15, 4 ; 21 static uint8_t pin() { return PINC; } static void pin(uint8_t v) { PINC = v; } static uint8_t dir() { return DDRC; } static void dir(uint8_t v) { DDRC = v; } - 1c8: a4 9a sbi 0x14, 4 ; 20 + 606: a4 9a sbi 0x14, 4 ; 20 #include template class Led { public: Led() { - 1ca: 10 92 62 00 sts 0x0062, r1 - 1ce: 10 92 63 00 sts 0x0063, r1 - 1d2: 10 92 64 00 sts 0x0064, r1 - 1d6: a2 9a sbi 0x14, 2 ; 20 - 1d8: a1 9a sbi 0x14, 1 ; 20 - 1da: a0 9a sbi 0x14, 0 ; 20 - // Clock source: System Clock - // Clock value: 500,000 kHz - // Mode: Normal top=0xFF - // OC2 output: Disconnected - // Timer Period: 0,512 ms - ASSR=0< +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + 62e: 83 e8 ldi r24, 0x83 ; 131 + 630: 90 e0 ldi r25, 0x00 ; 0 + 632: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> +///////////////////////// UART //////////////////////////////////// +typedef Uart<9600> uartclass; +uartclass u; +///////////////////////// SPI ///////////////////////////////////// +typedef Spi spiclass; +spiclass s; + 636: 82 e9 ldi r24, 0x92 ; 146 + 638: 90 e0 ldi r25, 0x00 ; 0 + 63a: 0e 94 db 02 call 0x5b6 ; 0x5b6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev> +} CANMessage; -000001ee <__tablejump2__>: - 1ee: ee 0f add r30, r30 - 1f0: ff 1f adc r31, r31 +template +class Can { + public: + Can() { + 63e: 80 e9 ldi r24, 0x90 ; 144 + 640: 90 e0 ldi r25, 0x00 ; 0 + 642: 0e 94 db 02 call 0x5b6 ; 0x5b6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev> + void send(uint8_t wert) { + uart_putchar(wert); + } + private: + void init() { + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + 646: 19 b9 out 0x09, r17 ; 9 + UCSRB = /*(1< +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + 64c: 83 e8 ldi r24, 0x83 ; 131 + 64e: 90 e0 ldi r25, 0x00 ; 0 + 650: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + init_can(); + 654: 80 e9 ldi r24, 0x90 ; 144 + 656: 90 e0 ldi r25, 0x00 ; 0 + } +} +ISR(TIMER2_COMP_vect) { + //l.color(l.RED); + l.timer(); + 658: df 91 pop r29 + 65a: cf 91 pop r28 + 65c: 1f 91 pop r17 + 65e: 0c 94 7f 01 jmp 0x2fe ; 0x2fe <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv> -000001f2 <__tablejump__>: - 1f2: 05 90 lpm r0, Z+ - 1f4: f4 91 lpm r31, Z - 1f6: e0 2d mov r30, r0 - 1f8: 09 94 ijmp +00000662 <__tablejump2__>: + 662: ee 0f add r30, r30 + 664: ff 1f adc r31, r31 -000001fa <_exit>: - 1fa: f8 94 cli +00000666 <__tablejump__>: + 666: 05 90 lpm r0, Z+ + 668: f4 91 lpm r31, Z + 66a: e0 2d mov r30, r0 + 66c: 09 94 ijmp -000001fc <__stop_program>: - 1fc: ff cf rjmp .-2 ; 0x1fc <__stop_program> +0000066e : + 66e: ae e0 ldi r26, 0x0E ; 14 + 670: b0 e0 ldi r27, 0x00 ; 0 + 672: ed e3 ldi r30, 0x3D ; 61 + 674: f3 e0 ldi r31, 0x03 ; 3 + 676: 0c 94 e3 05 jmp 0xbc6 ; 0xbc6 <__prologue_saves__+0x1c> + 67a: 0d 89 ldd r16, Y+21 ; 0x15 + 67c: 1e 89 ldd r17, Y+22 ; 0x16 + 67e: 86 e0 ldi r24, 0x06 ; 6 + 680: 8c 83 std Y+4, r24 ; 0x04 + 682: 1a 83 std Y+2, r17 ; 0x02 + 684: 09 83 std Y+1, r16 ; 0x01 + 686: 8f ef ldi r24, 0xFF ; 255 + 688: 9f e7 ldi r25, 0x7F ; 127 + 68a: 9e 83 std Y+6, r25 ; 0x06 + 68c: 8d 83 std Y+5, r24 ; 0x05 + 68e: ce 01 movw r24, r28 + 690: 49 96 adiw r24, 0x19 ; 25 + 692: ac 01 movw r20, r24 + 694: 6f 89 ldd r22, Y+23 ; 0x17 + 696: 78 8d ldd r23, Y+24 ; 0x18 + 698: ce 01 movw r24, r28 + 69a: 01 96 adiw r24, 0x01 ; 1 + 69c: 0e 94 59 03 call 0x6b2 ; 0x6b2 + 6a0: ef 81 ldd r30, Y+7 ; 0x07 + 6a2: f8 85 ldd r31, Y+8 ; 0x08 + 6a4: e0 0f add r30, r16 + 6a6: f1 1f adc r31, r17 + 6a8: 10 82 st Z, r1 + 6aa: 2e 96 adiw r28, 0x0e ; 14 + 6ac: e4 e0 ldi r30, 0x04 ; 4 + 6ae: 0c 94 ff 05 jmp 0xbfe ; 0xbfe <__epilogue_restores__+0x1c> + +000006b2 : + 6b2: ac e0 ldi r26, 0x0C ; 12 + 6b4: b0 e0 ldi r27, 0x00 ; 0 + 6b6: ef e5 ldi r30, 0x5F ; 95 + 6b8: f3 e0 ldi r31, 0x03 ; 3 + 6ba: 0c 94 d5 05 jmp 0xbaa ; 0xbaa <__prologue_saves__> + 6be: 7c 01 movw r14, r24 + 6c0: 6b 01 movw r12, r22 + 6c2: 8a 01 movw r16, r20 + 6c4: fc 01 movw r30, r24 + 6c6: 17 82 std Z+7, r1 ; 0x07 + 6c8: 16 82 std Z+6, r1 ; 0x06 + 6ca: 83 81 ldd r24, Z+3 ; 0x03 + 6cc: 81 ff sbrs r24, 1 + 6ce: c6 c1 rjmp .+908 ; 0xa5c <__stack+0x1fd> + 6d0: 88 24 eor r8, r8 + 6d2: 83 94 inc r8 + 6d4: 91 2c mov r9, r1 + 6d6: 8c 0e add r8, r28 + 6d8: 9d 1e adc r9, r29 + 6da: f7 01 movw r30, r14 + 6dc: 93 81 ldd r25, Z+3 ; 0x03 + 6de: f6 01 movw r30, r12 + 6e0: 93 fd sbrc r25, 3 + 6e2: 85 91 lpm r24, Z+ + 6e4: 93 ff sbrs r25, 3 + 6e6: 81 91 ld r24, Z+ + 6e8: 6f 01 movw r12, r30 + 6ea: 88 23 and r24, r24 + 6ec: 09 f4 brne .+2 ; 0x6f0 + 6ee: b2 c1 rjmp .+868 ; 0xa54 <__stack+0x1f5> + 6f0: 85 32 cpi r24, 0x25 ; 37 + 6f2: 39 f4 brne .+14 ; 0x702 + 6f4: 93 fd sbrc r25, 3 + 6f6: 85 91 lpm r24, Z+ + 6f8: 93 ff sbrs r25, 3 + 6fa: 81 91 ld r24, Z+ + 6fc: 6f 01 movw r12, r30 + 6fe: 85 32 cpi r24, 0x25 ; 37 + 700: 29 f4 brne .+10 ; 0x70c + 702: b7 01 movw r22, r14 + 704: 90 e0 ldi r25, 0x00 ; 0 + 706: 0e 94 4b 05 call 0xa96 ; 0xa96 + 70a: e7 cf rjmp .-50 ; 0x6da + 70c: 51 2c mov r5, r1 + 70e: 31 2c mov r3, r1 + 710: 20 e0 ldi r18, 0x00 ; 0 + 712: 20 32 cpi r18, 0x20 ; 32 + 714: a8 f4 brcc .+42 ; 0x740 + 716: 8b 32 cpi r24, 0x2B ; 43 + 718: 61 f0 breq .+24 ; 0x732 + 71a: 28 f4 brcc .+10 ; 0x726 + 71c: 80 32 cpi r24, 0x20 ; 32 + 71e: 51 f0 breq .+20 ; 0x734 + 720: 83 32 cpi r24, 0x23 ; 35 + 722: 71 f4 brne .+28 ; 0x740 + 724: 0b c0 rjmp .+22 ; 0x73c + 726: 8d 32 cpi r24, 0x2D ; 45 + 728: 39 f0 breq .+14 ; 0x738 + 72a: 80 33 cpi r24, 0x30 ; 48 + 72c: 49 f4 brne .+18 ; 0x740 + 72e: 21 60 ori r18, 0x01 ; 1 + 730: 28 c0 rjmp .+80 ; 0x782 + 732: 22 60 ori r18, 0x02 ; 2 + 734: 24 60 ori r18, 0x04 ; 4 + 736: 25 c0 rjmp .+74 ; 0x782 + 738: 28 60 ori r18, 0x08 ; 8 + 73a: 23 c0 rjmp .+70 ; 0x782 + 73c: 20 61 ori r18, 0x10 ; 16 + 73e: 21 c0 rjmp .+66 ; 0x782 + 740: 27 fd sbrc r18, 7 + 742: 27 c0 rjmp .+78 ; 0x792 + 744: 38 2f mov r19, r24 + 746: 30 53 subi r19, 0x30 ; 48 + 748: 3a 30 cpi r19, 0x0A ; 10 + 74a: 78 f4 brcc .+30 ; 0x76a + 74c: 26 ff sbrs r18, 6 + 74e: 06 c0 rjmp .+12 ; 0x75c + 750: fa e0 ldi r31, 0x0A ; 10 + 752: 5f 9e mul r5, r31 + 754: 30 0d add r19, r0 + 756: 11 24 eor r1, r1 + 758: 53 2e mov r5, r19 + 75a: 13 c0 rjmp .+38 ; 0x782 + 75c: 8a e0 ldi r24, 0x0A ; 10 + 75e: 38 9e mul r3, r24 + 760: 30 0d add r19, r0 + 762: 11 24 eor r1, r1 + 764: 33 2e mov r3, r19 + 766: 20 62 ori r18, 0x20 ; 32 + 768: 0c c0 rjmp .+24 ; 0x782 + 76a: 8e 32 cpi r24, 0x2E ; 46 + 76c: 21 f4 brne .+8 ; 0x776 + 76e: 26 fd sbrc r18, 6 + 770: 71 c1 rjmp .+738 ; 0xa54 <__stack+0x1f5> + 772: 20 64 ori r18, 0x40 ; 64 + 774: 06 c0 rjmp .+12 ; 0x782 + 776: 8c 36 cpi r24, 0x6C ; 108 + 778: 11 f4 brne .+4 ; 0x77e + 77a: 20 68 ori r18, 0x80 ; 128 + 77c: 02 c0 rjmp .+4 ; 0x782 + 77e: 88 36 cpi r24, 0x68 ; 104 + 780: 41 f4 brne .+16 ; 0x792 + 782: f6 01 movw r30, r12 + 784: 93 fd sbrc r25, 3 + 786: 85 91 lpm r24, Z+ + 788: 93 ff sbrs r25, 3 + 78a: 81 91 ld r24, Z+ + 78c: 6f 01 movw r12, r30 + 78e: 81 11 cpse r24, r1 + 790: c0 cf rjmp .-128 ; 0x712 + 792: 98 2f mov r25, r24 + 794: 95 54 subi r25, 0x45 ; 69 + 796: 93 30 cpi r25, 0x03 ; 3 + 798: 18 f0 brcs .+6 ; 0x7a0 + 79a: 90 52 subi r25, 0x20 ; 32 + 79c: 93 30 cpi r25, 0x03 ; 3 + 79e: 28 f4 brcc .+10 ; 0x7aa + 7a0: 0c 5f subi r16, 0xFC ; 252 + 7a2: 1f 4f sbci r17, 0xFF ; 255 + 7a4: ff e3 ldi r31, 0x3F ; 63 + 7a6: f9 83 std Y+1, r31 ; 0x01 + 7a8: 0d c0 rjmp .+26 ; 0x7c4 + 7aa: 83 36 cpi r24, 0x63 ; 99 + 7ac: 31 f0 breq .+12 ; 0x7ba + 7ae: 83 37 cpi r24, 0x73 ; 115 + 7b0: 71 f0 breq .+28 ; 0x7ce + 7b2: 83 35 cpi r24, 0x53 ; 83 + 7b4: 09 f0 breq .+2 ; 0x7b8 + 7b6: 5e c0 rjmp .+188 ; 0x874 <__stack+0x15> + 7b8: 23 c0 rjmp .+70 ; 0x800 + 7ba: f8 01 movw r30, r16 + 7bc: 80 81 ld r24, Z + 7be: 89 83 std Y+1, r24 ; 0x01 + 7c0: 0e 5f subi r16, 0xFE ; 254 + 7c2: 1f 4f sbci r17, 0xFF ; 255 + 7c4: 44 24 eor r4, r4 + 7c6: 43 94 inc r4 + 7c8: 51 2c mov r5, r1 + 7ca: 54 01 movw r10, r8 + 7cc: 15 c0 rjmp .+42 ; 0x7f8 + 7ce: 38 01 movw r6, r16 + 7d0: f2 e0 ldi r31, 0x02 ; 2 + 7d2: 6f 0e add r6, r31 + 7d4: 71 1c adc r7, r1 + 7d6: f8 01 movw r30, r16 + 7d8: a0 80 ld r10, Z + 7da: b1 80 ldd r11, Z+1 ; 0x01 + 7dc: 26 ff sbrs r18, 6 + 7de: 03 c0 rjmp .+6 ; 0x7e6 + 7e0: 65 2d mov r22, r5 + 7e2: 70 e0 ldi r23, 0x00 ; 0 + 7e4: 02 c0 rjmp .+4 ; 0x7ea + 7e6: 6f ef ldi r22, 0xFF ; 255 + 7e8: 7f ef ldi r23, 0xFF ; 255 + 7ea: c5 01 movw r24, r10 + 7ec: 2c 87 std Y+12, r18 ; 0x0c + 7ee: 0e 94 40 05 call 0xa80 ; 0xa80 + 7f2: 2c 01 movw r4, r24 + 7f4: 83 01 movw r16, r6 + 7f6: 2c 85 ldd r18, Y+12 ; 0x0c + 7f8: 6f e7 ldi r22, 0x7F ; 127 + 7fa: 26 2e mov r2, r22 + 7fc: 22 22 and r2, r18 + 7fe: 18 c0 rjmp .+48 ; 0x830 + 800: 38 01 movw r6, r16 + 802: f2 e0 ldi r31, 0x02 ; 2 + 804: 6f 0e add r6, r31 + 806: 71 1c adc r7, r1 + 808: f8 01 movw r30, r16 + 80a: a0 80 ld r10, Z + 80c: b1 80 ldd r11, Z+1 ; 0x01 + 80e: 26 ff sbrs r18, 6 + 810: 03 c0 rjmp .+6 ; 0x818 + 812: 65 2d mov r22, r5 + 814: 70 e0 ldi r23, 0x00 ; 0 + 816: 02 c0 rjmp .+4 ; 0x81c + 818: 6f ef ldi r22, 0xFF ; 255 + 81a: 7f ef ldi r23, 0xFF ; 255 + 81c: c5 01 movw r24, r10 + 81e: 2c 87 std Y+12, r18 ; 0x0c + 820: 0e 94 35 05 call 0xa6a ; 0xa6a + 824: 2c 01 movw r4, r24 + 826: 2c 85 ldd r18, Y+12 ; 0x0c + 828: 50 e8 ldi r21, 0x80 ; 128 + 82a: 25 2e mov r2, r21 + 82c: 22 2a or r2, r18 + 82e: 83 01 movw r16, r6 + 830: 23 fc sbrc r2, 3 + 832: 1c c0 rjmp .+56 ; 0x86c <__stack+0xd> + 834: 06 c0 rjmp .+12 ; 0x842 + 836: b7 01 movw r22, r14 + 838: 80 e2 ldi r24, 0x20 ; 32 + 83a: 90 e0 ldi r25, 0x00 ; 0 + 83c: 0e 94 4b 05 call 0xa96 ; 0xa96 + 840: 3a 94 dec r3 + 842: 83 2d mov r24, r3 + 844: 90 e0 ldi r25, 0x00 ; 0 + 846: 48 16 cp r4, r24 + 848: 59 06 cpc r5, r25 + 84a: a8 f3 brcs .-22 ; 0x836 + 84c: 0f c0 rjmp .+30 ; 0x86c <__stack+0xd> + 84e: f5 01 movw r30, r10 + 850: 27 fc sbrc r2, 7 + 852: 85 91 lpm r24, Z+ + 854: 27 fe sbrs r2, 7 + 856: 81 91 ld r24, Z+ + 858: 5f 01 movw r10, r30 + 85a: b7 01 movw r22, r14 + 85c: 90 e0 ldi r25, 0x00 ; 0 + 85e: 0e 94 4b 05 call 0xa96 ; 0xa96 + 862: 31 10 cpse r3, r1 + 864: 3a 94 dec r3 + 866: f1 e0 ldi r31, 0x01 ; 1 + 868: 4f 1a sub r4, r31 + 86a: 51 08 sbc r5, r1 + 86c: 41 14 cp r4, r1 + 86e: 51 04 cpc r5, r1 + 870: 71 f7 brne .-36 ; 0x84e + 872: ed c0 rjmp .+474 ; 0xa4e <__stack+0x1ef> + 874: 84 36 cpi r24, 0x64 ; 100 + 876: 11 f0 breq .+4 ; 0x87c <__stack+0x1d> + 878: 89 36 cpi r24, 0x69 ; 105 + 87a: 41 f5 brne .+80 ; 0x8cc <__stack+0x6d> + 87c: f8 01 movw r30, r16 + 87e: 27 ff sbrs r18, 7 + 880: 07 c0 rjmp .+14 ; 0x890 <__stack+0x31> + 882: 60 81 ld r22, Z + 884: 71 81 ldd r23, Z+1 ; 0x01 + 886: 82 81 ldd r24, Z+2 ; 0x02 + 888: 93 81 ldd r25, Z+3 ; 0x03 + 88a: 0c 5f subi r16, 0xFC ; 252 + 88c: 1f 4f sbci r17, 0xFF ; 255 + 88e: 08 c0 rjmp .+16 ; 0x8a0 <__stack+0x41> + 890: 60 81 ld r22, Z + 892: 71 81 ldd r23, Z+1 ; 0x01 + 894: 88 27 eor r24, r24 + 896: 77 fd sbrc r23, 7 + 898: 80 95 com r24 + 89a: 98 2f mov r25, r24 + 89c: 0e 5f subi r16, 0xFE ; 254 + 89e: 1f 4f sbci r17, 0xFF ; 255 + 8a0: 4f e6 ldi r20, 0x6F ; 111 + 8a2: b4 2e mov r11, r20 + 8a4: b2 22 and r11, r18 + 8a6: 97 ff sbrs r25, 7 + 8a8: 09 c0 rjmp .+18 ; 0x8bc <__stack+0x5d> + 8aa: 90 95 com r25 + 8ac: 80 95 com r24 + 8ae: 70 95 com r23 + 8b0: 61 95 neg r22 + 8b2: 7f 4f sbci r23, 0xFF ; 255 + 8b4: 8f 4f sbci r24, 0xFF ; 255 + 8b6: 9f 4f sbci r25, 0xFF ; 255 + 8b8: f0 e8 ldi r31, 0x80 ; 128 + 8ba: bf 2a or r11, r31 + 8bc: 2a e0 ldi r18, 0x0A ; 10 + 8be: 30 e0 ldi r19, 0x00 ; 0 + 8c0: a4 01 movw r20, r8 + 8c2: 0e 94 77 05 call 0xaee ; 0xaee <__ultoa_invert> + 8c6: a8 2e mov r10, r24 + 8c8: a8 18 sub r10, r8 + 8ca: 43 c0 rjmp .+134 ; 0x952 <__stack+0xf3> + 8cc: 85 37 cpi r24, 0x75 ; 117 + 8ce: 31 f4 brne .+12 ; 0x8dc <__stack+0x7d> + 8d0: 3f ee ldi r19, 0xEF ; 239 + 8d2: b3 2e mov r11, r19 + 8d4: b2 22 and r11, r18 + 8d6: 2a e0 ldi r18, 0x0A ; 10 + 8d8: 30 e0 ldi r19, 0x00 ; 0 + 8da: 24 c0 rjmp .+72 ; 0x924 <__stack+0xc5> + 8dc: 99 ef ldi r25, 0xF9 ; 249 + 8de: b9 2e mov r11, r25 + 8e0: b2 22 and r11, r18 + 8e2: 8f 36 cpi r24, 0x6F ; 111 + 8e4: b9 f0 breq .+46 ; 0x914 <__stack+0xb5> + 8e6: 20 f4 brcc .+8 ; 0x8f0 <__stack+0x91> + 8e8: 88 35 cpi r24, 0x58 ; 88 + 8ea: 09 f0 breq .+2 ; 0x8ee <__stack+0x8f> + 8ec: b3 c0 rjmp .+358 ; 0xa54 <__stack+0x1f5> + 8ee: 0d c0 rjmp .+26 ; 0x90a <__stack+0xab> + 8f0: 80 37 cpi r24, 0x70 ; 112 + 8f2: 21 f0 breq .+8 ; 0x8fc <__stack+0x9d> + 8f4: 88 37 cpi r24, 0x78 ; 120 + 8f6: 09 f0 breq .+2 ; 0x8fa <__stack+0x9b> + 8f8: ad c0 rjmp .+346 ; 0xa54 <__stack+0x1f5> + 8fa: 02 c0 rjmp .+4 ; 0x900 <__stack+0xa1> + 8fc: 20 e1 ldi r18, 0x10 ; 16 + 8fe: b2 2a or r11, r18 + 900: b4 fe sbrs r11, 4 + 902: 0b c0 rjmp .+22 ; 0x91a <__stack+0xbb> + 904: 84 e0 ldi r24, 0x04 ; 4 + 906: b8 2a or r11, r24 + 908: 08 c0 rjmp .+16 ; 0x91a <__stack+0xbb> + 90a: 24 ff sbrs r18, 4 + 90c: 09 c0 rjmp .+18 ; 0x920 <__stack+0xc1> + 90e: e6 e0 ldi r30, 0x06 ; 6 + 910: be 2a or r11, r30 + 912: 06 c0 rjmp .+12 ; 0x920 <__stack+0xc1> + 914: 28 e0 ldi r18, 0x08 ; 8 + 916: 30 e0 ldi r19, 0x00 ; 0 + 918: 05 c0 rjmp .+10 ; 0x924 <__stack+0xc5> + 91a: 20 e1 ldi r18, 0x10 ; 16 + 91c: 30 e0 ldi r19, 0x00 ; 0 + 91e: 02 c0 rjmp .+4 ; 0x924 <__stack+0xc5> + 920: 20 e1 ldi r18, 0x10 ; 16 + 922: 32 e0 ldi r19, 0x02 ; 2 + 924: f8 01 movw r30, r16 + 926: b7 fe sbrs r11, 7 + 928: 07 c0 rjmp .+14 ; 0x938 <__stack+0xd9> + 92a: 60 81 ld r22, Z + 92c: 71 81 ldd r23, Z+1 ; 0x01 + 92e: 82 81 ldd r24, Z+2 ; 0x02 + 930: 93 81 ldd r25, Z+3 ; 0x03 + 932: 0c 5f subi r16, 0xFC ; 252 + 934: 1f 4f sbci r17, 0xFF ; 255 + 936: 06 c0 rjmp .+12 ; 0x944 <__stack+0xe5> + 938: 60 81 ld r22, Z + 93a: 71 81 ldd r23, Z+1 ; 0x01 + 93c: 80 e0 ldi r24, 0x00 ; 0 + 93e: 90 e0 ldi r25, 0x00 ; 0 + 940: 0e 5f subi r16, 0xFE ; 254 + 942: 1f 4f sbci r17, 0xFF ; 255 + 944: a4 01 movw r20, r8 + 946: 0e 94 77 05 call 0xaee ; 0xaee <__ultoa_invert> + 94a: a8 2e mov r10, r24 + 94c: a8 18 sub r10, r8 + 94e: ff e7 ldi r31, 0x7F ; 127 + 950: bf 22 and r11, r31 + 952: b6 fe sbrs r11, 6 + 954: 0b c0 rjmp .+22 ; 0x96c <__stack+0x10d> + 956: 2b 2d mov r18, r11 + 958: 2e 7f andi r18, 0xFE ; 254 + 95a: a5 14 cp r10, r5 + 95c: 50 f4 brcc .+20 ; 0x972 <__stack+0x113> + 95e: b4 fe sbrs r11, 4 + 960: 0a c0 rjmp .+20 ; 0x976 <__stack+0x117> + 962: b2 fc sbrc r11, 2 + 964: 08 c0 rjmp .+16 ; 0x976 <__stack+0x117> + 966: 2b 2d mov r18, r11 + 968: 2e 7e andi r18, 0xEE ; 238 + 96a: 05 c0 rjmp .+10 ; 0x976 <__stack+0x117> + 96c: 7a 2c mov r7, r10 + 96e: 2b 2d mov r18, r11 + 970: 03 c0 rjmp .+6 ; 0x978 <__stack+0x119> + 972: 7a 2c mov r7, r10 + 974: 01 c0 rjmp .+2 ; 0x978 <__stack+0x119> + 976: 75 2c mov r7, r5 + 978: 24 ff sbrs r18, 4 + 97a: 0d c0 rjmp .+26 ; 0x996 <__stack+0x137> + 97c: fe 01 movw r30, r28 + 97e: ea 0d add r30, r10 + 980: f1 1d adc r31, r1 + 982: 80 81 ld r24, Z + 984: 80 33 cpi r24, 0x30 ; 48 + 986: 11 f4 brne .+4 ; 0x98c <__stack+0x12d> + 988: 29 7e andi r18, 0xE9 ; 233 + 98a: 09 c0 rjmp .+18 ; 0x99e <__stack+0x13f> + 98c: 22 ff sbrs r18, 2 + 98e: 06 c0 rjmp .+12 ; 0x99c <__stack+0x13d> + 990: 73 94 inc r7 + 992: 73 94 inc r7 + 994: 04 c0 rjmp .+8 ; 0x99e <__stack+0x13f> + 996: 82 2f mov r24, r18 + 998: 86 78 andi r24, 0x86 ; 134 + 99a: 09 f0 breq .+2 ; 0x99e <__stack+0x13f> + 99c: 73 94 inc r7 + 99e: 23 fd sbrc r18, 3 + 9a0: 14 c0 rjmp .+40 ; 0x9ca <__stack+0x16b> + 9a2: 20 ff sbrs r18, 0 + 9a4: 0f c0 rjmp .+30 ; 0x9c4 <__stack+0x165> + 9a6: 5a 2c mov r5, r10 + 9a8: 73 14 cp r7, r3 + 9aa: 60 f4 brcc .+24 ; 0x9c4 <__stack+0x165> + 9ac: 53 0c add r5, r3 + 9ae: 57 18 sub r5, r7 + 9b0: 73 2c mov r7, r3 + 9b2: 08 c0 rjmp .+16 ; 0x9c4 <__stack+0x165> + 9b4: b7 01 movw r22, r14 + 9b6: 80 e2 ldi r24, 0x20 ; 32 + 9b8: 90 e0 ldi r25, 0x00 ; 0 + 9ba: 2c 87 std Y+12, r18 ; 0x0c + 9bc: 0e 94 4b 05 call 0xa96 ; 0xa96 + 9c0: 73 94 inc r7 + 9c2: 2c 85 ldd r18, Y+12 ; 0x0c + 9c4: 73 14 cp r7, r3 + 9c6: b0 f3 brcs .-20 ; 0x9b4 <__stack+0x155> + 9c8: 04 c0 rjmp .+8 ; 0x9d2 <__stack+0x173> + 9ca: 73 14 cp r7, r3 + 9cc: 10 f4 brcc .+4 ; 0x9d2 <__stack+0x173> + 9ce: 37 18 sub r3, r7 + 9d0: 01 c0 rjmp .+2 ; 0x9d4 <__stack+0x175> + 9d2: 31 2c mov r3, r1 + 9d4: 24 ff sbrs r18, 4 + 9d6: 12 c0 rjmp .+36 ; 0x9fc <__stack+0x19d> + 9d8: b7 01 movw r22, r14 + 9da: 80 e3 ldi r24, 0x30 ; 48 + 9dc: 90 e0 ldi r25, 0x00 ; 0 + 9de: 2c 87 std Y+12, r18 ; 0x0c + 9e0: 0e 94 4b 05 call 0xa96 ; 0xa96 + 9e4: 2c 85 ldd r18, Y+12 ; 0x0c + 9e6: 22 ff sbrs r18, 2 + 9e8: 1e c0 rjmp .+60 ; 0xa26 <__stack+0x1c7> + 9ea: 21 ff sbrs r18, 1 + 9ec: 03 c0 rjmp .+6 ; 0x9f4 <__stack+0x195> + 9ee: 88 e5 ldi r24, 0x58 ; 88 + 9f0: 90 e0 ldi r25, 0x00 ; 0 + 9f2: 02 c0 rjmp .+4 ; 0x9f8 <__stack+0x199> + 9f4: 88 e7 ldi r24, 0x78 ; 120 + 9f6: 90 e0 ldi r25, 0x00 ; 0 + 9f8: b7 01 movw r22, r14 + 9fa: 0c c0 rjmp .+24 ; 0xa14 <__stack+0x1b5> + 9fc: 82 2f mov r24, r18 + 9fe: 86 78 andi r24, 0x86 ; 134 + a00: 91 f0 breq .+36 ; 0xa26 <__stack+0x1c7> + a02: 21 fd sbrc r18, 1 + a04: 02 c0 rjmp .+4 ; 0xa0a <__stack+0x1ab> + a06: 80 e2 ldi r24, 0x20 ; 32 + a08: 01 c0 rjmp .+2 ; 0xa0c <__stack+0x1ad> + a0a: 8b e2 ldi r24, 0x2B ; 43 + a0c: 27 fd sbrc r18, 7 + a0e: 8d e2 ldi r24, 0x2D ; 45 + a10: b7 01 movw r22, r14 + a12: 90 e0 ldi r25, 0x00 ; 0 + a14: 0e 94 4b 05 call 0xa96 ; 0xa96 + a18: 06 c0 rjmp .+12 ; 0xa26 <__stack+0x1c7> + a1a: b7 01 movw r22, r14 + a1c: 80 e3 ldi r24, 0x30 ; 48 + a1e: 90 e0 ldi r25, 0x00 ; 0 + a20: 0e 94 4b 05 call 0xa96 ; 0xa96 + a24: 5a 94 dec r5 + a26: a5 14 cp r10, r5 + a28: c0 f3 brcs .-16 ; 0xa1a <__stack+0x1bb> + a2a: aa 94 dec r10 + a2c: f4 01 movw r30, r8 + a2e: ea 0d add r30, r10 + a30: f1 1d adc r31, r1 + a32: b7 01 movw r22, r14 + a34: 80 81 ld r24, Z + a36: 90 e0 ldi r25, 0x00 ; 0 + a38: 0e 94 4b 05 call 0xa96 ; 0xa96 + a3c: a1 10 cpse r10, r1 + a3e: f5 cf rjmp .-22 ; 0xa2a <__stack+0x1cb> + a40: 06 c0 rjmp .+12 ; 0xa4e <__stack+0x1ef> + a42: b7 01 movw r22, r14 + a44: 80 e2 ldi r24, 0x20 ; 32 + a46: 90 e0 ldi r25, 0x00 ; 0 + a48: 0e 94 4b 05 call 0xa96 ; 0xa96 + a4c: 3a 94 dec r3 + a4e: 31 10 cpse r3, r1 + a50: f8 cf rjmp .-16 ; 0xa42 <__stack+0x1e3> + a52: 43 ce rjmp .-890 ; 0x6da + a54: f7 01 movw r30, r14 + a56: 26 81 ldd r18, Z+6 ; 0x06 + a58: 37 81 ldd r19, Z+7 ; 0x07 + a5a: 02 c0 rjmp .+4 ; 0xa60 <__stack+0x201> + a5c: 2f ef ldi r18, 0xFF ; 255 + a5e: 3f ef ldi r19, 0xFF ; 255 + a60: c9 01 movw r24, r18 + a62: 2c 96 adiw r28, 0x0c ; 12 + a64: e2 e1 ldi r30, 0x12 ; 18 + a66: 0c 94 f1 05 jmp 0xbe2 ; 0xbe2 <__epilogue_restores__> + +00000a6a : + a6a: fc 01 movw r30, r24 + a6c: 05 90 lpm r0, Z+ + a6e: 61 50 subi r22, 0x01 ; 1 + a70: 70 40 sbci r23, 0x00 ; 0 + a72: 01 10 cpse r0, r1 + a74: d8 f7 brcc .-10 ; 0xa6c + a76: 80 95 com r24 + a78: 90 95 com r25 + a7a: 8e 0f add r24, r30 + a7c: 9f 1f adc r25, r31 + a7e: 08 95 ret + +00000a80 : + a80: fc 01 movw r30, r24 + a82: 61 50 subi r22, 0x01 ; 1 + a84: 70 40 sbci r23, 0x00 ; 0 + a86: 01 90 ld r0, Z+ + a88: 01 10 cpse r0, r1 + a8a: d8 f7 brcc .-10 ; 0xa82 + a8c: 80 95 com r24 + a8e: 90 95 com r25 + a90: 8e 0f add r24, r30 + a92: 9f 1f adc r25, r31 + a94: 08 95 ret + +00000a96 : + a96: 0f 93 push r16 + a98: 1f 93 push r17 + a9a: cf 93 push r28 + a9c: df 93 push r29 + a9e: 8c 01 movw r16, r24 + aa0: eb 01 movw r28, r22 + aa2: 8b 81 ldd r24, Y+3 ; 0x03 + aa4: 81 fd sbrc r24, 1 + aa6: 03 c0 rjmp .+6 ; 0xaae + aa8: 0f ef ldi r16, 0xFF ; 255 + aaa: 1f ef ldi r17, 0xFF ; 255 + aac: 1a c0 rjmp .+52 ; 0xae2 + aae: 82 ff sbrs r24, 2 + ab0: 0d c0 rjmp .+26 ; 0xacc + ab2: 2e 81 ldd r18, Y+6 ; 0x06 + ab4: 3f 81 ldd r19, Y+7 ; 0x07 + ab6: 8c 81 ldd r24, Y+4 ; 0x04 + ab8: 9d 81 ldd r25, Y+5 ; 0x05 + aba: 28 17 cp r18, r24 + abc: 39 07 cpc r19, r25 + abe: 64 f4 brge .+24 ; 0xad8 + ac0: e8 81 ld r30, Y + ac2: f9 81 ldd r31, Y+1 ; 0x01 + ac4: 01 93 st Z+, r16 + ac6: f9 83 std Y+1, r31 ; 0x01 + ac8: e8 83 st Y, r30 + aca: 06 c0 rjmp .+12 ; 0xad8 + acc: e8 85 ldd r30, Y+8 ; 0x08 + ace: f9 85 ldd r31, Y+9 ; 0x09 + ad0: 80 2f mov r24, r16 + ad2: 09 95 icall + ad4: 89 2b or r24, r25 + ad6: 41 f7 brne .-48 ; 0xaa8 + ad8: 8e 81 ldd r24, Y+6 ; 0x06 + ada: 9f 81 ldd r25, Y+7 ; 0x07 + adc: 01 96 adiw r24, 0x01 ; 1 + ade: 9f 83 std Y+7, r25 ; 0x07 + ae0: 8e 83 std Y+6, r24 ; 0x06 + ae2: c8 01 movw r24, r16 + ae4: df 91 pop r29 + ae6: cf 91 pop r28 + ae8: 1f 91 pop r17 + aea: 0f 91 pop r16 + aec: 08 95 ret + +00000aee <__ultoa_invert>: + aee: fa 01 movw r30, r20 + af0: aa 27 eor r26, r26 + af2: 28 30 cpi r18, 0x08 ; 8 + af4: 51 f1 breq .+84 ; 0xb4a <__ultoa_invert+0x5c> + af6: 20 31 cpi r18, 0x10 ; 16 + af8: 81 f1 breq .+96 ; 0xb5a <__ultoa_invert+0x6c> + afa: e8 94 clt + afc: 6f 93 push r22 + afe: 6e 7f andi r22, 0xFE ; 254 + b00: 6e 5f subi r22, 0xFE ; 254 + b02: 7f 4f sbci r23, 0xFF ; 255 + b04: 8f 4f sbci r24, 0xFF ; 255 + b06: 9f 4f sbci r25, 0xFF ; 255 + b08: af 4f sbci r26, 0xFF ; 255 + b0a: b1 e0 ldi r27, 0x01 ; 1 + b0c: 3e d0 rcall .+124 ; 0xb8a <__ultoa_invert+0x9c> + b0e: b4 e0 ldi r27, 0x04 ; 4 + b10: 3c d0 rcall .+120 ; 0xb8a <__ultoa_invert+0x9c> + b12: 67 0f add r22, r23 + b14: 78 1f adc r23, r24 + b16: 89 1f adc r24, r25 + b18: 9a 1f adc r25, r26 + b1a: a1 1d adc r26, r1 + b1c: 68 0f add r22, r24 + b1e: 79 1f adc r23, r25 + b20: 8a 1f adc r24, r26 + b22: 91 1d adc r25, r1 + b24: a1 1d adc r26, r1 + b26: 6a 0f add r22, r26 + b28: 71 1d adc r23, r1 + b2a: 81 1d adc r24, r1 + b2c: 91 1d adc r25, r1 + b2e: a1 1d adc r26, r1 + b30: 20 d0 rcall .+64 ; 0xb72 <__ultoa_invert+0x84> + b32: 09 f4 brne .+2 ; 0xb36 <__ultoa_invert+0x48> + b34: 68 94 set + b36: 3f 91 pop r19 + b38: 2a e0 ldi r18, 0x0A ; 10 + b3a: 26 9f mul r18, r22 + b3c: 11 24 eor r1, r1 + b3e: 30 19 sub r19, r0 + b40: 30 5d subi r19, 0xD0 ; 208 + b42: 31 93 st Z+, r19 + b44: de f6 brtc .-74 ; 0xafc <__ultoa_invert+0xe> + b46: cf 01 movw r24, r30 + b48: 08 95 ret + b4a: 46 2f mov r20, r22 + b4c: 47 70 andi r20, 0x07 ; 7 + b4e: 40 5d subi r20, 0xD0 ; 208 + b50: 41 93 st Z+, r20 + b52: b3 e0 ldi r27, 0x03 ; 3 + b54: 0f d0 rcall .+30 ; 0xb74 <__ultoa_invert+0x86> + b56: c9 f7 brne .-14 ; 0xb4a <__ultoa_invert+0x5c> + b58: f6 cf rjmp .-20 ; 0xb46 <__ultoa_invert+0x58> + b5a: 46 2f mov r20, r22 + b5c: 4f 70 andi r20, 0x0F ; 15 + b5e: 40 5d subi r20, 0xD0 ; 208 + b60: 4a 33 cpi r20, 0x3A ; 58 + b62: 18 f0 brcs .+6 ; 0xb6a <__ultoa_invert+0x7c> + b64: 49 5d subi r20, 0xD9 ; 217 + b66: 31 fd sbrc r19, 1 + b68: 40 52 subi r20, 0x20 ; 32 + b6a: 41 93 st Z+, r20 + b6c: 02 d0 rcall .+4 ; 0xb72 <__ultoa_invert+0x84> + b6e: a9 f7 brne .-22 ; 0xb5a <__ultoa_invert+0x6c> + b70: ea cf rjmp .-44 ; 0xb46 <__ultoa_invert+0x58> + b72: b4 e0 ldi r27, 0x04 ; 4 + b74: a6 95 lsr r26 + b76: 97 95 ror r25 + b78: 87 95 ror r24 + b7a: 77 95 ror r23 + b7c: 67 95 ror r22 + b7e: ba 95 dec r27 + b80: c9 f7 brne .-14 ; 0xb74 <__ultoa_invert+0x86> + b82: 00 97 sbiw r24, 0x00 ; 0 + b84: 61 05 cpc r22, r1 + b86: 71 05 cpc r23, r1 + b88: 08 95 ret + b8a: 9b 01 movw r18, r22 + b8c: ac 01 movw r20, r24 + b8e: 0a 2e mov r0, r26 + b90: 06 94 lsr r0 + b92: 57 95 ror r21 + b94: 47 95 ror r20 + b96: 37 95 ror r19 + b98: 27 95 ror r18 + b9a: ba 95 dec r27 + b9c: c9 f7 brne .-14 ; 0xb90 <__ultoa_invert+0xa2> + b9e: 62 0f add r22, r18 + ba0: 73 1f adc r23, r19 + ba2: 84 1f adc r24, r20 + ba4: 95 1f adc r25, r21 + ba6: a0 1d adc r26, r0 + ba8: 08 95 ret + +00000baa <__prologue_saves__>: + baa: 2f 92 push r2 + bac: 3f 92 push r3 + bae: 4f 92 push r4 + bb0: 5f 92 push r5 + bb2: 6f 92 push r6 + bb4: 7f 92 push r7 + bb6: 8f 92 push r8 + bb8: 9f 92 push r9 + bba: af 92 push r10 + bbc: bf 92 push r11 + bbe: cf 92 push r12 + bc0: df 92 push r13 + bc2: ef 92 push r14 + bc4: ff 92 push r15 + bc6: 0f 93 push r16 + bc8: 1f 93 push r17 + bca: cf 93 push r28 + bcc: df 93 push r29 + bce: cd b7 in r28, 0x3d ; 61 + bd0: de b7 in r29, 0x3e ; 62 + bd2: ca 1b sub r28, r26 + bd4: db 0b sbc r29, r27 + bd6: 0f b6 in r0, 0x3f ; 63 + bd8: f8 94 cli + bda: de bf out 0x3e, r29 ; 62 + bdc: 0f be out 0x3f, r0 ; 63 + bde: cd bf out 0x3d, r28 ; 61 + be0: 09 94 ijmp + +00000be2 <__epilogue_restores__>: + be2: 2a 88 ldd r2, Y+18 ; 0x12 + be4: 39 88 ldd r3, Y+17 ; 0x11 + be6: 48 88 ldd r4, Y+16 ; 0x10 + be8: 5f 84 ldd r5, Y+15 ; 0x0f + bea: 6e 84 ldd r6, Y+14 ; 0x0e + bec: 7d 84 ldd r7, Y+13 ; 0x0d + bee: 8c 84 ldd r8, Y+12 ; 0x0c + bf0: 9b 84 ldd r9, Y+11 ; 0x0b + bf2: aa 84 ldd r10, Y+10 ; 0x0a + bf4: b9 84 ldd r11, Y+9 ; 0x09 + bf6: c8 84 ldd r12, Y+8 ; 0x08 + bf8: df 80 ldd r13, Y+7 ; 0x07 + bfa: ee 80 ldd r14, Y+6 ; 0x06 + bfc: fd 80 ldd r15, Y+5 ; 0x05 + bfe: 0c 81 ldd r16, Y+4 ; 0x04 + c00: 1b 81 ldd r17, Y+3 ; 0x03 + c02: aa 81 ldd r26, Y+2 ; 0x02 + c04: b9 81 ldd r27, Y+1 ; 0x01 + c06: ce 0f add r28, r30 + c08: d1 1d adc r29, r1 + c0a: 0f b6 in r0, 0x3f ; 63 + c0c: f8 94 cli + c0e: de bf out 0x3e, r29 ; 62 + c10: 0f be out 0x3f, r0 ; 63 + c12: cd bf out 0x3d, r28 ; 61 + c14: ed 01 movw r28, r26 + c16: 08 95 ret + +00000c18 <_exit>: + c18: f8 94 cli + +00000c1a <__stop_program>: + c1a: ff cf rjmp .-2 ; 0xc1a <__stop_program> diff --git a/Button/Button/Debug/Button.map b/Button/Button/Debug/Button.map index f4bed08..53daed6 100644 --- a/Button/Button/Debug/Button.map +++ b/Button/Button/Debug/Button.map @@ -10,10 +10,33 @@ c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu- Button.o (__do_global_ctors) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_ctors.o) (__tablejump__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + Button.o (sprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (vfprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (__prologue_saves__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (__epilogue_restores__) Discarded input sections .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o .text 0x00000000 0x0 Button.o .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) @@ -79,6 +102,40 @@ Discarded input sections 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) .text.libgcc.fmul 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) Memory Configuration @@ -195,7 +252,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x1fe +.text 0x00000000 0xc1c *(.vectors) .vectors 0x00000000 0x54 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o 0x00000000 __vector_default @@ -276,26 +333,78 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x000000a6 __vector_20 0x000000aa . = ALIGN (0x2) *(.text.*) - .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.10 - 0x000000aa 0x26 Button.o - .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.11.constprop.18 - 0x000000d0 0x66 Button.o - .text.startup.main - 0x00000136 0x74 Button.o - 0x00000136 main + .text._ZN4UartILm9600EE4sendEPKc.isra.2 + 0x000000aa 0x12 Button.o + .text._ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.22 + 0x000000bc 0x4 Button.o + .text._ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.23 + 0x000000c0 0x4 Button.o + .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.19 + 0x000000c4 0x26 Button.o + .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.20.constprop.34 + 0x000000ea 0x66 Button.o .text.__vector_4 - 0x000001aa 0x14 Button.o - 0x000001aa __vector_4 + 0x00000150 0x76 Button.o + 0x00000150 __vector_4 + .text._ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh + 0x000001c6 0xe0 Button.o + 0x000001c6 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh + .text._ZN6avrlib3pinINS_5portbELh4EE8make_lowEv + 0x000002a6 0x6 Button.o + 0x000002a6 _ZN6avrlib3pinINS_5portbELh4EE8make_lowEv + .text._ZN6avrlib3pinINS_5portbELh4EE9make_highEv + 0x000002ac 0x6 Button.o + 0x000002ac _ZN6avrlib3pinINS_5portbELh4EE9make_highEv + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh + 0x000002b2 0x4c Button.o + 0x000002b2 _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv + 0x000002fe 0xc8 Button.o + 0x000002fe _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage + 0x000003c6 0x128 Button.o + 0x000003c6 _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage + .text.startup.main + 0x000004ee 0xc8 Button.o + 0x000004ee main + .text._ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev + 0x000005b6 0x40 Button.o + 0x000005b6 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev + 0x000005b6 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev .text.startup._GLOBAL__sub_I_o - 0x000001be 0x30 Button.o - .text.libgcc 0x000001ee 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) - 0x000001ee __tablejump2__ - 0x000001f2 __tablejump__ - 0x000001fa . = ALIGN (0x2) + 0x000005f6 0x6c Button.o + .text.libgcc 0x00000662 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + 0x00000662 __tablejump2__ + 0x00000666 __tablejump__ + .text.avr-libc + 0x0000066e 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + 0x0000066e sprintf + .text.avr-libc + 0x000006b2 0x3b8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x000006b2 vfprintf + .text.avr-libc + 0x00000a6a 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + 0x00000a6a strnlen_P + .text.avr-libc + 0x00000a80 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + 0x00000a80 strnlen + .text.avr-libc + 0x00000a96 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + 0x00000a96 fputc + .text.avr-libc + 0x00000aee 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + 0x00000aee __ultoa_invert + .text.libgcc.prologue + 0x00000baa 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + 0x00000baa __prologue_saves__ + .text.libgcc.prologue + 0x00000be2 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + 0x00000be2 __epilogue_restores__ + 0x00000c18 . = ALIGN (0x2) *(.fini9) - .fini9 0x000001fa 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) - 0x000001fa _exit - 0x000001fa exit + .fini9 0x00000c18 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) + 0x00000c18 _exit + 0x00000c18 exit *(.fini9) *(.fini8) *(.fini8) @@ -314,11 +423,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x000001fa 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) + .fini0 0x00000c18 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) *(.fini0) - 0x000001fe _etext = . + 0x00000c1c _etext = . -.data 0x00800060 0x2 load address 0x000001fe +.data 0x00800060 0x30 load address 0x00000c1c 0x00800060 PROVIDE (__data_start, .) *(.data) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o @@ -329,33 +438,45 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_clear_bss.o) .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_ctors.o) .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .data 0x00800061 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) *(.data*) *(.rodata) *(.rodata*) + .rodata.str1.1 + 0x00800061 0x2f Button.o *(.gnu.linkonce.d*) - 0x00800062 . = ALIGN (0x2) - *fill* 0x00800061 0x1 - 0x00800062 _edata = . - 0x00800062 PROVIDE (__data_end, .) + 0x00800090 . = ALIGN (0x2) + 0x00800090 _edata = . + 0x00800090 PROVIDE (__data_end, .) -.bss 0x00800062 0x4 - 0x00800062 PROVIDE (__bss_start, .) +.bss 0x00800090 0x8 + 0x00800090 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800062 0x4 Button.o - 0x00800062 l - 0x00800065 o + .bss 0x00800090 0x8 Button.o + 0x00800090 c + 0x00800092 s + 0x00800093 u + 0x00800094 l + 0x00800097 o *(.bss*) *(COMMON) - 0x00800066 PROVIDE (__bss_end, .) - 0x000001fe __data_load_start = LOADADDR (.data) - 0x00000200 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00800098 PROVIDE (__bss_end, .) + 0x00000c1c __data_load_start = LOADADDR (.data) + 0x00000c4c __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800066 0x0 - 0x00800066 PROVIDE (__noinit_start, .) +.noinit 0x00800098 0x0 + 0x00800098 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800066 PROVIDE (__noinit_end, .) - 0x00800066 _end = . - 0x00800066 PROVIDE (__heap_start, .) + 0x00800098 PROVIDE (__noinit_end, .) + 0x00800098 _end = . + 0x00800098 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -376,13 +497,19 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .user_signatures *(.user_signatures*) -.stab 0x00000000 0x6cc +.stab 0x00000000 0xc84 *(.stab) .stab 0x00000000 0x6cc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o + .stab 0x000006cc 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + 0xa8 (size before relaxing) + .stab 0x00000768 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x00000804 0x480 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + 0x48c (size before relaxing) -.stabstr 0x00000000 0x82 +.stabstr 0x00000000 0x1aa *(.stabstr) - .stabstr 0x00000000 0x82 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o + .stabstr 0x00000000 0x1aa c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o .stab.excl *(.stab.excl) @@ -400,6 +527,9 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.comment) .comment 0x00000000 0x2f Button.o 0x30 (size before relaxing) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug *(.debug) @@ -413,39 +543,66 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x40 +.debug_aranges 0x00000000 0xf0 *(.debug_aranges) .debug_aranges - 0x00000000 0x40 Button.o + 0x00000000 0x90 Button.o + .debug_aranges + 0x00000090 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_aranges + 0x000000b0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_aranges + 0x000000d0 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x1454 +.debug_info 0x00000000 0x3985 *(.debug_info) - .debug_info 0x00000000 0x1454 Button.o + .debug_info 0x00000000 0x30c4 Button.o + .debug_info 0x000030c4 0x204 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_info 0x000032c8 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_info 0x00003811 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x37f +.debug_abbrev 0x00000000 0x970 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x37f Button.o + .debug_abbrev 0x00000000 0x57f Button.o + .debug_abbrev 0x0000057f 0x12a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_abbrev 0x000006a9 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_abbrev 0x0000087f 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_line 0x00000000 0x289 +.debug_line 0x00000000 0xa48 *(.debug_line) - .debug_line 0x00000000 0x289 Button.o + .debug_line 0x00000000 0x522 Button.o + .debug_line 0x00000522 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_line 0x00000670 0x2fe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_line 0x0000096e 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_frame 0x00000000 0x98 +.debug_frame 0x00000000 0x2d4 *(.debug_frame) - .debug_frame 0x00000000 0x98 Button.o + .debug_frame 0x00000000 0x220 Button.o + .debug_frame 0x00000220 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_frame 0x00000250 0x4c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_frame 0x0000029c 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_str 0x00000000 0xac2 +.debug_str 0x00000000 0x18ee *(.debug_str) - .debug_str 0x00000000 0xac2 Button.o - 0xb07 (size before relaxing) + .debug_str 0x00000000 0x173f Button.o + 0x17ad (size before relaxing) + .debug_str 0x0000173f 0xa3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + 0x127 (size before relaxing) + .debug_str 0x000017e2 0xbf c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x198 (size before relaxing) + .debug_str 0x000018a1 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + 0xf8 (size before relaxing) -.debug_loc 0x00000000 0x210 +.debug_loc 0x00000000 0xdfd *(.debug_loc) - .debug_loc 0x00000000 0x210 Button.o + .debug_loc 0x00000000 0x7cc Button.o + .debug_loc 0x000007cc 0x21 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_loc 0x000007ed 0x51d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_loc 0x00000d0a 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_macinfo *(.debug_macinfo) @@ -453,9 +610,12 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x78 +.debug_ranges 0x00000000 0x158 *(.debug_ranges) - .debug_ranges 0x00000000 0x78 Button.o + .debug_ranges 0x00000000 0x128 Button.o + .debug_ranges 0x00000128 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_ranges 0x00000138 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_ranges 0x00000148 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_macro *(.debug_macro) diff --git a/Button/Button/Debug/Button.srec b/Button/Button/Debug/Button.srec index 04ad386..d4826c3 100644 --- a/Button/Button/Debug/Button.srec +++ b/Button/Button/Debug/Button.srec @@ -1,35 +1,199 @@ S00E0000427574746F6E2E737265639A S11300000C942B000C9453000C9453000C94530048 -S11300100C94D5000C9453000C9453000C9453008E +S11300100C94A8000C9453000C9453000C945300BB S11300200C9453000C9453000C9453000C94530000 S11300300C9453000C9453000C9453000C945300F0 S11300400C9453000C9453000C9453000C945300E0 -S11300500C945300DF0011241FBECFE5D8E0DEBFAF -S1130060CDBF10E0A0E6B0E0EEEFF1E002C00590F5 -S11300700D92A236B107D9F720E0A2E6B0E001C0A4 -S11300801D92A636B207E1F710E0C6E5D0E004C041 -S11300902297FE010E94F900C435D107C9F70E94D6 -S11300A09B000C94FD000C94000080FF02C0A89AF1 -S11300B001C0A898A09A81FF02C0A99A01C0A9987A -S11300C0A19A82FF02C0AA9A01C0AA98A29A08958E -S11300D0CF92DF92EF92FF920F931F93CF93DF9310 -S11300E0D82EC62EC0E0D0E019C08D2D0E94550038 -S11300F01F5F1F3FD1F700E010E005C08C2D0E9468 -S113010055000F5F1F4F0C171D07C4F3FA9411F02D -S11301101E2DEBCF2196CF3FD10521F0EC2E85E0AB -S1130120F82EF6CFDF91CF911F910F91FF90EF90B2 -S1130130DF90CF9008951AEACEEFD3E610936200D1 -S1130140C0936300D09364002FEF86E191E12150C6 -S113015080409040E1F700C00000C0936200C0936B -S11301606300C09364002FEF86E191E12150804049 -S11301709040E1F700C0000066E084E00E9468005F -S113018062E086E00E94680063E082E00E9468000A -S113019061E083E00E94680065E081E00E946800FD -S11301A064E085E00E946800C9CF1F920F920FB6E9 -S11301B00F9211240F900FBE0F901F901895A59ABF -S11301C0AD98A59AA49AAC98A49A10926200109241 -S11301D0630010926400A29AA19AA09A12BC85E0CE -S11301E085BD14BC13BC80E889BF78940895EE0FD4 -S11101F0FF1F0590F491E02D0994F894FFCFC1 -S10501FE0100FA +S11300500C945300FB0211241FBECFE5D8E0DEBF91 +S1130060CDBF10E0A0E6B0E0ECE1FCE002C00590FA +S11300700D92A039B107D9F720E0A0E9B0E001C0A2 +S11300801D92A839B207E1F710E0C6E5D0E004C03C +S11300902297FE010E943303C435D107C9F70E9499 +S11300A077020C940C060C940000FC0103C05D9BC9 +S11300B0FECF8CB981918111FACF0895BD9A08952C +S11300C0BF9A089580FF02C0A89A01C0A898A09A78 +S11300D081FF02C0A99A01C0A998A19A82FF02C017 +S11300E0AA9A01C0AA98A29A0895CF92DF92EF9299 +S11300F0FF920F931F93CF93DF93D82EC62EC0E0A9 +S1130100D0E019C08D2D0E9462001F5F1F3FD1F700 +S113011000E010E005C08C2D0E9462000F5F1F4FAD +S11301200C171D07C4F3FA9411F01E2DEBCF219682 +S1130130CF3FD10521F0EC2E85E0F82EF6CFDF91EC +S1130140CF911F910F91FF90EF90DF90CF90089582 +S11301501F920F920FB60F9211242F933F934F9338 +S11301605F936F937F938F939F93AF93BF93CF933B +S1130170EF93FF93C0E080919400C81710F080E0E3 +S113018001C084E090919500C91708F482609091B1 +S11301909600C91708F481600E946200CF5FCF3FC8 +S11301A051F7FF91EF91CF91BF91AF919F918F91B3 +S11301B07F916F915F914F913F912F910F900FBE5F +S11301C00F901F901895EF92FF920F931F93CF9368 +S11301D0DF93CDB7DEB7E2970FB6F894DEBF0FBE5C +S11301E0CDBFE62E1F926F9381E690E09F938F938D +S11301F08E010F5F1F4F1F930F930E943703C80197 +S11302000E945500EFB80F900F900F900F900F9031 +S11302100F90779BFECF8FB118E0F12CFF0CC7989D +S11302200E946000E7FE02C0C59A01C0C5980E9402 +S11302305E0085E08A95F1F70000B69B02C081E07C +S1130240F82A85E08A95F1F70000C79A0E946000B9 +S11302508AE08A95F1F700C0EE0C1150F9F61F926E +S1130260FF922BE630E03F932F938E010F5F1F4FD9 +S11302701F930F930E943703C8010E9455000F90EB +S11302800F900F900F900F900F908F2DE2960FB656 +S1130290F894DEBF0FBECDBFDF91CF911F910F91B8 +S11302A0FF90EF900895C498BC9A0895C49ABC9A9C +S11302B00895FF920F931F93CF93DF931F92CDB7AF +S11302C0DEB7F82E092F162F49830E94530162E0EE +S11302D08F2D902F0E94E300612F8F2D902F0E946D +S11302E0E3004981642F8F2D902F0E94E3000F902B +S11302F0DF91CF911F910F91FF900C945601CF93F2 +S1130300DF93EC010E94530160ECCE010E94E300F4 +S11303108FE99FE00197F1F700C000000E945601A9 +S11303208FE39CE90197F1F700C0000047E06AE21F +S1130330CE010E94590140E969E2CE010E945901AF +S113034042E068E2CE010E94590143E06BE2CE0133 +S11303500E94590140E660E6CE010E94590140E640 +S113036060E7CE010E94590140E060E2CE010E94A4 +S1130370590140E061E2CE010E94590140E062E28D +S1130380CE010E94590140E063E2CE010E9459016E +S113039040E064E2CE010E94590140E065E2CE01F2 +S11303A00E94590140E066E2CE010E94590140E0FA +S11303B067E2CE010E94590140E06CE0CE01DF917A +S11303C0CF910C945901AF92BF92CF92DF92EF92EA +S11303D0FF920F931F93CF93DF931F92CDB7DEB796 +S11303E06C018B010E94530160EAC6010E94E30084 +S11303F06FEFC6010E94E30089836FEFC6010E947C +S1130400E3000E945601898182FF09C0898184FF2B +S113041008C0898186FD5EC044E0B42E04C0B12CBE +S113042002C032E0B32E0E9453016B2D6064C601FA +S11304300E94E300F8016081718123E0769567955D +S11304402A95E1F7C6010E94E300F80160816295F4 +S1130450660F607EC6010E94E30060E0C6010E9450 +S1130460E30060E0C6010E94E300F801A380F8E025 +S1130470FA1510F498E0A92EF80182816A2D8823D8 +S113048029F06064C6010E94E30012C0C6010E9404 +S1130490E300E12CF12C0AC0F801EE0DFF1D64818C +S11304A0C6010E94E300FFEFEF1AFF0AEA14A0F36B +S11304B00E94560100000E945301B11002C061E87D +S11304C002C06B2D6068C6010E94E3000E945601C1 +S11304D081E001C080E00F90DF91CF911F910F91D7 +S11304E0FF90EF90DF90CF90BF90AF900895CF939F +S11304F0DF93CDB7DEB72C970FB6F894DEBF0FBEEF +S1130500CDBF7894EE24E39401E010E05AEAC52EBE +S11305106EEFF62E73E6D72EEC82ED821A830983F2 +S1130520BE016F5F7F4F80E990E00E94E30187E79F +S113053090E00E9455002FEF87EA91E62150804019 +S11305409040E1F700C00000C0929400F092950042 +S1130550D09296002FEF86E191E1215080409040A7 +S1130560E1F700C00000F0929400F0929500F09240 +S113057096002FEF86E191E1215080409040E1F711 +S113058000C0000066E084E00E94750062E086E03E +S11305900E94750063E082E00E94750061E083E0E0 +S11305A00E94750065E081E00E94750064E085E0CA +S11305B00E947500B1CF87E689B988E08AB986E8D8 +S11305C080BD83E890E00E9455000E945E00C598BB +S11305D00E945E000E946000C7980E946000BC9A5E +S11305E00E945601BE98C698C698BE9A80E58DB9F9 +S11305F081E08EB908951F93CF93DF93A59AAD98A8 +S1130600A59AA49AAC98A49A10929400109295007A +S113061010929600A29AA19AA09A15BC14BC13BC7D +S113062019BE17E619B9D8E0DAB9C6E8C0BD83E83F +S113063090E00E94550082E990E00E94DB0280E98C +S113064090E00E94DB0219B9DAB9C0BD83E890E0FA +S11306500E94550080E990E0DF91CF911F910C94A6 +S11306607F01EE0FFF1F0590F491E02D0994AEE099 +S1130670B0E0EDE3F3E00C94E3050D891E8986E018 +S11306808C831A8309838FEF9FE79E838D83CE012A +S11306904996AC016F89788DCE0101960E94590369 +S11306A0EF81F885E00FF11F10822E96E4E00C94A0 +S11306B0FF05ACE0B0E0EFE5F3E00C94D5057C0178 +S11306C06B018A01FC0117821682838181FFC6C1F6 +S11306D088248394912C8C0E9D1EF7019381F6013E +S11306E093FD859193FF81916F01882309F4B2C131 +S11306F0853239F493FD859193FF81916F018532A1 +S113070029F4B70190E00E944B05E7CF512C312C1E +S113071020E02032A8F48B3261F028F4803251F0CA +S1130720833271F40BC08D3239F0803349F4216087 +S113073028C02260246025C0286023C0206121C015 +S113074027FD27C0382F30533A3078F426FF06C0EF +S1130750FAE05F9E300D1124532E13C08AE0389EB8 +S1130760300D1124332E20620CC08E3221F426FD6C +S113077071C1206406C08C3611F4206802C088362A +S113078041F4F60193FD859193FF81916F018111ED +S1130790C0CF982F9554933018F09052933028F48A +S11307A00C5F1F4FFFE3F9830DC0833631F08337AD +S11307B071F0833509F05EC023C0F801808189831C +S11307C00E5F1F4F44244394512C540115C038012B +S11307D0F2E06F0E711CF801A080B18026FF03C007 +S11307E0652D70E002C06FEF7FEFC5012C870E947A +S11307F040052C0183012C856FE7262E222218C088 +S11308003801F2E06F0E711CF801A080B18026FF60 +S113081003C0652D70E002C06FEF7FEFC5012C8728 +S11308200E9435052C012C8550E8252E222A8301AF +S113083023FC1CC006C0B70180E290E00E944B0577 +S11308403A94832D90E048165906A8F30FC0F50199 +S113085027FC859127FE81915F01B70190E00E94FA +S11308604B0531103A94F1E04F1A510841145104E8 +S113087071F7EDC0843611F0893641F5F80127FF90 +S113088007C060817181828193810C5F1F4F08C012 +S113089060817181882777FD8095982F0E5F1F4FA7 +S11308A04FE6B42EB22297FF09C0909580957095BB +S11308B061957F4F8F4F9F4FF0E8BF2A2AE030E0C9 +S11308C0A4010E947705A82EA81843C0853731F4E7 +S11308D03FEEB32EB2222AE030E024C099EFB92EC5 +S11308E0B2228F36B9F020F4883509F0B3C00DC0B8 +S11308F0803721F0883709F0ADC002C020E1B22A68 +S1130900B4FE0BC084E0B82A08C024FF09C0E6E0A6 +S1130910BE2A06C028E030E005C020E130E002C075 +S113092020E132E0F801B7FE07C060817181828165 +S113093093810C5F1F4F06C06081718180E090E05D +S11309400E5F1F4FA4010E947705A82EA818FFE789 +S1130950BF22B6FE0BC02B2D2E7FA51450F4B4FE7F +S11309600AC0B2FC08C02B2D2E7E05C07A2C2B2D7C +S113097003C07A2C01C0752C24FF0DC0FE01EA0DC2 +S1130980F11D8081803311F4297E09C022FF06C045 +S11309907394739404C0822F867809F0739423FDB2 +S11309A014C020FF0FC05A2C731460F4530C571852 +S11309B0732C08C0B70180E290E02C870E944B059D +S11309C073942C857314B0F304C0731410F43718A3 +S11309D001C0312C24FF12C0B70180E390E02C87C2 +S11309E00E944B052C8522FF1EC021FF03C088E511 +S11309F090E002C088E790E0B7010CC0822F8678AF +S1130A0091F021FD02C080E201C08BE227FD8DE25E +S1130A10B70190E00E944B0506C0B70180E390E067 +S1130A200E944B055A94A514C0F3AA94F401EA0D4C +S1130A30F11DB701808190E00E944B05A110F5CF14 +S1130A4006C0B70180E290E00E944B053A94311051 +S1130A50F8CF43CEF7012681378102C02FEF3FEF55 +S1130A60C9012C96E2E10C94F105FC01059061505A +S1130A7070400110D8F7809590958E0F9F1F0895B0 +S1130A80FC016150704001900110D8F78095909559 +S1130A908E0F9F1F08950F931F93CF93DF938C01A5 +S1130AA0EB018B8181FD03C00FEF1FEF1AC082FFA2 +S1130AB00DC02E813F818C819D812817390764F4F4 +S1130AC0E881F9810193F983E88306C0E885F98513 +S1130AD0802F0995892B41F78E819F8101969F83F1 +S1130AE08E83C801DF91CF911F910F910895FA0170 +S1130AF0AA27283051F1203181F1E8946F936E7F59 +S1130B006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E049 +S1130B103CD0670F781F891F9A1FA11D680F791F8A +S1130B208A1F911DA11D6A0F711D811D911DA11D9B +S1130B3020D009F468943F912AE0269F11243019AB +S1130B40305D3193DEF6CF010895462F4770405D46 +S1130B504193B3E00FD0C9F7F6CF462F4F70405DF5 +S1130B604A3318F0495D31FD4052419302D0A9F750 +S1130B70EACFB4E0A6959795879577956795BA954A +S1130B80C9F700976105710508959B01AC010A2E10 +S1130B9006945795479537952795BA95C9F7620FE7 +S1130BA0731F841F951FA01D08952F923F924F928B +S1130BB05F926F927F928F929F92AF92BF92CF92E9 +S1130BC0DF92EF92FF920F931F93CF93DF93CDB7F2 +S1130BD0DEB7CA1BDB0B0FB6F894DEBF0FBECDBF6A +S1130BE009942A88398848885F846E847D848C843B +S1130BF09B84AA84B984C884DF80EE80FD800C8144 +S1130C001B81AA81B981CE0FD11D0FB6F894DEBF26 +S10F0C100FBECDBFED010895F894FFCF96 +S1130C1C012D3E2030782530327800203C2D2030B8 +S1130C2C78253032780A00676573656E6465742EB6 +S1130C3C2E0A005561727420646F6E65210D0A00D2 S9030000FC diff --git a/Button/Button/Led.hpp b/Button/Button/Led.hpp index f2840fa..b448c0e 100644 --- a/Button/Button/Led.hpp +++ b/Button/Button/Led.hpp @@ -98,8 +98,7 @@ class Led { red::make_output(); green::make_output(); blue::make_output(); - inton(); - sei(); + intoff(); } void uninit(); const typedef avrlib::pin red; diff --git a/Button/Button/Spi.hpp b/Button/Button/Spi.hpp index 60e6c7b..10eb411 100644 --- a/Button/Button/Spi.hpp +++ b/Button/Button/Spi.hpp @@ -33,9 +33,10 @@ class Spi { uint8_t r; if(mode == 0) { r = send_hard(data); + } else { + r = send_soft(data); } - r = send_soft(data); - sprintf(t, " <- 0x%02x\r\n", r); + sprintf(t, " <- 0x%02x\n", r); u.send(t); return r; } diff --git a/Button/Button/uart.hpp b/Button/Button/uart.hpp index 8746be6..4e3a4d9 100644 --- a/Button/Button/uart.hpp +++ b/Button/Button/uart.hpp @@ -12,11 +12,13 @@ #include "config.h" #include #include +#include template class Uart { public: Uart() { + sei(); init(); send("Uart done!\r\n"); }