Ответ: Кому интересно, можно посмотреть как сделано для AVR. Но у меня вопрос: насколько оптимаоьно генерируе код Keil. Интересно взглянуть как это делает IAR, и для PIC тоже.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 04 июля 2003 г. 13:52
В ответ на: To All. Ув. программисты Си. ТРадиционная просьба. отправлено Bill 04 июля 2003 г. 10:39


5 char *strtrm(char *ptr)
6 {
7 char *_pt = ptr;
\ __nearfunc char *strtrm(char *);
\ strtrm:
\ 00000000 2FE0 MOV R30,R16
8 char _ch;
9
10 while (*_pt++); // Find the string end
\ ??strtrm_0:
\ 00000002 9111 LD R17,Z+
\ 00000004 2311 TST R17
\ 00000006 F7E9 BRNE ??strtrm_0
11 --_pt; // Adjust pointer
\ 00000008 95EA DEC R30
\ 0000000A 2F20 MOV R18,R16
12 while (_pt > ptr) // Go to the sring start
\ ??strtrm_1:
\ 0000000C 172E CP R18,R30
\ 0000000E F428 BRCC ??strtrm_2
13 {
14 _ch = *--_pt; // Get byte
\ 00000010 9112 LD R17,-Z
15 if (_ch!=' ' && _ch!='\t') // It's not a space or tab
\ 00000012 3210 CPI R17,32
\ 00000014 F3D9 BREQ ??strtrm_1
\ 00000016 3019 CPI R17,9
\ 00000018 F3C9 BREQ ??strtrm_1
16 break; // then all done
17 }
18 *(_pt+1) = 0; // Terminate the string
\ ??strtrm_2:
\ 0000001A E010 LDI R17,0
\ 0000001C 8311 STD Z+1,R17
19 return ptr;
\ 0000001E 9508 RET
20 }

Maximum stack usage in bytes:

Function CSTACK RSTACK
-------- ------ ------
strtrm 0 0


32 bytes in segment CODE

32 bytes of CODE memory


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru