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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.