Software Problem

Gast #3713761
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?
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
hmmm schrieb:
> decisions...decisions... :)
?
Den Wert habe ich gewählt, weil das Zwischenergebnis der Multiplikation 
übersteigt den 16 Bit Bereich, darum der kurzzeitige Umstieg auf 24 Bit. 
Sollte ich das anders machen?
Gast
Chris schrieb:
> Den Wert habe ich gewählt, weil das Zwischenergebnis der Multiplikation
> übersteigt den 16 Bit Bereich, darum der kurzzeitige Umstieg auf 24 Bit.
> Sollte ich das anders machen?

Ist jetzt nicht dein Ernst?
Es gibt keinen
1
short long
 Datentyp
Gast
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
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
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
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.
Persönliche Seite
Versuch mal, das ganze mit 32 Bit rechnen zu lassen, also nur mit long 
anstelle von short long. Vielleicht überfordert der dann resultierende 
Ausdruck den Compiler ob seiner Komplexität etwas weniger.

Ansonsten scheint das eine Art Bascom unter den C-Compilern zu sein, 
wenn bereits ein so simpler Ausdruck solch eine Fehlermeldung zur Folge 
hat ...
Gast
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.