CCS Compiler Code langsamer als PICC-Pro (Hi-Tech)

OP Persönliche Seite #1247661
Lesenswert?
• ▲
▼
Hallo.

ich habe zwei identische Programme für die Compiler "CCS" und 
"PICC-PRO".

Jetzt habe ich mir die serielle Datenübertragung (SPI / 
Software-Emuliert) bei beiden Versionen am Osci angesehen und musste 
feststellen, dass die Übertragung bei PICC-PRO >>>280KHz<<< beträgt und 
beim CCS nur >>>50KHz<<<.

Woran kann das liegen? Der Code ist nahezu identisch.

Gruß,
 Tobias
#1247674
Lesenswert?
• ▲
▼
Tobias John wrote:

> Woran kann das liegen? Der Code ist nahezu identisch.

Wenn der Quellcode identisch ist, dann muss das der erzeugte Code 
keineswegs sein. Erst recht nicht bei einer Architektur, die sich als 
Ziel von C Compilern nicht wirklich anbietet.

Ausserdem können Compiler-Einstellungen einen Unterschied machen. Ein 
Beispiel dazu: Der C Standard schreibt vor, dass "int" und "unsigned" 
mindestens 16 Bits haben. Bei PICs ist das vorsichtig ausgedrückt etwas 
suboptimal. Und so haben manche Compiler die Möglichkeit, mit 8-Bit 
"int" zu arbeiten. Und dies vielleicht sogar als Voreinstellung.
OP Persönliche Seite #1249563
Lesenswert?
• ▲
▼
Hallo,

hier der Code vom PICC-Pro Compiler der mit 280KHz läuft:
1
void display_write(unsigned char word, unsigned char _A0) {
2
  unsigned char zhl;
3
  A0 = _A0;
4
  for(zhl=8; zhl>0; zhl--) {
5
    SCK = 0;
6
    SDI = 0;
7
    if( word & 0x80 )
8
          SDI = 1;
9
    word <<= 1;
10
    SCK = 1;
11
  }
12
  SCK = 0;
13
  SDI = 0;
14
}
Die Funktion schreibt Daten/Befehl an ein DOG-M-Display

und hier der Code vom CCS-Compiler - der läuft viel zu langsam mit ca 
50KHz.
1
void display_write(unsigned char word, int1 _A0) {
2
  unsigned char zhl;
3
  output_bit(A0,_A0);
4
  for(zhl=8; zhl>0; zhl--) {
5
    output_low(SCK);
6
    output_low(SDI);
7
    if( word & 0x80 )
8
          output_high(SDI);
9
    word <<= 1;
10
    output_high(SCK);
11
  }
12
  output_low(SCK);
13
  output_low(SDI);
14
}

Da ist ja im Grunde kein Unterschied... und doch läuft der 
CCS-Compiler-Code viel langsamer...

Gruß,
 Tobias
(Firma: TUC) #1249601
Lesenswert?
• ▲
▼
Verwendest Du beim CCS Compiler im Code die #use fast_io(A) - Direktive 
für die verwendeten Ports? Wenn nicht, dann ist der Fall klar:
Der Compiler fügt vor jedem "output_high" bzw. "output_low" ein 
"set_tris..." ein, um den Pin als Ausgang zu beschalten. Das kostet 
natürlich Zeit.
OP Persönliche Seite #1249606
Lesenswert?
• ▲
▼
Colt Fish schrieb:
> Verwendest Du beim CCS Compiler im Code die #use fast_io(A) - Direktive
> für die verwendeten Ports? Wenn nicht, dann ist der Fall klar:
> Der Compiler fügt vor jedem "output_high" bzw. "output_low" ein
> "set_tris..." ein, um den Pin als Ausgang zu beschalten. Das kostet
> natürlich Zeit.

Ahhh!!! das erklärt das Problem wahrscheinlich. Ich werde es gleich mal 
ausprobieren.

Danke für den Tipp - der CCS und seine Eigenheiten sind mir noch nicht 
so geläufig.

Gruß,
 Tobias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren