Forum: Mikrocontroller und Digitale Elektronik C18 oder HiTech


von Jimbo (Gast)


Lesenswert?

Hallo,

ich lese immer von diesen beiden Compilern für den PICs.
Leider kann ich mir kein Bild machen, welcher nun tendenziell die 
bessere Wahl ist. Oder welcher von Microchip besser supported wird. 
Jetzt hat man mir gesagt, dass der HiTech den C18 ersetzen soll, ist da 
was dran?


danke
J.

von Pause (Gast)


Lesenswert?

Also ich kenne beide Compiler, jedoch glaube ich das der HITech Compiler 
offiziell nicht von Microchip ist.

Ich persönlich finde den C18 Compiler besser, da es dazu sehr gute 
Einsteiger Beispiele gibt.

Im Pic-Forum hat mal einer HiTech Code gepostet, gleich kamen fragen was 
das für ein Compiler ist und zwar von Leuten die es wirklich drauf 
haben.

Wie gesagt für mich als Anfänger ist der C18 besser. Was ich jedoch 
zugeben muss ist das die Syntax des HITech kürzer ist.

Hier ein Bsp.

Wenn ich beim C18 das Timer Statusflag löschen möchte mache ich das so:
PIR1bits.TMR1IF=0;

Beim HITech wäre das etwa so:

T1IF=0;

Die C18 Syntax ist zwar länger, jedoch irgendwie Transparenter.

Einfach immer  REGISTERNAMEbits.NAMEvonBIT=0
Die Namen kannst hald 1:1 aus dem DB lesen, das finde ich ganz gut.

von tom (Gast)


Lesenswert?

Soweit ich informiert bin wird Microchip HiTech kaufen oder hat dies 
schon getan. Dann wird der HiTech Compiler direkt mit MPLAB IDE 
installiert.

Mein HiTech Compiler schluckt die Syntax REGISTERNAMEbits.NAMEvonBIT=0 
genauso.

Gruß
Tom

von Pause (Gast)


Lesenswert?

tom schrieb:
> Mein HiTech Compiler schluckt die Syntax REGISTERNAMEbits.NAMEvonBIT=0
>
> genauso.

Coole Sache wusste ich nicht.
Aber da war doch was mit HITech dass der Compilierte Code grösser ist, 
bei der gratis Version zumindest?

von Michael G. (let)


Lesenswert?

Nachdem ich mir überlegt hatte mal wieder etwas mit PICs zu machen habe 
ich mir die Compilerfrage auch gestellt. Zuletzt habe ich den PIC-C von 
CCS verwendet.
Im Netz ist wenig darüber zu finden. Ich habe selbst auch mal einige 
Tests gemacht. Das ganze ist allerdings schon ein paar Monate her und 
das PIC Vorhaben habe ich wieder auf Eis gelegt. Ich kann mich mit 
Microchip einfach nicht anfreunden. Weiß selbst nicht warum. Nein, AVRs 
benutze ich kaum noch.

Nach Vergleichen die finden konnte scheint der Hitech Compiler im großen 
und ganzen einen etwas effizienteren Code zu erzeugen. Manchmal ist er 
aber auch schlechter. Die Angaben waren aber schon älter.

Bei eigenen Tests ist mir folgendes aufgefallen:
C18 unterstützt keine anonymen Strukturen. Hi-tech ersetzt keine 
Division durch Bit-shift wenn das möglich ist. Bei einem 'i/2' wird also 
dividiert, der Ausdruck also nicht implizit in 'i>>1' umgewandelt.
Ansonsten konnte ich keine wesentlichen Unterschiede ausmachen. Da aber 
die ominöse Codeoptimierung des PICC, die vielleicht noch etwas reißen 
könnte, in der kostenlosen Version nicht zur Verfügung steht, würde ich 
den C18 wählen.

Höhere Optimierungen wie sie der GCC durchführt beherrschen beide 
Compiler nicht. Vor allem werden Zwischenergebnisse nicht 
wiederverwendet:
1
x = i/2;
2
y = i/2;
3
z = i/2;
Oder
1
col1 >>= 8 - bits;
2
col2 >>= 8 - bits;

Ich verzichte lieber darauf zu schreiben was PICC und C18 daraus machen.

von Pause (Gast)


Lesenswert?

@ Michael Danke für den Beitrag sehr interessant.

