Variablen auf absolute Adresse setzten

OP #1789960
Lesenswert?

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ß
OP #1790037
Lesenswert?

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?
OP #1790068
Lesenswert?

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!?
Gast #1790092
Lesenswert?

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.
Gast #1790098
Lesenswert?

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.

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