Hi Leute, habe versucht gerade wie in einem Tut. gelesen bestimmte Variablen auf bestimmte Adressen zu setzten mit folgenden Befehl: unsigned int series[16] absolute 0x1900; es kommt ein "Syntax Error before absolute", Was mache ich falsch? Mein System: dsPIC33FJ128GP710 mit MPlab v8.36 um MPLab C30 als Compiler Gruß
Array = Variablen Feld = bei dir 16 unsigned Integer. Soll heißen hinter dem Array series[16] stehen insgesamt 16 unsigned Integer Variablen. Wie sollen 16 unsigned Integer auf eine Speicherzelle passen?
Hier sollte wohl eher der Anfang des Arrays auf 0x1900 gesetzt werden...
Hi Leute, habe es in der user Guide zum compiler gefunden: unsigned int devStat __attribute__((address(0x9400))) = 0x5E00; so funzt es, aber das Proggi lässt sich net debuggen, geht immer wieder ohne meldungen raus! was ich brauche ist eine art lookup-table. z.B. über SPI kommen sehr sehr schnell requests. Werte zwischen 0 und FFFF ich brauche aber nur knapp 20 davon. Ich muss die dazugehörige response mit dem nächsten Frame schicken. Req. - Request, Res. - Response z.b. Req.1 - Res.0 Req.2 - Res.1 Req.3 - Res.2 ... 0x9400 - 0x5E00 0x3004 - 0x9205 ... meine CPU läuft mit 40 MIPS, ich empfange die SPI-nachricht und muss bis zur nächsten Nachricht delaTime ca. 800ns, die Antwort im SPIbuffer schon bereithalten. ich habe es mit switch und case gemacht, aber so ab 4 cases, schafft der controller es nicht mehr rechtzeitig? Deshalb dachte ich, dass ich an bestimmte Speicherstelle (Adresse = Reqest) die Respose reinschreibe, so dass ich die SPI-Request als Zeiger auf die Speicherstelle setzte, aber irgendwie macht es es nicht! habt ihr einen tip?
Ruslan K. schrieb: > ich brauche aber nur knapp 20 davon. Wie sind die verteilt? Welche Nummern genau? Kann man die einfach und schnell in eine fortlaufende Nummerierung von 0 bis 20 überführen um damit einen normalen Arrayzugriff zu machen?
Die request sind bisschen stark verteilt und es sind 30. hier mal die auflistung: 9400h 4B10h 0B00h 4C03h 8C00h CD00h 0D00h CE39h 0E00h 4F00h 8F00h D005h 1000h 5100h 9100h D204h 9200h D300h 1300h 8000h 0100h 0200h 8300h 4C03h CD00h 8C00h 0D00h 4B10h 7005h 3004h Mit dem Array dachte ich auch schon, aber wie soll ich das sinnvoll umrechnen!?
CD00h, 4b10h und 0D00h kommen doppelt vor. Dann habe ich aufgehört nach Doppelten zu suchen. Kannst Du das mal sortieren und auf doppelte überprüfen, bitte? Vielleicht sind es ja doch deutlich weniger als 20. Ich wuerde versuchen aus der Liste eine boolsche Gleichung zu entwickeln, die den Index in eine Tabelle errechnet. Kann aber sein, das die auch zu lange braeuchte um berechnet zu werden. Evtl. hilft auch ein passend partitionierter Baum mit Teilmengen der Bits. Wenn ich richtig rechne entsprechen 40Mips 25ns pro Befehl, so das Du etwa 32 Befehle Zeit hast. Evtl. waere es gut diesen Part in Assembler zu schreiben.
Man koennte auch, aus der (sortierten und bereinigten) Liste die signifikanten Bits auszusortieren. Das wäre ein 16Bit "und". Dann evtl. noch eine Schiebeoperation oder Subtraktion. Das waere in der Vorbereitung nicht so aufwendig wie die boolsche Gleichung.
Danke für die Vorschläge! ich versuche nun die bits zu betrachten und mir die Response ausrechnen! Werde mich noch melden!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.