Gast
#1396322
Hallo, habe ein ähnliches Problem mit dem XDATA Speicherbereich wie einige andere hier (allerdings konnte ich die Antwort auf alle meine Fragen noch in keinem anderen Thread finden) Zum Silabs C8051F41x: 256 bytes internen RAM (0x00 bis 0xFF) untere 128 bytes sind direkt und indirekt adressierbar 0x00 bis 0x1F sind 4 bänke von General Purpose Registern, jew. 8byte breit. Die nachfolgenden 16 bytes, von 0x20 bis 0x2F, sind byte und bit direkt adressierbar. Die nachfolgenden 128bytes (ab 0x80) sind nur indirekt adressierbar nimmt den selben Bereich ein wie die SFRs aber ist physikalisch von ihnen getrennt. Wobei durch die art der adressierung unterschieden wird welcher physikalische speicherbereich ausgewählt wird. (direkt -> SFRs, indirekt->Speicher) Zusätzlich stehen 2048 bytes on-chip RAM zur verfügung die auf den externen (xdata) speicherbereich gemappt sind. In meinem Programm werden global zwei Arrays angelegt: unsigned char RF_Data[18]; unsigned char Data[18]; später werden die Daten in einer funktion manipuliert. MemoryModel: small(var in Data) Code Rom Size Large(64K Programm) So funktioniert das Programm. Wenn ich nun das Data array in xdata lege: unsigned char RF_Data[18]; unsigned char xdata Data[18]; unabhängig von der Reihenfolge, also auch: unsigned char xdata Data[18]; unsigned char RF_Data[18]; funktioniert das Programm nicht mehr. Es ist unabhängig von RF_data, das kann ich problemlos in xdata legen solange das Data Array nicht dort liegt (unabhängig von der Reihenfolge in der ich die C codezeilen schreibe). Ich kann das programm zum funktionieren bringen in dem ich den code in dem das RF_Data Array beschrieben wird auskommentiere. Die Codestellen in denen in Data geschrieben wird oder aus RF_Data gelesen führen zu keinem Fehler. Was meine ich mit NICHT FUNKTIONIEREN: Beim beginn des debuggen beginnt das Programm nach dem reset zu laufen und hört nicht mehr auf, es kommt nie an Haltepunkten vorbei die ich im Programm setzte. -> Ich überschreibe vermutlich den Reset Vektor ->Aber wie mache ich das, was passiert da genau? Wie mappe ich den Speicher richtig in Keil uv3? Sollte das nicht beim angeben der uC type automatisch feststehen wo welcher speicher liegt?