GCC habe ich im Internet auch schon gesehen, damals suchte ich eine 
Library
für einen DS1631. Dafür hätte ich aber bezahlen müssen, musste dann doch 
alles selber machen. Was aber auch gut war habe da einiges gelernt ;)

von Lehrmann M. (ubimbo)


Lesenswert?

Michael G. schrieb:
> Höhere Optimierungen wie sie der GCC durchführt beherrschen beide
> Compiler nicht. Vor allem werden Zwischenergebnisse nicht
> wiederverwendet:x = i/2;
> y = i/2;
> z = i/2;
> Odercol1 >>= 8 - bits;
> col2 >>= 8 - bits;

Darf ich fragen woher du das weißt, bzw. gibt es da Quellen dafür?

von ich (Gast)


Lesenswert?

ich nehme von mikroelektronika den mikroC Pro for PIC als freeware 
(codebgrenzt). Der macht aus:
1
     char c1, c2, c3;
2
     
3
     c1 = PORTA/2;
4
     c2 = c1 + 5;
5
     c3 = c1 + 5;
6
7
     PORTA = c2;
8
     PORTB = c3;
1
  MOVF       PORTA+0, 0
2
  MOVWF      R0
3
  LSRF       R0, 1
4
;asd.c,5 ::     c2 = c1 + 5;
5
  MOVLW      5
6
  ADDWF      R0, 1
7
;asd.c,8 ::     PORTA = c2;
8
  MOVF       R0, 0
9
  MOVWF      PORTA+0
10
;asd.c,9 ::     PORTB = c3;
11
  MOVF       R0, 0
12
  MOVWF      PORTB+0

Also mit Shift nach rechts, c1 ist rausgeschmissen und c2=c3, somit c3 
auch raus.

von Joachim (Gast)


Lesenswert?

Hmmmm... Ich benutze den C18 mittlerweile seit fünf Jahren und mir ist 
in dieser Zeit nicht ein ernstzunehmender Fehler aufgefallen. Das Ding 
ist ANSI-C kompatibel (wenn auch mit einigen wenigen Einschränkungen), 
es gibt ihn umsonst und ob diese nach 60 Tagen wegfallende 
Codeoptimierung sooo tragisch ist (ich habe bis jetzt in der Praxis 
keinen Unterschied bemerkt) glaube ich nicht.

Den Compiler C18 als solches würde ich mit "gut" bewerten.

Was allerdings das absolut Elend ist, ist die schwache 
MPLAB-Objektverwaltung, Fehler in Codebibliotheken, die nicht besonders 
fortschrittliche IDE (wer das Intellsense von Microsoft nebst deren 
komfortablen Editions kennt weiß was ich meine) und die Fehler in der 
GUI als solches, die eigentlich nicht sein dürften (zB. auskommentierter 
Text verändert Farbe beim markieren und verrutscht um mehrere Pixel), 
gelegentlich verpixelter Bildschirmaufbau und nur geringe bis gar keine 
Merkfähigkeit der Fensterpositionen. Das zieht sich bei mir über alle 
Generationen auf allen Rechnern hin. Man hat manchmal das Gefühl, die 
IDE wurde von Praktikanten, Linux-Hackern und Erstsemestern 
geschrieben...

von heinzhorst (Gast)


Lesenswert?

Pause schrieb:
> Also ich kenne beide Compiler, jedoch glaube ich das der HITech Compiler
> offiziell nicht von Microchip ist.

Ja und Nein. HiTech war bis vor noch nicht allzu langer Zeit 
eigenständig. Nun hat Microchip den Laden gekauft und bietet die 
früheren HiTech-Produkte als Premium-Compiler an. Daher gibt es auch 
jetzt von Microchip ein MPLAB-Plugin für die HiTech-Toosuite. Find's nur 
schade, dass sie die dazugehörige Eclipse-basierte Entwicklungsumgebung 
von nicht mehr weiterführen. Ich fand HiTide übersichtlicher als MPLAB. 
Ist aber wohl eher Gewohnheitssache.

von ich (Gast)


Lesenswert?

ich hab mir letztens die MPLab runtergeladen und da war der C18 und der 
Hi-Tech Compiler bei, warscheinlich nur die Testversion. Ich hab mich 
schon an den mikroC gewöhnt... Allein die Einstellung der Config der 
PICs ist ideal.

von Michael G. (let)


Lesenswert?

