servo.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 000007d8 00000000 00000000 00000074 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .bss 000000e0 00800100 000007d8 0000084c 2**0 ALLOC 2 .stab 0000075c 00000000 00000000 0000084c 2**2 CONTENTS, READONLY, DEBUGGING 3 .stabstr 00000054 00000000 00000000 00000fa8 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_aranges 00000080 00000000 00000000 00000ffc 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_pubnames 00000197 00000000 00000000 0000107c 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_info 00000aaa 00000000 00000000 00001213 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_abbrev 000004ed 00000000 00000000 00001cbd 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_line 000007ec 00000000 00000000 000021aa 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_frame 00000110 00000000 00000000 00002998 2**2 CONTENTS, READONLY, DEBUGGING 10 .debug_str 00000559 00000000 00000000 00002aa8 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_loc 00000342 00000000 00000000 00003001 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_ranges 00000018 00000000 00000000 00003343 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end> 4: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 8: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 10: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 14: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 18: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 1c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 20: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 24: 0c 94 b3 03 jmp 0x766 ; 0x766 <__vector_9> 28: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 2c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 30: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 34: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 38: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 3c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 40: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 44: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 48: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 4c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 50: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 54: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 58: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 5c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 60: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 64: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 68: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 6c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 70: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 74: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 78: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 7c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 80: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 84: 0c 94 de 00 jmp 0x1bc ; 0x1bc <__vector_33> 88: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt> 0000008c <__ctors_end>: 8c: 11 24 eor r1, r1 8e: 1f be out 0x3f, r1 ; 63 90: cf ef ldi r28, 0xFF ; 255 92: d0 e1 ldi r29, 0x10 ; 16 94: de bf out 0x3e, r29 ; 62 96: cd bf out 0x3d, r28 ; 61 00000098 <__do_copy_data>: 98: 11 e0 ldi r17, 0x01 ; 1 9a: a0 e0 ldi r26, 0x00 ; 0 9c: b1 e0 ldi r27, 0x01 ; 1 9e: e8 ed ldi r30, 0xD8 ; 216 a0: f7 e0 ldi r31, 0x07 ; 7 a2: 00 e0 ldi r16, 0x00 ; 0 a4: 0b bf out 0x3b, r16 ; 59 a6: 02 c0 rjmp .+4 ; 0xac <__do_copy_data+0x14> a8: 07 90 elpm r0, Z+ aa: 0d 92 st X+, r0 ac: a0 30 cpi r26, 0x00 ; 0 ae: b1 07 cpc r27, r17 b0: d9 f7 brne .-10 ; 0xa8 <__do_copy_data+0x10> b2: 1b be out 0x3b, r1 ; 59 000000b4 <__do_clear_bss>: b4: 11 e0 ldi r17, 0x01 ; 1 b6: a0 e0 ldi r26, 0x00 ; 0 b8: b1 e0 ldi r27, 0x01 ; 1 ba: 01 c0 rjmp .+2 ; 0xbe <.do_clear_bss_start> 000000bc <.do_clear_bss_loop>: bc: 1d 92 st X+, r1 000000be <.do_clear_bss_start>: be: a0 3e cpi r26, 0xE0 ; 224 c0: b1 07 cpc r27, r17 c2: e1 f7 brne .-8 ; 0xbc <.do_clear_bss_loop> c4: 0e 94 6e 00 call 0xdc ; 0xdc
c8: 0c 94 ea 03 jmp 0x7d4 ; 0x7d4 <_exit> 000000cc <__bad_interrupt>: cc: 0c 94 00 00 jmp 0 ; 0x0 <__heap_end> 000000d0 <_Z11Twi_ReceivePvS_>: #include "motor.h" #include "servo.h" #define LED_PIN PC2 void Twi_Receive(void* data_ptr, void* packet_length){ d0: a2 9a sbi 0x14, 2 ; 20 DDRC |= (1<: void led(void *d,void*s){ d6: 8f ef ldi r24, 0xFF ; 255 d8: 85 bb out 0x15, r24 ; 21 PORTC = 0xff; } da: 08 95 ret 000000dc
: int main(void) dc: ef 92 push r14 de: 0f 93 push r16 e0: 1f 93 push r17 { DDRC = 0xff; e2: 8f ef ldi r24, 0xFF ; 255 e4: 84 bb out 0x14, r24 ; 20 PORTC=0xff; e6: 85 bb out 0x15, r24 ; 21 cli(); e8: f8 94 cli PORTC=0xff; ea: 1f ef ldi r17, 0xFF ; 255 ec: 15 bb out 0x15, r17 ; 21 TaskManager::Init(); ee: 0e 94 9c 03 call 0x738 ; 0x738 <_ZN11TaskManager4InitEv> PORTC=0xff; f2: 15 bb out 0x15, r17 ; 21 Clock::Init(); f4: 0e 94 ac 03 call 0x758 ; 0x758 <_ZN5Clock4InitEv> //TWI::Init(0,0); //MOTOR::init(0,0); //SERVO::Init(0,0); //TaskManager::AddTask(MOTOR::runUp,0,0,TaskManager::MULTI_RUN,2000,TaskManager::MEDIUM); //TaskManager::AddTask(MOTOR::runDown,0,0,TaskManager::MULTI_RUN,1500,TaskManager::MEDIUM); sei(); f8: 78 94 sei TaskManager::AddTask(led,0,0,TaskManager::MULTI_RUN,250,TaskManager::MEDIUM); fa: 8b e6 ldi r24, 0x6B ; 107 fc: 90 e0 ldi r25, 0x00 ; 0 fe: 60 e0 ldi r22, 0x00 ; 0 100: 70 e0 ldi r23, 0x00 ; 0 102: 40 e0 ldi r20, 0x00 ; 0 104: 50 e0 ldi r21, 0x00 ; 0 106: 21 e0 ldi r18, 0x01 ; 1 108: 0a ef ldi r16, 0xFA ; 250 10a: 10 e0 ldi r17, 0x00 ; 0 10c: 32 e3 ldi r19, 0x32 ; 50 10e: e3 2e mov r14, r19 110: 0e 94 ed 01 call 0x3da ; 0x3da <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE> for(;;){ TaskManager::ExecuteNextTask(); 114: 0e 94 f7 02 call 0x5ee ; 0x5ee <_ZN11TaskManager15ExecuteNextTaskEv> 118: fd cf rjmp .-6 ; 0x114 0000011a <_ZN3TWI4InitEPvS0_>: volatile struct TWI_Packet packet; volatile uint8_t tmp_crc; uint8_t slave_addr; void Init(void* unused1, void* unused2){ 11a: 80 91 11 01 lds r24, 0x0111 11e: 88 0f add r24, r24 120: 81 60 ori r24, 0x01 ; 1 122: 80 93 72 00 sts 0x0072, r24 //Setup the TWI as a slave receiver TWAR = (slave_addr<<1) | 0x01; TWBR = 32; 126: 80 e2 ldi r24, 0x20 ; 32 128: 80 93 70 00 sts 0x0070, r24 TWSR &= ~((1<: void Send(uint8_t address, uint8_t* pckt, uint8_t pckt_length){ 152: 58 2f mov r21, r24 if(current_mode!=SLAVE && current_mode!=MSTR_ERR) 154: 80 91 01 01 lds r24, 0x0101 158: 81 30 cpi r24, 0x01 ; 1 15a: 31 f1 breq .+76 ; 0x1a8 <_ZN3TWI4SendEhPhh+0x56> 15c: 80 91 01 01 lds r24, 0x0101 160: 84 30 cpi r24, 0x04 ; 4 162: 59 f5 brne .+86 ; 0x1ba <_ZN3TWI4SendEhPhh+0x68> 164: 21 c0 rjmp .+66 ; 0x1a8 <_ZN3TWI4SendEhPhh+0x56> return; packet.crc = 0xff; //Copy the bytes into the buffer, and calculate the crc checksum for(int8_t i = 0; i < pckt_length; i++){ packet.packet[i] = pckt[i]; 166: 8c 91 ld r24, X 168: f9 01 movw r30, r18 16a: ee 5f subi r30, 0xFE ; 254 16c: fe 4f sbci r31, 0xFE ; 254 16e: 82 83 std Z+2, r24 ; 0x02 packet.crc ^= pckt[i]; 170: 80 91 0e 01 lds r24, 0x010E 174: 9d 91 ld r25, X+ 176: 89 27 eor r24, r25 178: 80 93 0e 01 sts 0x010E, r24 17c: 2f 5f subi r18, 0xFF ; 255 17e: 3f 4f sbci r19, 0xFF ; 255 if(current_mode!=SLAVE && current_mode!=MSTR_ERR) return; packet.crc = 0xff; //Copy the bytes into the buffer, and calculate the crc checksum for(int8_t i = 0; i < pckt_length; i++){ 180: 26 17 cp r18, r22 182: 37 07 cpc r19, r23 184: 84 f3 brlt .-32 ; 0x166 <_ZN3TWI4SendEhPhh+0x14> packet.packet[i] = pckt[i]; packet.crc ^= pckt[i]; } cur_data_ptr = 0; 186: 10 92 00 01 sts 0x0100, r1 packet.packet_length = pckt_length; 18a: 40 93 03 01 sts 0x0103, r20 packet.address_r_w = (address << 1) & 0xfe; //'Write' 18e: 85 2f mov r24, r21 190: 90 e0 ldi r25, 0x00 ; 0 192: 88 0f add r24, r24 194: 99 1f adc r25, r25 196: 80 93 02 01 sts 0x0102, r24 //Send the start condition TWCR = (1< 1ba: 08 95 ret 000001bc <__vector_33>: TWI::current_mode = MSTR_START_SENT; } }; ISR(TWI_vect){ 1bc: 1f 92 push r1 1be: 0f 92 push r0 1c0: 0f b6 in r0, 0x3f ; 63 1c2: 0f 92 push r0 1c4: 0b b6 in r0, 0x3b ; 59 1c6: 0f 92 push r0 1c8: 11 24 eor r1, r1 1ca: ef 92 push r14 1cc: 0f 93 push r16 1ce: 1f 93 push r17 1d0: 2f 93 push r18 1d2: 3f 93 push r19 1d4: 4f 93 push r20 1d6: 5f 93 push r21 1d8: 6f 93 push r22 1da: 7f 93 push r23 1dc: 8f 93 push r24 1de: 9f 93 push r25 1e0: af 93 push r26 1e2: bf 93 push r27 1e4: ef 93 push r30 1e6: ff 93 push r31 if((TWI::current_mode&(TWI::SLAVE | TWI::SLAVE_ACK | TWI::SLAVE_DATA))!=0){//slave 1e8: 80 91 01 01 lds r24, 0x0101 1ec: 81 7c andi r24, 0xC1 ; 193 1ee: 09 f4 brne .+2 ; 0x1f2 <__vector_33+0x36> 1f0: 7a c0 rjmp .+244 ; 0x2e6 <__vector_33+0x12a> switch(TW_STATUS){ 1f2: 80 91 71 00 lds r24, 0x0071 1f6: 90 e0 ldi r25, 0x00 ; 0 1f8: 88 7f andi r24, 0xF8 ; 248 1fa: 90 70 andi r25, 0x00 ; 0 1fc: 80 38 cpi r24, 0x80 ; 128 1fe: 91 05 cpc r25, r1 200: a1 f0 breq .+40 ; 0x22a <__vector_33+0x6e> 202: 81 38 cpi r24, 0x81 ; 129 204: 91 05 cpc r25, r1 206: 4c f4 brge .+18 ; 0x21a <__vector_33+0x5e> 208: 80 36 cpi r24, 0x60 ; 96 20a: 91 05 cpc r25, r1 20c: 09 f4 brne .+2 ; 0x210 <__vector_33+0x54> 20e: 5a c0 rjmp .+180 ; 0x2c4 <__vector_33+0x108> 210: 80 37 cpi r24, 0x70 ; 112 212: 91 05 cpc r25, r1 214: 09 f0 breq .+2 ; 0x218 <__vector_33+0x5c> 216: 65 c0 rjmp .+202 ; 0x2e2 <__vector_33+0x126> 218: 55 c0 rjmp .+170 ; 0x2c4 <__vector_33+0x108> 21a: 80 39 cpi r24, 0x90 ; 144 21c: 91 05 cpc r25, r1 21e: 29 f0 breq .+10 ; 0x22a <__vector_33+0x6e> 220: 80 3a cpi r24, 0xA0 ; 160 222: 91 05 cpc r25, r1 224: 09 f0 breq .+2 ; 0x228 <__vector_33+0x6c> 226: 5d c0 rjmp .+186 ; 0x2e2 <__vector_33+0x126> 228: 5a c0 rjmp .+180 ; 0x2de <__vector_33+0x122> case TW_SR_GCALL_DATA_ACK: case TW_SR_DATA_ACK: if(TWI::current_mode==TWI::SLAVE_ACK){ 22a: 80 91 01 01 lds r24, 0x0101 22e: 80 34 cpi r24, 0x40 ; 64 230: 49 f4 brne .+18 ; 0x244 <__vector_33+0x88> TWI::packet.packet_length = TWDR; 232: 80 91 73 00 lds r24, 0x0073 236: 80 93 03 01 sts 0x0103, r24 TWI::tmp_crc = 0xff; 23a: 8f ef ldi r24, 0xFF ; 255 23c: 80 93 10 01 sts 0x0110, r24 TWI::current_mode = TWI::SLAVE_DATA; 240: 80 e8 ldi r24, 0x80 ; 128 242: 3d c0 rjmp .+122 ; 0x2be <__vector_33+0x102> } else if(TWI::current_mode==TWI::SLAVE_DATA){ 244: 80 91 01 01 lds r24, 0x0101 248: 80 38 cpi r24, 0x80 ; 128 24a: 09 f0 breq .+2 ; 0x24e <__vector_33+0x92> 24c: 48 c0 rjmp .+144 ; 0x2de <__vector_33+0x122> if(TWI::cur_data_ptr TWI::packet.packet[TWI::cur_data_ptr++] = TWDR; 25a: 80 91 00 01 lds r24, 0x0100 25e: e8 2f mov r30, r24 260: f0 e0 ldi r31, 0x00 ; 0 262: 90 91 73 00 lds r25, 0x0073 266: ee 5f subi r30, 0xFE ; 254 268: fe 4f sbci r31, 0xFE ; 254 26a: 92 83 std Z+2, r25 ; 0x02 26c: 8f 5f subi r24, 0xFF ; 255 26e: 80 93 00 01 sts 0x0100, r24 TWI::tmp_crc ^= TWDR; 272: 90 91 10 01 lds r25, 0x0110 276: 80 91 73 00 lds r24, 0x0073 27a: 89 27 eor r24, r25 27c: 80 93 10 01 sts 0x0110, r24 280: 2e c0 rjmp .+92 ; 0x2de <__vector_33+0x122> } else{//Check CRC and add callback-task TWI::packet.crc = TWDR; 282: 80 91 73 00 lds r24, 0x0073 286: 80 93 0e 01 sts 0x010E, r24 if(TWI::tmp_crc!=TWI::packet.crc) 28a: 90 91 10 01 lds r25, 0x0110 28e: 80 91 0e 01 lds r24, 0x010E 292: 98 17 cp r25, r24 294: 11 f0 breq .+4 ; 0x29a <__vector_33+0xde> TWI::packet.check = TWI::ERROR; 296: 81 e0 ldi r24, 0x01 ; 1 298: 01 c0 rjmp .+2 ; 0x29c <__vector_33+0xe0> else TWI::packet.check = TWI::GOOD; 29a: 82 e0 ldi r24, 0x02 ; 2 29c: 80 93 0f 01 sts 0x010F, r24 TaskManager::AddTaskInt(Twi_Receive,(void*)&TWI::packet,0,TaskManager::SINGLE_RUN,0,TaskManager::HIGH); 2a0: 88 e6 ldi r24, 0x68 ; 104 2a2: 90 e0 ldi r25, 0x00 ; 0 2a4: 62 e0 ldi r22, 0x02 ; 2 2a6: 71 e0 ldi r23, 0x01 ; 1 2a8: 40 e0 ldi r20, 0x00 ; 0 2aa: 50 e0 ldi r21, 0x00 ; 0 2ac: 20 e0 ldi r18, 0x00 ; 0 2ae: 00 e0 ldi r16, 0x00 ; 0 2b0: 10 e0 ldi r17, 0x00 ; 0 2b2: ee 24 eor r14, r14 2b4: 0e 94 75 02 call 0x4ea ; 0x4ea <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE> TWI::cur_data_ptr = 0; 2b8: 10 92 00 01 sts 0x0100, r1 TWI::current_mode = TWI::SLAVE; 2bc: 81 e0 ldi r24, 0x01 ; 1 2be: 80 93 01 01 sts 0x0101, r24 2c2: 0d c0 rjmp .+26 ; 0x2de <__vector_33+0x122> } TWCR = (1< break; case TW_SR_STOP: TWCR = (1< //TWI::Init(0,0); break; case TW_SR_GCALL_DATA_NACK: case TW_SR_DATA_NACK: default: TWCR = (1< } } else{ switch(TW_STATUS){ 2e6: 80 91 71 00 lds r24, 0x0071 2ea: 90 e0 ldi r25, 0x00 ; 0 2ec: 88 7f andi r24, 0xF8 ; 248 2ee: 90 70 andi r25, 0x00 ; 0 2f0: 88 31 cpi r24, 0x18 ; 24 2f2: 91 05 cpc r25, r1 2f4: 79 f0 breq .+30 ; 0x314 <__vector_33+0x158> 2f6: 88 32 cpi r24, 0x28 ; 40 2f8: 91 05 cpc r25, r1 2fa: 99 f0 breq .+38 ; 0x322 <__vector_33+0x166> 2fc: 08 97 sbiw r24, 0x08 ; 8 2fe: 09 f0 breq .+2 ; 0x302 <__vector_33+0x146> 300: 50 c0 rjmp .+160 ; 0x3a2 <__vector_33+0x1e6> case TW_START: //Successfully sent start-condition //Send the address of the slave to receive TWDR = TWI::packet.address_r_w; 302: 80 91 02 01 lds r24, 0x0102 306: 80 93 73 00 sts 0x0073, r24 TWCR = (1< break; case TW_MT_SLA_ACK: TWI::cur_data_ptr = 0; 314: 10 92 00 01 sts 0x0100, r1 TWDR = TWI::packet.packet_length; 318: 80 91 03 01 lds r24, 0x0103 31c: 80 93 73 00 sts 0x0073, r24 320: 39 c0 rjmp .+114 ; 0x394 <__vector_33+0x1d8> TWCR = (1< //Send the crc TWDR = TWI::packet.crc; 32e: 80 91 0e 01 lds r24, 0x010E 332: 80 93 73 00 sts 0x0073, r24 TWI::cur_data_ptr++; 336: 80 91 00 01 lds r24, 0x0100 33a: 8f 5f subi r24, 0xFF ; 255 33c: 80 93 00 01 sts 0x0100, r24 340: 29 c0 rjmp .+82 ; 0x394 <__vector_33+0x1d8> TWCR = (1< TWCR = (1< 37a: 19 c0 rjmp .+50 ; 0x3ae <__vector_33+0x1f2> //TWI::current_mode =TWI::SLAVE; } else{ TWDR = TWI::packet.packet[TWI::cur_data_ptr++]; 37c: 90 91 00 01 lds r25, 0x0100 380: e9 2f mov r30, r25 382: f0 e0 ldi r31, 0x00 ; 0 384: ee 5f subi r30, 0xFE ; 254 386: fe 4f sbci r31, 0xFE ; 254 388: 82 81 ldd r24, Z+2 ; 0x02 38a: 80 93 73 00 sts 0x0073, r24 38e: 9f 5f subi r25, 0xFF ; 255 390: 90 93 00 01 sts 0x0100, r25 TWCR = (1< } break; default: TWI::current_mode = TWI::MSTR_ERR; 3a2: 84 e0 ldi r24, 0x04 ; 4 3a4: 80 93 01 01 sts 0x0101, r24 TWCR = (1<: //Local variables volatile uint8_t cur_done; volatile uint8_t counter; void AddTask(void (*function)(void*,void*), void* arg0, void* arg1,TASK_TYPE type,uint16_t interval,PRIORITY pri){ 3da: cf 92 push r12 3dc: df 92 push r13 3de: ef 92 push r14 3e0: ff 92 push r15 3e2: 0f 93 push r16 3e4: 1f 93 push r17 3e6: cf 93 push r28 3e8: df 93 push r29 3ea: 6c 01 movw r12, r24 3ec: f2 2e mov r15, r18 3ee: 9e 2d mov r25, r14 3f0: 20 e0 ldi r18, 0x00 ; 0 3f2: 30 e0 ldi r19, 0x00 ; 0 3f4: a2 2f mov r26, r18 uint8_t index = 0; //Find the first free spot in the task-queue for(index=0; index 402: ee 5e subi r30, 0xEE ; 238 404: fe 4f sbci r31, 0xFE ; 254 406: 86 85 ldd r24, Z+14 ; 0x0e 408: 88 23 and r24, r24 40a: 31 f0 breq .+12 ; 0x418 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x3e> break; 40c: af 5f subi r26, 0xFF ; 255 40e: 2f 5f subi r18, 0xFF ; 255 410: 3f 4f sbci r19, 0xFF ; 255 void AddTask(void (*function)(void*,void*), void* arg0, void* arg1,TASK_TYPE type,uint16_t interval,PRIORITY pri){ uint8_t index = 0; //Find the first free spot in the task-queue for(index=0; index if(!tasks[index].active) break; //Fill in all of the parameters of a task tasks[index].function = function; 418: ca 2f mov r28, r26 41a: d0 e0 ldi r29, 0x00 ; 0 41c: de 01 movw r26, r28 41e: 24 e0 ldi r18, 0x04 ; 4 420: aa 0f add r26, r26 422: bb 1f adc r27, r27 424: 2a 95 dec r18 426: e1 f7 brne .-8 ; 0x420 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x46> 428: ae 5e subi r26, 0xEE ; 238 42a: be 4f sbci r27, 0xFE ; 254 42c: 11 96 adiw r26, 0x01 ; 1 42e: dc 92 st X, r13 430: ce 92 st -X, r12 tasks[index].arg0 = arg0; 432: fe 01 movw r30, r28 434: 84 e0 ldi r24, 0x04 ; 4 436: ee 0f add r30, r30 438: ff 1f adc r31, r31 43a: 8a 95 dec r24 43c: e1 f7 brne .-8 ; 0x436 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x5c> 43e: ec 5e subi r30, 0xEC ; 236 440: fe 4f sbci r31, 0xFE ; 254 442: 71 83 std Z+1, r23 ; 0x01 444: 60 83 st Z, r22 tasks[index].arg1 = arg1; 446: fe 01 movw r30, r28 448: 64 e0 ldi r22, 0x04 ; 4 44a: ee 0f add r30, r30 44c: ff 1f adc r31, r31 44e: 6a 95 dec r22 450: e1 f7 brne .-8 ; 0x44a <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x70> 452: ea 5e subi r30, 0xEA ; 234 454: fe 4f sbci r31, 0xFE ; 254 456: 51 83 std Z+1, r21 ; 0x01 458: 40 83 st Z, r20 tasks[index].type = type; 45a: fd 01 movw r30, r26 45c: f6 82 std Z+6, r15 ; 0x06 if(pri==HIGH) 45e: 99 23 and r25, r25 460: 11 f4 brne .+4 ; 0x466 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x8c> tasks[index].pri_level = 0; 462: 17 86 std Z+15, r1 ; 0x0f 464: 07 c0 rjmp .+14 ; 0x474 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x9a> else if(pri==MEDIUM) 466: 92 33 cpi r25, 0x32 ; 50 468: 11 f4 brne .+4 ; 0x46e <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x94> tasks[index].pri_level = 1; 46a: 81 e0 ldi r24, 0x01 ; 1 46c: 01 c0 rjmp .+2 ; 0x470 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x96> else tasks[index].pri_level = 2; 46e: 82 e0 ldi r24, 0x02 ; 2 470: fd 01 movw r30, r26 472: 87 87 std Z+15, r24 ; 0x0f tasks[index].priority = pri + cur_priority[tasks[index].pri_level]++; 474: 34 e0 ldi r19, 0x04 ; 4 476: cc 0f add r28, r28 478: dd 1f adc r29, r29 47a: 3a 95 dec r19 47c: e1 f7 brne .-8 ; 0x476 <_ZN11TaskManager7AddTaskEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x9c> 47e: de 01 movw r26, r28 480: ae 5e subi r26, 0xEE ; 238 482: be 4f sbci r27, 0xFE ; 254 484: fd 01 movw r30, r26 486: 87 85 ldd r24, Z+15 ; 0x0f 488: 28 2f mov r18, r24 48a: 30 e0 ldi r19, 0x00 ; 0 48c: 2e 52 subi r18, 0x2E ; 46 48e: 3e 4f sbci r19, 0xFE ; 254 490: f9 01 movw r30, r18 492: 80 81 ld r24, Z 494: 98 0f add r25, r24 496: fd 01 movw r30, r26 498: 95 87 std Z+13, r25 ; 0x0d 49a: 8f 5f subi r24, 0xFF ; 255 49c: f9 01 movw r30, r18 49e: 80 83 st Z, r24 tasks[index].interval = interval; 4a0: fd 01 movw r30, r26 4a2: 10 87 std Z+8, r17 ; 0x08 4a4: 07 83 std Z+7, r16 ; 0x07 tasks[index].active = true; 4a6: 81 e0 ldi r24, 0x01 ; 1 4a8: 86 87 std Z+14, r24 ; 0x0e //Calculate when the task is to be run //tasks[index].next_run = getTicks() + (uint32_t)interval; cli(); 4aa: f8 94 cli tasks[index].next_run = Clock::ticks + (uint32_t)interval; 4ac: 20 91 da 01 lds r18, 0x01DA 4b0: 30 91 db 01 lds r19, 0x01DB 4b4: 40 91 dc 01 lds r20, 0x01DC 4b8: 50 91 dd 01 lds r21, 0x01DD 4bc: c8 01 movw r24, r16 4be: a0 e0 ldi r26, 0x00 ; 0 4c0: b0 e0 ldi r27, 0x00 ; 0 4c2: 82 0f add r24, r18 4c4: 93 1f adc r25, r19 4c6: a4 1f adc r26, r20 4c8: b5 1f adc r27, r21 4ca: ce 5e subi r28, 0xEE ; 238 4cc: de 4f sbci r29, 0xFE ; 254 4ce: 89 87 std Y+9, r24 ; 0x09 4d0: 9a 87 std Y+10, r25 ; 0x0a 4d2: ab 87 std Y+11, r26 ; 0x0b 4d4: bc 87 std Y+12, r27 ; 0x0c sei(); 4d6: 78 94 sei } 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: 08 95 ret 000004ea <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE>: void AddTaskInt(void (*function)(void*,void*), void* arg0, void* arg1,TASK_TYPE type,uint16_t interval,PRIORITY pri){ 4ea: cf 92 push r12 4ec: df 92 push r13 4ee: ef 92 push r14 4f0: ff 92 push r15 4f2: 0f 93 push r16 4f4: 1f 93 push r17 4f6: cf 93 push r28 4f8: df 93 push r29 4fa: ec 01 movw r28, r24 4fc: 6b 01 movw r12, r22 4fe: f2 2e mov r15, r18 500: 9e 2d mov r25, r14 502: 20 e0 ldi r18, 0x00 ; 0 504: 30 e0 ldi r19, 0x00 ; 0 506: e2 2e mov r14, r18 uint8_t index = 0; //Find the first free spot in the task-queue for(index=0; index 514: ee 5e subi r30, 0xEE ; 238 516: fe 4f sbci r31, 0xFE ; 254 518: 86 85 ldd r24, Z+14 ; 0x0e 51a: 88 23 and r24, r24 51c: 31 f0 breq .+12 ; 0x52a <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x40> break; 51e: e3 94 inc r14 520: 2f 5f subi r18, 0xFF ; 255 522: 3f 4f sbci r19, 0xFF ; 255 } void AddTaskInt(void (*function)(void*,void*), void* arg0, void* arg1,TASK_TYPE type,uint16_t interval,PRIORITY pri){ uint8_t index = 0; //Find the first free spot in the task-queue for(index=0; index if(!tasks[index].active) break; //Fill in all of the parameters of a task tasks[index].function = function; 52a: 6e 2d mov r22, r14 52c: 70 e0 ldi r23, 0x00 ; 0 52e: db 01 movw r26, r22 530: e4 e0 ldi r30, 0x04 ; 4 532: aa 0f add r26, r26 534: bb 1f adc r27, r27 536: ea 95 dec r30 538: e1 f7 brne .-8 ; 0x532 <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x48> 53a: ae 5e subi r26, 0xEE ; 238 53c: be 4f sbci r27, 0xFE ; 254 53e: 11 96 adiw r26, 0x01 ; 1 540: dc 93 st X, r29 542: ce 93 st -X, r28 tasks[index].arg0 = arg0; 544: fb 01 movw r30, r22 546: 34 e0 ldi r19, 0x04 ; 4 548: ee 0f add r30, r30 54a: ff 1f adc r31, r31 54c: 3a 95 dec r19 54e: e1 f7 brne .-8 ; 0x548 <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x5e> 550: ec 5e subi r30, 0xEC ; 236 552: fe 4f sbci r31, 0xFE ; 254 554: d1 82 std Z+1, r13 ; 0x01 556: c0 82 st Z, r12 tasks[index].arg1 = arg1; 558: fb 01 movw r30, r22 55a: 24 e0 ldi r18, 0x04 ; 4 55c: ee 0f add r30, r30 55e: ff 1f adc r31, r31 560: 2a 95 dec r18 562: e1 f7 brne .-8 ; 0x55c <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x72> 564: ea 5e subi r30, 0xEA ; 234 566: fe 4f sbci r31, 0xFE ; 254 568: 51 83 std Z+1, r21 ; 0x01 56a: 40 83 st Z, r20 tasks[index].type = type; 56c: ed 01 movw r28, r26 56e: fe 82 std Y+6, r15 ; 0x06 if(pri==HIGH) 570: 99 23 and r25, r25 572: 11 f4 brne .+4 ; 0x578 <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x8e> tasks[index].pri_level = 0; 574: 1f 86 std Y+15, r1 ; 0x0f 576: 09 c0 rjmp .+18 ; 0x58a <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0xa0> else if(pri==MEDIUM) 578: 92 33 cpi r25, 0x32 ; 50 57a: 21 f4 brne .+8 ; 0x584 <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0x9a> tasks[index].pri_level = 1; 57c: 81 e0 ldi r24, 0x01 ; 1 57e: fd 01 movw r30, r26 580: 87 87 std Z+15, r24 ; 0x0f 582: 03 c0 rjmp .+6 ; 0x58a <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0xa0> else tasks[index].pri_level = 2; 584: 82 e0 ldi r24, 0x02 ; 2 586: ed 01 movw r28, r26 588: 8f 87 std Y+15, r24 ; 0x0f tasks[index].priority = pri + cur_priority[tasks[index].pri_level]++; 58a: 84 e0 ldi r24, 0x04 ; 4 58c: 66 0f add r22, r22 58e: 77 1f adc r23, r23 590: 8a 95 dec r24 592: e1 f7 brne .-8 ; 0x58c <_ZN11TaskManager10AddTaskIntEPFvPvS0_ES0_S0_NS_9TASK_TYPEEjNS_8PRIORITYE+0xa2> 594: 6e 5e subi r22, 0xEE ; 238 596: 7e 4f sbci r23, 0xFE ; 254 598: eb 01 movw r28, r22 59a: ef 85 ldd r30, Y+15 ; 0x0f 59c: f0 e0 ldi r31, 0x00 ; 0 59e: ee 52 subi r30, 0x2E ; 46 5a0: fe 4f sbci r31, 0xFE ; 254 5a2: 80 81 ld r24, Z 5a4: 98 0f add r25, r24 5a6: 9d 87 std Y+13, r25 ; 0x0d 5a8: 8f 5f subi r24, 0xFF ; 255 5aa: 80 83 st Z, r24 tasks[index].interval = interval; 5ac: 18 87 std Y+8, r17 ; 0x08 5ae: 0f 83 std Y+7, r16 ; 0x07 tasks[index].active = true; 5b0: 81 e0 ldi r24, 0x01 ; 1 5b2: 8e 87 std Y+14, r24 ; 0x0e //Calculate when the task is to be run tasks[index].next_run = Clock::ticks + (uint32_t)interval; 5b4: 20 91 da 01 lds r18, 0x01DA 5b8: 30 91 db 01 lds r19, 0x01DB 5bc: 40 91 dc 01 lds r20, 0x01DC 5c0: 50 91 dd 01 lds r21, 0x01DD 5c4: c8 01 movw r24, r16 5c6: a0 e0 ldi r26, 0x00 ; 0 5c8: b0 e0 ldi r27, 0x00 ; 0 5ca: 82 0f add r24, r18 5cc: 93 1f adc r25, r19 5ce: a4 1f adc r26, r20 5d0: b5 1f adc r27, r21 5d2: fb 01 movw r30, r22 5d4: 81 87 std Z+9, r24 ; 0x09 5d6: 92 87 std Z+10, r25 ; 0x0a 5d8: a3 87 std Z+11, r26 ; 0x0b 5da: b4 87 std Z+12, r27 ; 0x0c } 5dc: df 91 pop r29 5de: cf 91 pop r28 5e0: 1f 91 pop r17 5e2: 0f 91 pop r16 5e4: ff 90 pop r15 5e6: ef 90 pop r14 5e8: df 90 pop r13 5ea: cf 90 pop r12 5ec: 08 95 ret 000005ee <_ZN11TaskManager15ExecuteNextTaskEv>: uint8_t ExecuteNextTask(void){ 5ee: cf 93 push r28 5f0: df 93 push r29 }; inline uint32_t getTicks(void){ uint32_t t; cli(); 5f2: f8 94 cli t = Clock::ticks; 5f4: 40 91 da 01 lds r20, 0x01DA 5f8: 50 91 db 01 lds r21, 0x01DB 5fc: 60 91 dc 01 lds r22, 0x01DC 600: 70 91 dd 01 lds r23, 0x01DD sei(); 604: 78 94 sei int8_t index = -1; uint8_t i; uint8_t leastpri = 0xff; uint32_t curt = getTicks(); cur_tasks = 0; 606: 10 92 d5 01 sts 0x01D5, r1 counter++; 60a: 80 91 d8 01 lds r24, 0x01D8 60e: 8f 5f subi r24, 0xFF ; 255 610: 80 93 d8 01 sts 0x01D8, r24 if(counter==200){ 614: 80 91 d8 01 lds r24, 0x01D8 618: 88 3c cpi r24, 0xC8 ; 200 61a: 49 f4 brne .+18 ; 0x62e <_ZN11TaskManager15ExecuteNextTaskEv+0x40> cpu_usage = cur_done / 2; 61c: 80 91 d7 01 lds r24, 0x01D7 620: 86 95 lsr r24 622: 80 93 d6 01 sts 0x01D6, r24 cur_done = 0; 626: 10 92 d7 01 sts 0x01D7, r1 counter = 0; 62a: 10 92 d8 01 sts 0x01D8, r1 62e: ef ef ldi r30, 0xFF ; 255 630: ff ef ldi r31, 0xFF ; 255 632: 20 e0 ldi r18, 0x00 ; 0 634: 30 e0 ldi r19, 0x00 ; 0 } //Find the next task needed to be run. Pick out the one with the least priority(those added first gets executed first) for(i=0; i 642: ce 5e subi r28, 0xEE ; 238 644: de 4f sbci r29, 0xFE ; 254 646: 8e 85 ldd r24, Y+14 ; 0x0e 648: 88 23 and r24, r24 64a: 99 f0 breq .+38 ; 0x672 <_ZN11TaskManager15ExecuteNextTaskEv+0x84> cur_tasks++; 64c: 80 91 d5 01 lds r24, 0x01D5 650: 8f 5f subi r24, 0xFF ; 255 652: 80 93 d5 01 sts 0x01D5, r24 if(tasks[i].next_run<=curt){ 656: 89 85 ldd r24, Y+9 ; 0x09 658: 9a 85 ldd r25, Y+10 ; 0x0a 65a: ab 85 ldd r26, Y+11 ; 0x0b 65c: bc 85 ldd r27, Y+12 ; 0x0c 65e: 48 17 cp r20, r24 660: 59 07 cpc r21, r25 662: 6a 07 cpc r22, r26 664: 7b 07 cpc r23, r27 666: 28 f0 brcs .+10 ; 0x672 <_ZN11TaskManager15ExecuteNextTaskEv+0x84> if(tasks[i].priority leastpri = tasks[i].priority; 66e: fd 85 ldd r31, Y+13 ; 0x0d 670: e2 2f mov r30, r18 672: 2f 5f subi r18, 0xFF ; 255 674: 3f 4f sbci r19, 0xFF ; 255 cpu_usage = cur_done / 2; cur_done = 0; counter = 0; } //Find the next task needed to be run. Pick out the one with the least priority(those added first gets executed first) for(i=0; i } } } } //If there are any tasks that need to be done if(index!=-1){ 67c: ef 3f cpi r30, 0xFF ; 255 67e: c9 f1 breq .+114 ; 0x6f2 <_ZN11TaskManager15ExecuteNextTaskEv+0x104> cur_done++; 680: 80 91 d7 01 lds r24, 0x01D7 684: 8f 5f subi r24, 0xFF ; 255 686: 80 93 d7 01 sts 0x01D7, r24 //Execute it tasks[index].function(tasks[index].arg0,tasks[index].arg1); 68a: ff 27 eor r31, r31 68c: e7 fd sbrc r30, 7 68e: f0 95 com r31 690: 94 e0 ldi r25, 0x04 ; 4 692: ee 0f add r30, r30 694: ff 1f adc r31, r31 696: 9a 95 dec r25 698: e1 f7 brne .-8 ; 0x692 <_ZN11TaskManager15ExecuteNextTaskEv+0xa4> 69a: ef 01 movw r28, r30 69c: ce 5e subi r28, 0xEE ; 238 69e: de 4f sbci r29, 0xFE ; 254 6a0: 28 81 ld r18, Y 6a2: 39 81 ldd r19, Y+1 ; 0x01 6a4: df 01 movw r26, r30 6a6: ac 5e subi r26, 0xEC ; 236 6a8: be 4f sbci r27, 0xFE ; 254 6aa: 8d 91 ld r24, X+ 6ac: 9c 91 ld r25, X 6ae: ea 5e subi r30, 0xEA ; 234 6b0: fe 4f sbci r31, 0xFE ; 254 6b2: 60 81 ld r22, Z 6b4: 71 81 ldd r23, Z+1 ; 0x01 6b6: f9 01 movw r30, r18 6b8: 09 95 icall if(tasks[index].type==SINGLE_RUN){//Delete it from the task-queue 6ba: 8e 81 ldd r24, Y+6 ; 0x06 6bc: 88 23 and r24, r24 6be: 49 f4 brne .+18 ; 0x6d2 <_ZN11TaskManager15ExecuteNextTaskEv+0xe4> tasks[index].active = false; 6c0: 1e 86 std Y+14, r1 ; 0x0e //Decrement the current top priority cur_priority[tasks[index].pri_level]--; 6c2: ef 85 ldd r30, Y+15 ; 0x0f 6c4: f0 e0 ldi r31, 0x00 ; 0 6c6: ee 52 subi r30, 0x2E ; 46 6c8: fe 4f sbci r31, 0xFE ; 254 6ca: 80 81 ld r24, Z 6cc: 81 50 subi r24, 0x01 ; 1 6ce: 80 83 st Z, r24 6d0: 10 c0 rjmp .+32 ; 0x6f2 <_ZN11TaskManager15ExecuteNextTaskEv+0x104> } else//Find the next time to run the task tasks[index].next_run += tasks[index].interval; 6d2: 29 85 ldd r18, Y+9 ; 0x09 6d4: 3a 85 ldd r19, Y+10 ; 0x0a 6d6: 4b 85 ldd r20, Y+11 ; 0x0b 6d8: 5c 85 ldd r21, Y+12 ; 0x0c 6da: 8f 81 ldd r24, Y+7 ; 0x07 6dc: 98 85 ldd r25, Y+8 ; 0x08 6de: a0 e0 ldi r26, 0x00 ; 0 6e0: b0 e0 ldi r27, 0x00 ; 0 6e2: 82 0f add r24, r18 6e4: 93 1f adc r25, r19 6e6: a4 1f adc r26, r20 6e8: b5 1f adc r27, r21 6ea: 89 87 std Y+9, r24 ; 0x09 6ec: 9a 87 std Y+10, r25 ; 0x0a 6ee: ab 87 std Y+11, r26 ; 0x0b 6f0: bc 87 std Y+12, r27 ; 0x0c } return 1; } 6f2: 81 e0 ldi r24, 0x01 ; 1 6f4: df 91 pop r29 6f6: cf 91 pop r28 6f8: 08 95 ret 000006fa <_ZN11TaskManager10DeleteTaskEPFvPvS0_E>: /* Delete a task */ void DeleteTask(void (*function)(void*,void*)){ 6fa: ac 01 movw r20, r24 6fc: 20 e0 ldi r18, 0x00 ; 0 6fe: 30 e0 ldi r19, 0x00 ; 0 uint8_t i; for(i = 0; i < MAX_TASKS; i++){ if(tasks[i].function==function){ 700: f9 01 movw r30, r18 702: b4 e0 ldi r27, 0x04 ; 4 704: ee 0f add r30, r30 706: ff 1f adc r31, r31 708: ba 95 dec r27 70a: e1 f7 brne .-8 ; 0x704 <_ZN11TaskManager10DeleteTaskEPFvPvS0_E+0xa> 70c: ee 5e subi r30, 0xEE ; 238 70e: fe 4f sbci r31, 0xFE ; 254 710: 80 81 ld r24, Z 712: 91 81 ldd r25, Z+1 ; 0x01 714: 84 17 cp r24, r20 716: 95 07 cpc r25, r21 718: 49 f4 brne .+18 ; 0x72c <_ZN11TaskManager10DeleteTaskEPFvPvS0_E+0x32> tasks[i].active = false; 71a: 16 86 std Z+14, r1 ; 0x0e //Decrement the current top priority cur_priority[tasks[i].pri_level]--; 71c: e7 85 ldd r30, Z+15 ; 0x0f 71e: f0 e0 ldi r31, 0x00 ; 0 720: ee 52 subi r30, 0x2E ; 46 722: fe 4f sbci r31, 0xFE ; 254 724: 80 81 ld r24, Z 726: 81 50 subi r24, 0x01 ; 1 728: 80 83 st Z, r24 72a: 08 95 ret return; 72c: 2f 5f subi r18, 0xFF ; 255 72e: 3f 4f sbci r19, 0xFF ; 255 return 1; } /* Delete a task */ void DeleteTask(void (*function)(void*,void*)){ uint8_t i; for(i = 0; i < MAX_TASKS; i++){ 730: 2c 30 cpi r18, 0x0C ; 12 732: 31 05 cpc r19, r1 734: 29 f7 brne .-54 ; 0x700 <_ZN11TaskManager10DeleteTaskEPFvPvS0_E+0x6> 736: 08 95 ret 00000738 <_ZN11TaskManager4InitEv>: return; } } } /* Initialize the TaskManager */ void Init(void){ 738: 80 e0 ldi r24, 0x00 ; 0 73a: 90 e0 ldi r25, 0x00 ; 0 uint8_t i; for(i = 0; i < MAX_TASKS; i++) tasks[i].active = false; 73c: fc 01 movw r30, r24 73e: 24 e0 ldi r18, 0x04 ; 4 740: ee 0f add r30, r30 742: ff 1f adc r31, r31 744: 2a 95 dec r18 746: e1 f7 brne .-8 ; 0x740 <_ZN11TaskManager4InitEv+0x8> 748: ee 5e subi r30, 0xEE ; 238 74a: fe 4f sbci r31, 0xFE ; 254 74c: 16 86 std Z+14, r1 ; 0x0e 74e: 01 96 adiw r24, 0x01 ; 1 } } /* Initialize the TaskManager */ void Init(void){ uint8_t i; for(i = 0; i < MAX_TASKS; i++) 750: 8c 30 cpi r24, 0x0C ; 12 752: 91 05 cpc r25, r1 754: 99 f7 brne .-26 ; 0x73c <_ZN11TaskManager4InitEv+0x4> tasks[i].active = false; } 756: 08 95 ret 00000758 <_ZN5Clock4InitEv>: namespace Clock{ /* Number of ticks since the device restarted */ volatile uint32_t ticks = 0; /* Initialise our main-clock */ void Init(void){ 758: 8b e0 ldi r24, 0x0B ; 11 75a: 85 bd out 0x25, r24 ; 37 //Clear on compare match, top=OCR1, prescaler at 1/64 TCCR2 = (1<: /* The main clocks interrupt. Basicly, just increment the number of ticks one tick= 1ms */ ISR(TIMER2_COMP_vect){ 766: 1f 92 push r1 768: 0f 92 push r0 76a: 0f b6 in r0, 0x3f ; 63 76c: 0f 92 push r0 76e: 11 24 eor r1, r1 770: 8f 93 push r24 772: 9f 93 push r25 774: af 93 push r26 776: bf 93 push r27 Clock::ticks++; 778: 80 91 da 01 lds r24, 0x01DA 77c: 90 91 db 01 lds r25, 0x01DB 780: a0 91 dc 01 lds r26, 0x01DC 784: b0 91 dd 01 lds r27, 0x01DD 788: 01 96 adiw r24, 0x01 ; 1 78a: a1 1d adc r26, r1 78c: b1 1d adc r27, r1 78e: 80 93 da 01 sts 0x01DA, r24 792: 90 93 db 01 sts 0x01DB, r25 796: a0 93 dc 01 sts 0x01DC, r26 79a: b0 93 dd 01 sts 0x01DD, r27 temp_c++; 79e: 80 91 d9 01 lds r24, 0x01D9 7a2: 8f 5f subi r24, 0xFF ; 255 7a4: 80 93 d9 01 sts 0x01D9, r24 if(temp_c==10){ 7a8: 8a 30 cpi r24, 0x0A ; 10 7aa: 59 f4 brne .+22 ; 0x7c2 <__vector_9+0x5c> temp_c = 0; 7ac: 10 92 d9 01 sts 0x01D9, r1 clock_c++; 7b0: 80 91 de 01 lds r24, 0x01DE 7b4: 90 91 df 01 lds r25, 0x01DF 7b8: 01 96 adiw r24, 0x01 ; 1 7ba: 90 93 df 01 sts 0x01DF, r25 7be: 80 93 de 01 sts 0x01DE, r24 } } 7c2: bf 91 pop r27 7c4: af 91 pop r26 7c6: 9f 91 pop r25 7c8: 8f 91 pop r24 7ca: 0f 90 pop r0 7cc: 0f be out 0x3f, r0 ; 63 7ce: 0f 90 pop r0 7d0: 1f 90 pop r1 7d2: 18 95 reti 000007d4 <_exit>: 7d4: f8 94 cli 000007d6 <__stop_program>: 7d6: ff cf rjmp .-2 ; 0x7d6 <__stop_program>