Forum: Mikrocontroller und Digitale Elektronik Hardware Multiplikation Fehler


von Em G. (exe87)


Lesenswert?

Hallo zusammen.
Um 4 LEDs zu dimmen möchte ich die Werte Value1-4 für eine PWM(TimerA0 
und TimerA1 Cont Mode bis 65535-1) multiplizieren. Value1-4 können im 
Wertebereich von 0-250 sein. daher möchte ich diese Multiplizieren, um 
ihn an den Zählzyklus der TimerA0 und TimerA1 anzupassen.
Ich hoffe ihr versteht was ich meine.
Funktioniert wie es soll:
1
  TA0CCR1 = Value[1]*262;
2
  TA0CCR2 = Value[2];
3
  TA1CCR1 = Value[3];
4
  TA1CCR2 = Value[4];
Fehlermeldung:
1
  TA0CCR1 = Value[1]*262;
2
  TA0CCR2 = Value[2]*262; //zusätzlich
3
  TA1CCR1 = Value[3]*262; //eingetragene
4
  TA1CCR2 = Value[4]*262; //Multiplikationen


Das Problem was ich habe ist, dass mir CCS5 bei einer PWM alles super 
compiliert und es auch normal funktiert. Sobald aber 2-4 
Multiplikationen eingefügt werden, kommt die Fehlermeldung:
#10010 errors encountered during linking; "program.out" not built
#10099-D program will not fit into

Desweiteren steht neben der Zeile mit der Multiplikation:
#1533-D (ULP6.1) Detected use of multiplication on a device that has no 
hardware multiplier

Ich verstehe da nicht, dass es bei einer Multiplikation funktioniert, 
aber bei mehreren nicht mehr. Kann mir da jmd helfen?

uC: MSP430G2153


LG und nochn frohes Neues ;)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Die Multiplikation wird in Software ausgeführt, und dieses Stück 
Software scheint nicht mehr in deinen uC zu passen.

von Em G. (exe87)


Lesenswert?

Hallo Läubi,
vielen Dank für den Tipp.
Scheinbar liegt es tatsächlih daran. Kaum habe ich mal 4 Zeilen aus dem 
Code genommen, wird compiliert.

Nur so als kleine Nebenfrage, ob jemand da schon Erfahrung gemacht hat:
Kann es tatsächlich sein, dass die Lizensierung (Code Size limited) 
schon erreicht ist bzw. ausgeschöpft, nach ca. 200 Zeilen Code?

Weil dann ist die Überlegung eine volle Lizens zu kaufen.

Lg

von Matthias L. (Gast)


Lesenswert?

>TA0CCR1 = Value[1]*262;

Versuch doch mal folgendes:
1
  uint16_t u16Src = Value[1];
2
  uint16_t u16Res = 0;
3
4
  u16Res += (u16Src << 8 );  // 262 = 256 + 4 + 2
5
  u16Res += (u16Src << 2 );
6
  u16Res +=  u16Src;
7
  u16Res +=  u16Src;
8
9
  TA0CCR1 = u16Res;

Vielleicht macht der Compiler das ohne Multiplikation

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Em Gr schrieb:
> schon erreicht ist bzw. ausgeschöpft, nach ca. 200 Zeilen Code?

Ich fürchte das bezieht sich eher darauf das dein uC voll ist, zeig doch 
mal den vollen Code, ist die Optimierung eingeschaltet?

von Em G. (exe87)


Lesenswert?

Bin gerade nicht an dem Rechner dran, schaue ich gleich nochmal wegen 
dem Code.
Welche Optimierung, bzw wo kann man diese einschalten?

von Coder (Gast)


Lesenswert?

Ich würde auch sagen,  dass der uC voll ist. Der 2153 hat nur 1KB Flash.

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.