Página 1 de 1

Tamanho do Código CCS x MikroPascal

MensagemEnviado: 28 Jan 2007 13:11
por klausenner
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

MensagemEnviado: 29 Jan 2007 07:06
por fabim
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.

MensagemEnviado: 29 Jan 2007 08:09
por Andre_BNU
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!

MensagemEnviado: 29 Jan 2007 17:40
por klausenner
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.

MensagemEnviado: 30 Jan 2007 13:52
por Andremp
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

MensagemEnviado: 30 Jan 2007 14:22
por fabim
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

MensagemEnviado: 03 Fev 2007 12:14
por klausenner
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

MensagemEnviado: 03 Fev 2007 20:03
por KrafT
Realmente Klausenner, o programa é minusculo, pena que não faça nada:

Imagem

MensagemEnviado: 03 Fev 2007 20:12
por proex
Realmente, o compilador MIkro nao esta gerando código algum.

MensagemEnviado: 03 Fev 2007 20:26
por KrafT
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?

MensagemEnviado: 04 Fev 2007 09:23
por proex
Escreve em Assembler ehehehheh