|
Оптимизация кода. |
|
|
|
 |
Ответов
|
Jan 4 2016, 07:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Может, в конкретном случае это даст что-то топикстартеру (а именно он интересовался потерями быстродействия на вызов функций): я вам отвечу: ничего она не даст. если вы посмотрите на листинг, то увидите, что ничего из сторонних адресов(и др. ресурсов) не используется. вот с преамбулой для авр Код prog: file format elf32-avr
Sections: Idx Name Size VMA LMA File off Algn 0 .data 00000000 00800100 000000a8 0000011c 2**0 CONTENTS, ALLOC, LOAD, DATA 1 .text 000000a8 00000000 00000000 00000074 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .stab 00000078 00000000 00000000 0000011c 2**2 CONTENTS, READONLY, DEBUGGING 3 .stabstr 00000058 00000000 00000000 00000194 2**0 CONTENTS, READONLY, DEBUGGING 4 .comment 00000011 00000000 00000000 000001ec 2**0 CONTENTS, READONLY 5 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000200 2**2 CONTENTS, READONLY 6 .debug_info 000006cc 00000000 00000000 00000240 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_abbrev 0000066e 00000000 00000000 0000090c 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_line 0000001d 00000000 00000000 00000f7a 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_str 00000255 00000000 00000000 00000f97 2**0 CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>: 0: 0c 94 3e 00 jmp 0x7c ; 0x7c <__ctors_end> 4: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 8: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 10: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 14: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 18: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 1c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 20: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 24: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 28: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 2c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 30: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 34: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 38: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 3c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 40: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 44: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 48: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 4c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 50: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 54: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 58: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 5c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 60: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 64: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 68: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 6c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 70: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 74: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> 78: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt>
0000007c <__ctors_end>: 7c: 11 24 eor r1, r1 7e: 1f be out 0x3f, r1 ; 63 80: cf ef ldi r28, 0xFF ; 255 82: d0 e1 ldi r29, 0x10 ; 16 84: de bf out 0x3e, r29 ; 62 86: cd bf out 0x3d, r28 ; 61 88: 0e 94 4e 00 call 0x9c ; 0x9c <main> 8c: 0c 94 4f 00 jmp 0x9e ; 0x9e <exit>
00000090 <__bad_interrupt>: 90: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000094 <Reset>: 94: 08 95 ret
00000096 <Failure>: 96: 08 95 ret
00000098 <Run>: 98: 08 95 ret
0000009a <Init>: 9a: 08 95 ret
0000009c <main>: 9c: ff cf rjmp .-2 ; 0x9c <main>
0000009e <exit>: 9e: f8 94 cli a0: 0c 94 52 00 jmp 0xa4 ; 0xa4 <_exit>
000000a4 <_exit>: a4: f8 94 cli
000000a6 <__stop_program>: a6: ff cf rjmp .-2 ; 0xa6 <__stop_program>
|
|
|
|
|
Jan 4 2016, 09:28
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(smalcom @ Jan 4 2016, 10:27)  я вам отвечу: ничего она не даст. Это потому что функции пустые, в них не изменяются регистры. Допустим, регистры все-таки изменяются, тогда они при вызове будут сохраняться, а при возврате - восстанавливаться, и время, потраченное на это, может быть намного больше чем собственно сохранение-восстановления PC. Это может быть определяющим для выбора цикл с функциями/цикл без функций Вот начало какой-то функции текущего проекта на MSP430, перед выполнением значащих действий 6 подготовительных команд: Код void ConvertStatSeconds(unsigned long sec) { unsigned long my_hour; ConvertStatSeconds: 00D60C 120A push.w R10 00D60E 120B push.w R11 00D610 1208 push.w R8 00D612 1209 push.w R9 00D614 4C08 mov.w R12,R8 00D616 4D09 mov.w R13,R9 my_hour=sec/3600; 00D618 403E 0E10 mov.w #0xE10,R14 ...... А вот функция инициализации портов, в которой регистры не искажаются. "Две большие разницы" Код ClockConfiguration: 00E614 40F2 0056 0056 mov.b #0x56,&DCOCTL BCSCTL1=0x7; // CPU faster RSEL=7 00E61A 40F2 0007 0057 mov.b #0x7,&BCSCTL1 BCSCTL2=SELS; //select SMCLK=XT2CLK 00E620 42F2 0058 mov.b #0x8,&BCSCTL2 WDTCTL = WDTPW + WDTHOLD; // Stop WDT 00E624 40B2 5A80 0120 mov.w #0x5A80,&WDTCTL OnLed(); 00E62A D0F2 0080 001D bis.b #0x80,&P4OUT } Так о каких функциях в главном цикле говорит топикстартер? Да он сам не знает - 4 такта и все. Ни реальных требований не прозвучало, ни реальных потерь.
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
Jenya7 Оптимизация кода. Dec 31 2015, 07:50 Ruslan1 Цитата(Jenya7 @ Dec 31 2015, 09:50) У мен... Dec 31 2015, 09:19 Jenya7 Цитата(Ruslan1 @ Dec 31 2015, 14:19) Это ... Dec 31 2015, 09:28 HardEgor Цитата(Jenya7 @ Dec 31 2015, 13:50) У мен... Dec 31 2015, 10:39 Jenya7 Цитата(HardEgor @ Dec 31 2015, 15:39) 4 т... Dec 31 2015, 11:38  Dog Pawlowa Цитата(Jenya7 @ Dec 31 2015, 14:38) а где... Dec 31 2015, 12:15   toweroff Цитата(Dog Pawlowa @ Dec 31 2015, 15:15) ... Dec 31 2015, 12:23  HardEgor Цитата(Jenya7 @ Dec 31 2015, 17:38) в том... Dec 31 2015, 12:33   Dog Pawlowa Цитата(HardEgor @ Dec 31 2015, 15:33) Т.е... Dec 31 2015, 19:37 SlavaV Цитата(Jenya7 @ Dec 31 2015, 15:50) У мен... Jan 1 2016, 03:11 smalcom Цитата(Jenya7 @ Dec 31 2015, 09:50) У мен... Jan 2 2016, 22:08 Dog Pawlowa Цитата(smalcom @ Jan 3 2016, 01:08) главн... Jan 3 2016, 02:53 smalcom ЦитатаНе уверен, что это корректный пример, с одно... Jan 3 2016, 13:30 Dog Pawlowa Цитата(smalcom @ Jan 3 2016, 16:30) Тем н... Jan 3 2016, 15:04 smalcom ЦитатаДизассемблер в этом виде мало что дает, т.к.... Jan 3 2016, 19:36 Dog Pawlowa Цитата(smalcom @ Jan 3 2016, 22:36) что в... Jan 3 2016, 20:24 smalcom ЦитатаЭто потому что функции пустые, в них не изме... Jan 4 2016, 10:36 Dog Pawlowa Цитата(smalcom @ Jan 4 2016, 13:36) куски... Jan 4 2016, 11:01 Jenya7 вобщем инлайнить функции и будет всем счастье. с... Jan 5 2016, 09:39 smalcom говоришь, показываешь - бестолку да-да, с НГ ))
-... Jan 5 2016, 09:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|