Software Problem

Gast #3713761
Lesenswert?

Hallo,

ich Programmiere einen PIC16 in MPLAB8 mit dem HI-TECH Compiler. Bei 
dieser Codezeile bekomme ich immer diesen Fehler:

Error   [712] C:\Projekte\...\main.c; 371. für diesen Ausdruck kann kein 
Kode erzeugt werden

1
ui_a[i] = (unsigned int)(((unsigned short long)ui_a[i] * ui_b[i]) / ui_c[i]);

ui steht für unsigned int. Die Variable i ist vom Typ unsigned char.

Wenn ich eine Zahl als Index von ui_a[] wähle, funktioniert es 
komischerweise:
1
ui_a[2] = (unsigned int)(((unsigned short long)ui_a[i] * ui_b[i]) / ui_c[i]);

Und das hier funktioniert auch:
1
ui_a[i] = 4;

Hat jemand eine Idee für mich?
#3713784
Lesenswert?

hmmm schrieb:
> (unsigned short long)...
>
> decisions...decisions... :)
Das ist ein 24Bit Datentyp ;)

Sebastian Hepp schrieb:
> Müssen Indizes von Arrays nicht immer den Typ Integer haben?
unsigned char ist ein Integer. Normalerweise benutzt man size_t, aber 
wenn man einen uC programmiert und von vornherein weiss, dass der 
grösste Wert kleiner 255 ist, so kann man gut und gerne unsigned char 
verwenden.
Gast #3713850
Lesenswert?

Chris schrieb:
> Error   [712] C:\Projekte\...\main.c; 371. für diesen Ausdruck kann kein
> Kode erzeugt werden

Ist das alles an Fehlermeldung, was man von teuerer Profi-Software 
bekommt?
1
1.c: In function ‘main’:
2
1.c:9: error: both ‘long’ and ‘short’ in declaration specifiers
Gast #3713857
Lesenswert?

Yalu X. schrieb:
>> Es gibt keinen
>> short long
>> Datentyp
>
> Das ist eine C-Erweiterung dieses Compilers und steht für einen
> 24-Bit-Integer-Typ.

Na, wer unbedingt nicht portablen Code schreiben will, bitte.
Ich bleib beim Standard (ANSI C90), und da gibt es kein short long.
Gast #3713859
Lesenswert?

1
ui_a[i] = (unsigned int)(((unsigned short long)ui_a[i] * ui_b[i]) / ui_c[i]);

Wenn "short long" (24 Bit) nicht der Fehler ist, dann ist der Ausdruck 
für den Compiler zu komplex, um diesen in Code umzusetzen?
Gast #3713860
Lesenswert?

1
When compiling for baseline devices, some complex expressions may
2
cause compile-time errors (712) Can’t generate code for this expression. The expres-
3
sions should be simplified to work around this. This may require the use of additional variables to store
4
intermediate results. This is most likely with long integer or floating-point arithmetic.
Gast #3749817
Lesenswert?

Rufus mäkelte:
>Ansonsten scheint das eine Art Bascom unter den C-Compilern zu sein,
>wenn bereits ein so simpler Ausdruck solch eine Fehlermeldung zur Folge
>hat ...

Du kannst wohl nicht mit Bascom umgehen, sonst würdest Du mit Deinem Tun
dort nicht solche Fehlermeldungen erzeugen?

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