Tamanho do Código CCS x MikroPascal

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Tamanho do Código CCS x MikroPascal

Mensagempor klausenner » 28 Jan 2007 13:11

Comprei recentemente um compilador MikroPascal da http://www.mikroe.com e fui comparar os código gerado por ele e pelo CCS v4.013, notei que o tamanho do código gerado no MikroPascal é bem menor do que no CCS testei também na versão CCS 3.249 e o resultado foi quase o mesmo, a pergunta é:

O Mikropascal é mais otimizado que o CCS ?


program TESTE;
var
k,l: integer;
hj: longint;
begin
k:=198778;
l:=197578;
hj:=(k*l)/2;

while true do // An infinite loop
begin
// wait for one second
end;
end.
******************* CÓDIGO GERADO **************************
:100000000428FF3FFF3FFF3F7A3003138312A00015
:100010000830A100CA30A2000330A3002230A4009F
:100020000F30A5007630A6009230A70016281728BA
:02400E00FFFFB2
:00000001FF
*************************************************************

*********************** CCS FONTE ***************************
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)

void main() {

signed long int k=198778,l=197578;
int32 hj=0;
hj = (k * l)/2;
SET_TRIS_D(0xFF);
output_D(0xFF);

while (true)
{
}

}

****************** CÓDIGO GERADO NO CCS ********************

:1000000000308A005B2800001030AD00F701FA01D3
:10001000AA0CA90C031C12282B08F7070318FA0ACC
:100020002C08FA07FA0CF70CF90CF80CAD0B0828A1
:100030008A110A127A282C082E068039B000AC1FCB
:100040002628AB09AC09AB0A0319AC0AAE1F2D2850
:10005000AD09AE09AD0A0319AE0AF801F901F701BD
:10006000FA012E08031D37282D08031951281030D6
:10007000AF000310AB0DAC0DF70DFA0D2E087A0290
:10008000031D44282D087702031C4D282D08F70274
:10009000031CFA032E08FA020314F80DF90DAF0B36
:1000A0003928B01F5828F809F909F80A0319F90A7C
:1000B0008A110A128628840183131F308305831650
:1000C0001F149F141F159F11A5308312A1004D30DE
:1000D000A200CA30A3000330A400A501A601A70115
:1000E000A8012208AA002108A9002408AC002308BE
:1000F000AB0004287908AA007808A9007908AC00A8
:100100007808AB00AE010230AD001B287908FA0078
:100110007808F7007908F800F901FA017A08A800D0
:100120007908A7007808A6007708A500962863003C
:02400E00723FFF
:00000001FF
;PIC16F877
klausenner
Bit
 
Mensagens: 18
Registrado em: 09 Nov 2006 15:33

Mensagempor fabim » 29 Jan 2007 07:06

klausenner.
O problema não é que o mikropascal seja mais otimizado..

Eu percebi que o CCS quando vc por exemplo chama a função word X word.. ele carrega a procedure de 16*16 ou 32*32 que seja..

Daí tantos comandos vc chama outro calculo de 16*16 ele usa a mesma procedure..

Ja no CCS pelo que eu quase entendi ele carrega X vezes a rotina de calculo.

Fabim.
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_BNU » 29 Jan 2007 08:09

nao seria a declaração "hj: longint;" longint nesse compilador nao é 16bits?

no CCS vc declarou como int32.

outra nao poderia ser a inicialização? vc inicializou o mikropascal como no CCS? clock etc..

interessante a comparação dos dois

abraços!
Andre_BNU
Bit
 
Mensagens: 7
Registrado em: 07 Nov 2006 10:12

Mensagempor klausenner » 29 Jan 2007 17:40

Sim andre, os doi estão com o mesmo clock, fiz uma comparação também com o mikroC do mesmo fabricante do mikropascal e a diferença ainda foi maior, só que neste como é uma vaersão demo o limit do código é de 2k, mas como também é C ficou mais facil a comparação.
klausenner
Bit
 
Mensagens: 18
Registrado em: 09 Nov 2006 15:33

Mensagempor Andremp » 30 Jan 2007 13:52

uma dúvida, nao entendo do Mikropascal, mas as funcoes do ccs

SET_TRIS_D(0xFF);
output_D(0xFF);

estão também no código do Mikropascal ? nao vi nenhuma
Avatar do usuário
Andremp
Bit
 
Mensagens: 45
Registrado em: 13 Out 2006 13:37
Localização: Florianópolis

Mensagempor fabim » 30 Jan 2007 14:22

pessoal agóra que eu li o fonte do mikropascal..

Ele num ta fazendo nadica de nada..

program TESTE;
var
k,l: integer;
hj: longint;


begin
k:=198778;
l:=197578;
hj:=(k*l)/2; /// hj = (198778 * 197578) / 2


o código abaixo em asm é a méma coisa que
Goto $
ou
nop
goto $-1

while true do // An infinite loop
begin
// wait for one second
end;
end.

Fabim
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor klausenner » 03 Fev 2007 12:14

Outra comparação feita com o mesmo código fonte, so que agora CCS x mikroC

********************* CÓDIGO CCS ***************************
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)

void main() {

signed long int k=198778,l=197578;
int32 hj=0;
hj = (k * l)/2;


while (true)
{
}

}

:1000000000308A005B2800001030AD00F701FA01D3
:10001000AA0CA90C031C12282B08F7070318FA0ACC
:100020002C08FA07FA0CF70CF90CF80CAD0B0828A1
:100030008A110A127A282C082E068039B000AC1FCB
:100040002628AB09AC09AB0A0319AC0AAE1F2D2850
:10005000AD09AE09AD0A0319AE0AF801F901F701BD
:10006000FA012E08031D37282D08031951281030D6
:10007000AF000310AB0DAC0DF70DFA0D2E087A0290
:10008000031D44282D087702031C4D282D08F70274
:10009000031CFA032E08FA020314F80DF90DAF0B36
:1000A0003928B01F5828F809F909F80A0319F90A7C
:1000B0008A110A128628840183131F308305831650
:1000C0001F149F141F159F117A308312A10008304E
:1000D000A200CA30A3000330A400A501A601A70115
:1000E000A8012208AA002108A9002408AC002308BE
:1000F000AB0004287908AA007808A9007908AC00A8
:100100007808AB00AE010230AD001B287908FA0078
:100110007808F7007908F800F901FA017A08A800D0
:100120007908A7007808A6007708A500962863003C
:02400E00723FFF
:00000001FF
;PIC16F877


******************** CÓDIGO microC **************************
void main() {

signed long int k=198778,l=197578;
unsigned long int hj=0;
hj = (k * l)/2;


while (1)
{
}

}

:100000000428FF3FFF3FFF3F04280528FF3FFF3F35
:02400E007A3FF7
:00000001FF
klausenner
Bit
 
Mensagens: 18
Registrado em: 09 Nov 2006 15:33

Mensagempor KrafT » 03 Fev 2007 20:03

Realmente Klausenner, o programa é minusculo, pena que não faça nada:

Imagem
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor proex » 03 Fev 2007 20:12

Realmente, o compilador MIkro nao esta gerando código algum.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor KrafT » 03 Fev 2007 20:26

proex escreveu:Realmente, o compilador MIkro nao esta gerando código algum.


Poisé Junior... A tal otimização insiste em remover rotinas que não tenha utilidade ( no critério da ferramenta)... Maior chatisse isso, como vou conseguir ocupar os 2k de um 628 desse jeito?
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor proex » 04 Fev 2007 09:23

Escreve em Assembler ehehehheh
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x