В общем, решил посмотреть куда делись 31кб. из 32 кб. памяти в часах. Сделал листинг прошивки, просматриваю функции, останавливаюсь на memcpy, че-то как-то много всяких проверок для этой функции, какая тогда memmove?
Начинаю смотреть memmove и понимаю, что она бит в бит совпадает с memcpy, каждая по пол-кило
Причем, memmove вызывается только из 2-х функций в недрах simpliciti\Components\nwk\nwk.c
Удивительно, что народ пишет конфигураторы, чтоб выжать еще 200 байт и не видят такого ляпа.
Вот она парадигма инкапсуляции
Потом нахожу статью "Про memcpy, memmove и Open Source"
http://shura.luberetsky.ru/2011/03/31/pro-memcpy-memmove-i-open-source/Ссылающаяся на "о началах программирования" !!!
http://avva.livejournal.com/2323823.htmlНе знаю, баян или нет, но поучительно...
Позже заменю все memcpy на memmove, но боюсь чуда не произойдет, прошивка уменьшится на пол-кило, часы будут работать.
на память:
Код:
0000ecfa <memcpy>:
ecfa: 0b 12 push r11
ecfc: 0a 12 push r10
ecfe: 09 12 push r9
ed00: 04 12 push r4
ed02: 21 82 sub #4, r1 ;r2 As==10
ed04: 04 41 mov r1, r4
ed06: 84 4f 00 00 mov r15, 0(r4) ;0x0000(r4)
ed0a: 84 4e 02 00 mov r14, 2(r4) ;0x0002(r4)
ed0e: 0f 4d mov r13, r15
ed10: 2a 44 mov @r4, r10
ed12: 19 44 02 00 mov 2(r4), r9 ;0x0002(r4)
ed16: 0f 93 tst r15
ed18: 6e 24 jz $+222 ;abs 0xedf6
ed1a: 0a 99 cmp r9, r10
ed1c: 6c 24 jz $+218 ;abs 0xedf6
ed1e: 0d 4a mov r10, r13
ed20: 0e 49 mov r9, r14
ed22: 0d 9e cmp r14, r13
ed24: 35 2c jc $+108 ;abs 0xed90
ed26: 0b 49 mov r9, r11
ed28: 0e 4a mov r10, r14
ed2a: 0e db bis r11, r14
ed2c: 1e f3 and #1, r14 ;r3 As==01
ed2e: 4e 93 tst.b r14
ed30: 16 24 jz $+46 ;abs 0xed5e
ed32: 0e 4a mov r10, r14
ed34: 0e eb xor r11, r14
ed36: 1e f3 and #1, r14 ;r3 As==01
ed38: 4e 93 tst.b r14
ed3a: 02 20 jnz $+6 ;abs 0xed40
ed3c: 2f 93 cmp #2, r15 ;r3 As==10
ed3e: 02 2c jc $+6 ;abs 0xed44
ed40: 0b 4f mov r15, r11
ed42: 05 3c jmp $+12 ;abs 0xed4e
ed44: 0e 4b mov r11, r14
ed46: 1e f3 and #1, r14 ;r3 As==01
ed48: 2d 43 mov #2, r13 ;r3 As==10
ed4a: 0b 4d mov r13, r11
ed4c: 0b 8e sub r14, r11
ed4e: 0f 8b sub r11, r15
ed50: 6e 49 mov.b @r9, r14
ed52: ca 4e 00 00 mov.b r14, 0(r10) ;0x0000(r10)
ed56: 1a 53 inc r10
ed58: 19 53 inc r9
ed5a: 3b 53 add #-1, r11 ;r3 As==11
ed5c: f9 23 jnz $-12 ;abs 0xed50
ed5e: 0b 4f mov r15, r11
ed60: 12 c3 clrc
ed62: 0b 10 rrc r11
ed64: 0b 93 tst r11
ed66: 09 24 jz $+20 ;abs 0xed7a
ed68: 0e 4a mov r10, r14
ed6a: 0d 49 mov r9, r13
ed6c: 2d 4d mov @r13, r13
ed6e: 8e 4d 00 00 mov r13, 0(r14) ;0x0000(r14)
ed72: 29 53 incd r9
ed74: 2a 53 incd r10
ed76: 3b 53 add #-1, r11 ;r3 As==11
ed78: f7 23 jnz $-16 ;abs 0xed68
ed7a: 0b 4f mov r15, r11
ed7c: 1b f3 and #1, r11 ;r3 As==01
ed7e: 3b 24 jz $+120 ;abs 0xedf6
ed80: 6f 49 mov.b @r9, r15
ed82: ca 4f 00 00 mov.b r15, 0(r10) ;0x0000(r10)
ed86: 1a 53 inc r10
ed88: 19 53 inc r9
ed8a: 3b 53 add #-1, r11 ;r3 As==11
ed8c: f9 23 jnz $-12 ;abs 0xed80
ed8e: 33 3c jmp $+104 ;abs 0xedf6
ed90: 09 5f add r15, r9
ed92: 0a 5f add r15, r10
ed94: 0b 49 mov r9, r11
ed96: 0e 4a mov r10, r14
ed98: 0e db bis r11, r14
ed9a: 1e f3 and #1, r14 ;r3 As==01
ed9c: 4e 93 tst.b r14
ed9e: 13 24 jz $+40 ;abs 0xedc6
eda0: 0e 4a mov r10, r14
eda2: 0e eb xor r11, r14
eda4: 1e f3 and #1, r14 ;r3 As==01
eda6: 4e 93 tst.b r14
eda8: 03 20 jnz $+8 ;abs 0xedb0
edaa: 3f 90 03 00 cmp #3, r15 ;#0x0003
edae: 02 2c jc $+6 ;abs 0xedb4
edb0: 0b 4f mov r15, r11
edb2: 01 3c jmp $+4 ;abs 0xedb6
edb4: 1b f3 and #1, r11 ;r3 As==01
edb6: 0f 8b sub r11, r15
edb8: 3a 53 add #-1, r10 ;r3 As==11
edba: 39 53 add #-1, r9 ;r3 As==11
edbc: 6e 49 mov.b @r9, r14
edbe: ca 4e 00 00 mov.b r14, 0(r10) ;0x0000(r10)
edc2: 3b 53 add #-1, r11 ;r3 As==11
edc4: f9 23 jnz $-12 ;abs 0xedb8
edc6: 0b 4f mov r15, r11
edc8: 12 c3 clrc
edca: 0b 10 rrc r11
edcc: 0b 93 tst r11
edce: 09 24 jz $+20 ;abs 0xede2
edd0: 29 83 decd r9
edd2: 2a 83 decd r10
edd4: 0e 4a mov r10, r14
edd6: 0d 49 mov r9, r13
edd8: 2d 4d mov @r13, r13
edda: 8e 4d 00 00 mov r13, 0(r14) ;0x0000(r14)
edde: 3b 53 add #-1, r11 ;r3 As==11
ede0: f7 23 jnz $-16 ;abs 0xedd0
ede2: 0b 4f mov r15, r11
ede4: 1b f3 and #1, r11 ;r3 As==01
ede6: 07 24 jz $+16 ;abs 0xedf6
ede8: 3a 53 add #-1, r10 ;r3 As==11
edea: 39 53 add #-1, r9 ;r3 As==11
edec: 6f 49 mov.b @r9, r15
edee: ca 4f 00 00 mov.b r15, 0(r10) ;0x0000(r10)
edf2: 3b 53 add #-1, r11 ;r3 As==11
edf4: f9 23 jnz $-12 ;abs 0xede8
edf6: 2f 44 mov @r4, r15
edf8: 21 52 add #4, r1 ;r2 As==10
edfa: 34 41 pop r4
edfc: 39 41 pop r9
edfe: 3a 41 pop r10
ee00: 3b 41 pop r11
ee02: 30 41 ret
Код:
0000ee04 <memmove>:
ee04: 0b 12 push r11
ee06: 0a 12 push r10
ee08: 09 12 push r9
ee0a: 04 12 push r4
ee0c: 21 82 sub #4, r1 ;r2 As==10
ee0e: 04 41 mov r1, r4
ee10: 84 4f 00 00 mov r15, 0(r4) ;0x0000(r4)
ee14: 84 4e 02 00 mov r14, 2(r4) ;0x0002(r4)
ee18: 0f 4d mov r13, r15
ee1a: 2a 44 mov @r4, r10
ee1c: 19 44 02 00 mov 2(r4), r9 ;0x0002(r4)
ee20: 0f 93 tst r15
ee22: 6e 24 jz $+222 ;abs 0xef00
ee24: 0a 99 cmp r9, r10
ee26: 6c 24 jz $+218 ;abs 0xef00
ee28: 0d 4a mov r10, r13
ee2a: 0e 49 mov r9, r14
ee2c: 0d 9e cmp r14, r13
ee2e: 35 2c jc $+108 ;abs 0xee9a
ee30: 0b 49 mov r9, r11
ee32: 0e 4a mov r10, r14
ee34: 0e db bis r11, r14
ee36: 1e f3 and #1, r14 ;r3 As==01
ee38: 4e 93 tst.b r14
ee3a: 16 24 jz $+46 ;abs 0xee68
ee3c: 0e 4a mov r10, r14
ee3e: 0e eb xor r11, r14
ee40: 1e f3 and #1, r14 ;r3 As==01
ee42: 4e 93 tst.b r14
ee44: 02 20 jnz $+6 ;abs 0xee4a
ee46: 2f 93 cmp #2, r15 ;r3 As==10
ee48: 02 2c jc $+6 ;abs 0xee4e
ee4a: 0b 4f mov r15, r11
ee4c: 05 3c jmp $+12 ;abs 0xee58
ee4e: 0e 4b mov r11, r14
ee50: 1e f3 and #1, r14 ;r3 As==01
ee52: 2d 43 mov #2, r13 ;r3 As==10
ee54: 0b 4d mov r13, r11
ee56: 0b 8e sub r14, r11
ee58: 0f 8b sub r11, r15
ee5a: 6e 49 mov.b @r9, r14
ee5c: ca 4e 00 00 mov.b r14, 0(r10) ;0x0000(r10)
ee60: 1a 53 inc r10
ee62: 19 53 inc r9
ee64: 3b 53 add #-1, r11 ;r3 As==11
ee66: f9 23 jnz $-12 ;abs 0xee5a
ee68: 0b 4f mov r15, r11
ee6a: 12 c3 clrc
ee6c: 0b 10 rrc r11
ee6e: 0b 93 tst r11
ee70: 09 24 jz $+20 ;abs 0xee84
ee72: 0e 4a mov r10, r14
ee74: 0d 49 mov r9, r13
ee76: 2d 4d mov @r13, r13
ee78: 8e 4d 00 00 mov r13, 0(r14) ;0x0000(r14)
ee7c: 29 53 incd r9
ee7e: 2a 53 incd r10
ee80: 3b 53 add #-1, r11 ;r3 As==11
ee82: f7 23 jnz $-16 ;abs 0xee72
ee84: 0b 4f mov r15, r11
ee86: 1b f3 and #1, r11 ;r3 As==01
ee88: 3b 24 jz $+120 ;abs 0xef00
ee8a: 6f 49 mov.b @r9, r15
ee8c: ca 4f 00 00 mov.b r15, 0(r10) ;0x0000(r10)
ee90: 1a 53 inc r10
ee92: 19 53 inc r9
ee94: 3b 53 add #-1, r11 ;r3 As==11
ee96: f9 23 jnz $-12 ;abs 0xee8a
ee98: 33 3c jmp $+104 ;abs 0xef00
ee9a: 09 5f add r15, r9
ee9c: 0a 5f add r15, r10
ee9e: 0b 49 mov r9, r11
eea0: 0e 4a mov r10, r14
eea2: 0e db bis r11, r14
eea4: 1e f3 and #1, r14 ;r3 As==01
eea6: 4e 93 tst.b r14
eea8: 13 24 jz $+40 ;abs 0xeed0
eeaa: 0e 4a mov r10, r14
eeac: 0e eb xor r11, r14
eeae: 1e f3 and #1, r14 ;r3 As==01
eeb0: 4e 93 tst.b r14
eeb2: 03 20 jnz $+8 ;abs 0xeeba
eeb4: 3f 90 03 00 cmp #3, r15 ;#0x0003
eeb8: 02 2c jc $+6 ;abs 0xeebe
eeba: 0b 4f mov r15, r11
eebc: 01 3c jmp $+4 ;abs 0xeec0
eebe: 1b f3 and #1, r11 ;r3 As==01
eec0: 0f 8b sub r11, r15
eec2: 3a 53 add #-1, r10 ;r3 As==11
eec4: 39 53 add #-1, r9 ;r3 As==11
eec6: 6e 49 mov.b @r9, r14
eec8: ca 4e 00 00 mov.b r14, 0(r10) ;0x0000(r10)
eecc: 3b 53 add #-1, r11 ;r3 As==11
eece: f9 23 jnz $-12 ;abs 0xeec2
eed0: 0b 4f mov r15, r11
eed2: 12 c3 clrc
eed4: 0b 10 rrc r11
eed6: 0b 93 tst r11
eed8: 09 24 jz $+20 ;abs 0xeeec
eeda: 29 83 decd r9
eedc: 2a 83 decd r10
eede: 0e 4a mov r10, r14
eee0: 0d 49 mov r9, r13
eee2: 2d 4d mov @r13, r13
eee4: 8e 4d 00 00 mov r13, 0(r14) ;0x0000(r14)
eee8: 3b 53 add #-1, r11 ;r3 As==11
eeea: f7 23 jnz $-16 ;abs 0xeeda
eeec: 0b 4f mov r15, r11
eeee: 1b f3 and #1, r11 ;r3 As==01
eef0: 07 24 jz $+16 ;abs 0xef00
eef2: 3a 53 add #-1, r10 ;r3 As==11
eef4: 39 53 add #-1, r9 ;r3 As==11
eef6: 6f 49 mov.b @r9, r15
eef8: ca 4f 00 00 mov.b r15, 0(r10) ;0x0000(r10)
eefc: 3b 53 add #-1, r11 ;r3 As==11
eefe: f9 23 jnz $-12 ;abs 0xeef2
ef00: 2f 44 mov @r4, r15
ef02: 21 52 add #4, r1 ;r2 As==10
ef04: 34 41 pop r4
ef06: 39 41 pop r9
ef08: 3a 41 pop r10
ef0a: 3b 41 pop r11
ef0c: 30 41 ret