KrafT
Conselheiro
Brazil
3476 Posts Posted - 29/09/2003 : 08:05:26
--------------------------------------------------------------------------------
Durante uma conversa com o Fábio Pereira, surgiu a questão do desempenho do MSP x PIC.
Como não fazia a mínima idéia disso, fiz alguns testes via simulação de software, utilizando um
programa sugerido pelo Guest, para ordenar Matrizes:
//Programa de teste de um PIC de 16 bits, ordenando uma matriz com dados de 8 bits. #include <18f452.h>#define nop delay_cycles(1)#opt 9int m0[]={0x32,0x45,0x97,0x10,0x09,0x43,0x48,0x77,0x89,0x86};int aux;int a1,a2,n=0x0A;main(){ nop; for(a1=0;a1<n;a1++){ for(a2=a1+1;a2<n;a2++){ if(m0[a1]>m0[a2]){ aux=m0[a1]; m0[a1]=m0[a2]; m0[a2]=aux; } } } nop;while(1){} }
Fiz os testes da seguinte forma:
CCS (PCM e PCH) Versão 3.148.
MPLAB 5.70
Matriz com 10 variaveis, um teste com variáveis de 8 bits e outro com variaveis de 16 bits.
PIC de 14 bits e de 16 bits, simulados pelo MPLAB e contagem de ciclos feito pelo Stopwatch.
(Programa acima, medindo os ciclos entre os nop's).
IAR C/EC++ Compiler for MSP430 V2.10A/W32 (2.10.1.7), idem ao PIC, exceto que os MSP são de 16
bits tanto para dados como para programa.
Obtive os seguintes resultados:
Conclusão:
- O conjuntos MSP e IAR, trabalham melhor com dados de 16 bits. O código gerado pelo IAR é sempre um pouco menor do que o equivalente gerado pelo CCS, talves devido à ortogonalidade dos modos de endereçamento do MSP e embora seu desempenho seja comprometido pelas instruções que levam mais de um ciclo, algumas levando até seis ciclos, por levar 125uS por instrução o MSP saiu vitorioso.
- O CCS PCH apresentou um resultado péssimo com PIC de 16 bits e matriz de 16 bits. Deve haver algo
errado no (meu) conjunto CCS & MPLAB.
PS: Sugiro aos colegas repetirem esse meu teste, tanto para PIC, como MSP, para validar ou corrigir o meu
trabalho e principalmente, fazer esse teste com outros microcontroladores e seus compiladores C, pra avaliarmos a
eficiência do conjunto (microcontrolador e compilador C).
PS1: Com PIC 12 bits e matriz de 8 bits, os ciclos foram 1440 e com Matriz de 16 bits, o CCS PCB indicou RAM insuficiente.
Edited by - kraft on 29/09/2003 08:09:17
Fabio Pereira
Conselheiro
Brazil
2205 Posts Posted - 10/10/2003 : 19:31:39
--------------------------------------------------------------------------------
Kraft,
Eu estava querendo comparar os Z8 com os PICs e achei a sua idéia interessante.
A execução da sua rotina de teste no ZDS-II resultou nos seguintes tempos:
8 bits (elementos da matriz declarados como char) : 2505 ciclos
16 bits (elementos da matriz declarados como int) : 2980 ciclos
Os Z8 encore me causaram uma ótima impressão, especialmente porque o seu ciclo de instruções é de 50ns @ 20Mhz (claro, a maioria das instruções é executada entre 2 e 6 ciclos de clock), mas me pareceu um ótimo resultado, já que os 1482 ciclos dos PIC16, são executados cada um em 4 ciclos de clock (resultando então em 5928 ciclos de clock).
Claro que posso estar errado pois ainda não estou 100% familiarizado com a arquitetura dos Z8 ...
Até +
Fábio Pereira