Lehrmann Michael schrieb:
> Darf ich fragen woher du das weißt, bzw. gibt es da Quellen dafür?

Sicher. Ich habe mir das Listfile angesehen.
Es ist beim GCC nicht so einfach solche Tests zu machen, da der 
Optimierer ziemlich aggressiv ist und gerne mal Variablen weg optimiert 
und direkt Konstanten einsetzt. Daher habe ich einige Hilfsfunktionen 
geschrieben.
1
#include "bench.h"
2
3
int main(int argc)
4
{
5
  uint8_t col1, col2;
6
7
  col1 = value1();
8
  col2 = value2();
9
10
  col1 <<= 8 - argc;
11
  col2 <<= 8 - argc;
12
  func1(col1, col2);
13
14
  return 0;
15
}
1
  col1 = value1();
2
  ca:  0e 94 86 00   call  0x10c  ; 0x10c <value1>
3
  ce:  08 2f         mov  r16, r24
4
  col2 = value2();
5
  d0:  0e 94 88 00   call  0x110  ; 0x110 <value2>
6
7
  col1 <<= 8 - argc;
8
  d4:  28 e0         ldi  r18, 0x08  ; 8
9
  d6:  30 e0         ldi  r19, 0x00  ; 0
10
  d8:  2e 19         sub  r18, r14
11
  da:  3f 09         sbc  r19, r15
12
  dc:  10 e0         ldi  r17, 0x00  ; 0
13
  de:  02 2e         mov  r0, r18
14
  e0:  02 c0         rjmp  .+4        ; 0xe6 <main+0x26>
15
  e2:  00 0f         add  r16, r16
16
  e4:  11 1f         adc  r17, r17
17
  e6:  0a 94         dec  r0
18
  e8:  e2 f7         brpl  .-8        ; 0xe2 <main+0x22>
19
  col2 <<= 8 - argc;
20
  ea:  68 2f         mov  r22, r24
21
  ec:  70 e0         ldi  r23, 0x00  ; 0
22
  ee:  02 c0         rjmp  .+4        ; 0xf4 <main+0x34>
23
  f0:  66 0f         add  r22, r22
24
  f2:  77 1f         adc  r23, r23
25
  f4:  2a 95         dec  r18
26
  f6:  e2 f7         brpl  .-8        ; 0xf0 <main+0x30>
27
  func1(col1, col2);
28
  f8:  80 2f         mov  r24, r16
29
  fa:  0e 94 5f 00   call  0xbe  ; 0xbe <func1>

Und zu guter Letzt:
1
int main(int argc)
2
{
3
  uint8_t x, y, z;
4
5
  x = argc/2;
6
  y = argc/2;
7
  z = argc/2;
8
  func2(x, y, z);
9
10
  return 0;
11
}
1
int main(int argc)
2
{
3
  uint8_t x, y, z;
4
5
  x = argc/2;
6
  c2:  97 fd         sbrc  r25, 7
7
  c4:  0a c0         rjmp  .+20       ; 0xda <main+0x18>
8
  c6:  ac 01         movw  r20, r24
9
  c8:  55 95         asr  r21
10
  ca:  47 95         ror  r20
11
  y = argc/2;
12
  z = argc/2;
13
  func2(x, y, z);
14
  cc:  84 2f         mov  r24, r20
15
  ce:  64 2f         mov  r22, r20
16
  d0:  0e 94 60 00   call  0xc0  ; 0xc0 <func2>
17
18
  return 0;
19
}

Zu einfach? Na gut:
1
#include "bench.h"
2
3
extern uint8_t x, y, z;
4
5
int main(int argc)
6
{
7
  x += argc/2;
8
  y += argc/2;
9
  z += argc/2;
10
  func2(x, y, z);
11
12
  return 0;
13
}
1
int main(int argc)
2
{
3
  x += argc/2;
4
  d2:  97 fd         sbrc  r25, 7
5
  d4:  17 c0         rjmp  .+46       ; 0x104 <main+0x32>
6
  d6:  95 95         asr  r25
7
  d8:  87 95         ror  r24
8
  da:  98 2f         mov  r25, r24
9
  dc:  80 91 00 01   lds  r24, 0x0100
10
  e0:  89 0f         add  r24, r25
11
  e2:  80 93 00 01   sts  0x0100, r24
12
  y += argc/2;
13
  e6:  60 91 02 01   lds  r22, 0x0102
14
  ea:  69 0f         add  r22, r25
15
  ec:  60 93 02 01   sts  0x0102, r22
16
  z += argc/2;
17
  f0:  40 91 01 01   lds  r20, 0x0101
18
  f4:  49 0f         add  r20, r25
19
  f6:  40 93 01 01   sts  0x0101, r20
20
  func2(x, y, z);
21
  fa:  0e 94 68 00   call  0xd0  ; 0xd0 <func2>
22
23
  return 0;
24
}

