[an error occurred while processing this directive] [an error occurred while processing this directive]
Хм, CVAVR не юзаю, а для IAR могу привести код(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AlexD 10 февраля 2002 г. 03:33
В ответ на: Для нелюбителей пиков. Попробуйте в цикле просуммировать массив из например 16 переменных типа char или int в CVAVR и HT-PIC и посмотрите время выполнения для кварца 8 и 2 соответственно. Любители AVR будут неприятно удивлены. отправлено Jedi 09 февраля 2002 г. 17:44

#include <io8515.h>

char Tab[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int q;

void main(void){

char *point=Tab;
char i=16;
int s=0;
do{
s+=*(point++);
}while(--i);
q=s;
}

Сиё художество даёт такой код:


##############################################################################
# #
# IAR Atmel AVR C/EC++ Compiler V2.26C/WIN 10/Feb/2002 06:23:00 #
# Copyright 1996-2001 IAR Systems. All rights reserved. #
# #
# Source file = C:\Мои документы\Umoril.c #
# Command line = -v1 -ms -o "C:\Мои документы\Debug\Obj\" -I #
# "C:\PROGRAM FILES\IAR SYSTEMS\EW23_226C\avr\SRC\CLIB\IN #
# C\" -lCN "C:\Мои документы\Debug\List\" -lA "C:\Мои #
# документы\Debug\List\" -e -y --initializers_in_flash #
# -s9 --debug "C:\Мои документы\Umoril.c" #
# List file = C:\Мои документы\Debug\List\Umoril.lst #
# Object file = C:\Мои документы\Debug\Obj\Umoril.r90 #
# #
# #
##############################################################################

6 void main(void){
\ __nearfunc void main();
\ main:
\ 00000000 2F6B MOV R22,R27
\ 00000002 2F1A MOV R17,R26
7
8 char *point=Tab;
\ 00000004 .... LDI R30,LOW(Tab)
\ 00000006 .... LDI R31,(Tab) >> 8
\ 00000008 .... LDI R26,LOW(Tab)
\ 0000000A .... LDI R27,(Tab) >> 8
9 char i=16;
\ 0000000C E100 LDI R16,16
10 int s=0;
\ 0000000E E020 LDI R18,0
\ 00000010 E030 LDI R19,0
11 do{
12 s+=*(point++);
\ ??main_0:
\ 00000012 914D LD R20,X+
\ 00000014 E050 LDI R21,0
\ 00000016 0F24 ADD R18,R20
\ 00000018 1F35 ADC R19,R21
13 }while(--i);
\ 0000001A 950A DEC R16
\ 0000001C F7D1 BRNE ??main_0
14 q=s;
\ 0000001E 8B20 STD Z+16,R18
\ 00000020 8B31 STD Z+17,R19
15 }
\ 00000022 2FA1 MOV R26,R17
\ 00000024 2FB6 MOV R27,R22
\ 00000026 9508 RET

\ In segment NEAR_ID, align 1, keep-with-next
\ `?`:
\ 00000000 01 DB 1
\ 00000001 02 DB 2
\ 00000002 03 DB 3
\ 00000003 04 DB 4
\ 00000004 05 DB 5
\ 00000005 06 DB 6
\ 00000006 07 DB 7
\ 00000007 08 DB 8
\ 00000008 09 DB 9
\ 00000009 0A DB 10
\ 0000000A 0B DB 11
\ 0000000B 0C DB 12
\ 0000000C 0D DB 13
\ 0000000D 0E DB 14
\ 0000000E 0F DB 15
\ 0000000F 10 DB 16
\ `?`:
\ 00000010 0000 DB 0, 0
16

Maximum stack usage in bytes:

Function CSTACK RSTACK
-------- ------ ------
main 0 0


40 bytes in segment CODE
6 bytes in segment INITTAB
18 bytes in segment NEAR_I
18 bytes in segment NEAR_ID

58 bytes of CODE memory (+ 6 bytes shared)
18 bytes of DATA memory

Errors: none
Warnings: none

Длится 138 циклов, что при тактовой 8 МГц - 17,25 мкС

Жду с нетерпением, когда кто-нибудь приведёт аналогичные данные для
любого PIC + HT-PIC на тактовой 8... или 16... да ладно - 32 МГц 8-)

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

Ответы



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

E-mail: info@telesys.ru