von Loonix (Gast)


Lesenswert?

Joachim schrieb:
> Man hat manchmal das Gefühl, die
> IDE wurde von Praktikanten, Linux-Hackern und Erstsemestern
> geschrieben...

Wenn du das nach einem Vergleich mit AVRStudio <= 4.18 immer noch so 
siehst, ist dir nicht mehr zu helfen. Wie kommst du darauf MPLAB mit 
VisualStudio zu vergleichen?

Michael G. schrieb:
> Sicher. Ich habe mir das Listfile angesehen.

Dann hast du sicher auch bemerkt, dass das du nicht für PIC kompiliert 
hast. Dein Kompilat enthält keinen PIC18-Assembler.

von Peter K. (Gast)


Lesenswert?

Hi,

um mal die Spannung aus der IDE Frage zu nehmen:
Microchip bietet seit einiger Zeit MPLABX an, komplett neu und auf 
Netbeans-Basis.

Das wird wohl auch der Grund sein, warum die Eclipse (HiTide) für den 
HiTech nich mehr unterstützen.

Problem: Gibt noch kein CCS Plug-In, daher ist C18 jetzt auch für mich 
interessant, weil ich gerne MPLABX verwenden würde.

von Loonix (Gast)


Lesenswert?

Peter K. schrieb:
> Microchip bietet seit einiger Zeit MPLABX an, komplett neu und auf
> Netbeans-Basis.

Ist noch im Beta-Stadium, also keine vollwertige Alternative wenn man 
ernsthaft arbeiten will oder muss.

von Michael G. (let)


Lesenswert?

> Wenn du das nach einem Vergleich mit AVRStudio <= 4.18 immer noch so
> siehst, ist dir nicht mehr zu helfen.

FYI: Mit dem AVRStudio kann man keine PICs programmieren.



;)

von Peter K. (Gast)


Lesenswert?

Die Betaversio

Loonix schrieb:
> Ist noch im Beta-Stadium, also keine vollwertige Alternative wenn man
> ernsthaft arbeiten will oder muss.

Das stimmt. Wenn Du Softwareentwickler in einer Firma bist, dann sagt 
Dir Dein Chef sicher, nimm das Sichere was wir kennen. Vermeidet sicher 
auch Probleme. Genau deshalb wird immernoch VS 6.0 verwendet...

Und weil Microchip so ein kleiner Bastelladen ist, ist eine Beta5 auch 
keine ernzunehmende Alternative. (Nebenbei: Die Compiler sind nicht 
Beta)

Hier ging es aber mal um die Frage welcher Compiler sich anbietet und 
wenn jemand jetzt mit PICs einsteigt, dann wäre es sicherlich einen 
Gedanken Wert, mal zu gucken, was die Zukunft ist.

von Loonix (Gast)


Lesenswert?

Michael G. schrieb:
> FYI: Mit dem AVRStudio kann man keine PICs programmieren.

FYI2: Mit VisualStudio auch nicht.

Peter K. schrieb:
> Und weil Microchip so ein kleiner Bastelladen ist, ist eine Beta5 auch
> keine ernzunehmende Alternative. (Nebenbei: Die Compiler sind nicht
> Beta)

Du hast den Ironie-Smilie vergessen. ;)

von Joachim (Gast)


Lesenswert?

>Wenn du das nach einem Vergleich mit AVRStudio <= 4.18 immer noch so
>siehst, ist dir nicht mehr zu helfen.
Wieso? ist AVRStudio noch hemdsärmliger? Ich kenne AVRStudio nicht. Und 
JA, mir hilft schon lange keiner mehr.


>Wie kommst du darauf MPLAB mit VisualStudio zu vergleichen?
Beides sind IDE, ich kenne praktisch nur diese. Ich habe in früherer 
Zeit unter Linux Code machen wollen... hab's dann aber gelassen, war mir 
zu freakig.

von Joachim (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.