Forum: Compiler & IDEs unsigned char code Ascii_1 C


von Jan (Gast)


Lesenswert?

Hallo Coder, in der ersten Zeile vom Code Ausschnitt ist zwischen char 
und code ne Leerzeile, da meckert der Keil ARM compiler. Im zweiten 
Ausschnitt wird die Adresse von Ascii_1 angesprochen. da meckert er 
natürlich auch. Woran liegt das und warum ist zwischen code udn Ascii_1 
überhaupt ein Leerzeichen. Der Code(Ausschnitt) ist für einen 8051 
Prozessor den ich auf einen ARM M0+ portieren will. Danke schonmal für 
Anregungen und konstruktive Kritik.

1
unsigned char code Ascii_1[241][5]={    // Refer to "Times New Roman" Font Database...
2
            //   Basic Characters
3
  {0x00,0x00,0x00,0x00,0x00},    //
4
  {0x00,0x00,0x4F,0x00,0x00},    //   (  1)  ! - 0x0021 Exclamation Mark
5
  {0x00,0x07,0x00,0x07,0x00},    //   (  2)  " - 0x0022 Quotation Mark
6
  {0x14,0x7F,0x14,0x7F,0x14},    //   (  3)  # - 0x0023 Number Sign
7
  {0x24,0x2A,0x7F,0x2A,0x12},    //   (  4)  $ - 0x0024 Dollar Sign
8
  {0x23,0x13,0x08,0x64,0x62},    //   (  5)  % - 0x0025 Percent Sign

1
    case 1:
2
      Src_Pointer=&Ascii_1[(b-1)][i];
3
      break;
4
    case 2:
5
      Src_Pointer=&Ascii_2[(b-1)][i];
6
      break;

von Andreas B. (andreas_b77)


Lesenswert?

Was ist "code"? Wird das vom Keil ARM Compiler überhaupt unterstützt?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan schrieb:
> Hallo Coder, in der ersten Zeile vom Code Ausschnitt ist zwischen char
> und code ne Leerzeile

Du meinst ein Leerzeichen.

Das wird nicht das Problem sein, der ARM-Compiler kennt das 
Schlüsselwort code höchstwahrscheinlich nicht.

Entferne das, so daß da steht:
1
unsigned char Ascii_1[241][5]={    // Refer to "Times New Roman" Font Database...

von Guest (Gast)


Lesenswert?

"code" wird irgendeine Spezialität vom 8051 Compiler sein.
Wahrscheinlich um das Array in das ROM zu legen.
Entweder weglassen oder sinnvollerweise durch const ersetzen.

von W.S. (Gast)


Lesenswert?

erstmal eines: Mach aus

unsigned char code Ascii_1[241][5]={ ...

mal

const unsigned char Ascii_1[....

und dann: weißt du eigentlich, was du mit Ascii_1[241][5] da geschrieben 
hast? Also was du TATSÄCHLICH dort anrichtest?

Fang lieber an, mit sowas ein bissel zu rechnen und mach ein

const unsigned char Ascii_1[241*5] =
{ .....
};

draus.

W.S.

von Peter II (Gast)


Lesenswert?

W.S. schrieb:
> Fang lieber an, mit sowas ein bissel zu rechnen und mach ein
>
> const unsigned char Ascii_1[241*5] =
> { .....
> };
>
> draus.

was soll das bringen? Der Compiler kann sehr gut selber rechnen. Es 
macht auch nichts anderes.

von Jan (Gast)


Lesenswert?

unsigned char code Ascii_1[241][5]={ ...

wenn ich das so mache dann meckert er wenn ich mit

Src_Pointer =&Ascii_1[(b-1)][i]; auf die Adresse zugreifen wll

von Jan (Gast)


Lesenswert?

ich meinte natürlich const unsigned char Ascii_1[....

von Peter II (Gast)


Lesenswert?

Jan schrieb:
> wenn ich das so mache dann meckert er wenn ich mit
>
> Src_Pointer =&Ascii_1[(b-1)][i]; auf die Adresse zugreifen wll

und wie ist die genaue Fehlermeldung?

von Karl H. (kbuchegg)


Lesenswert?

Jan schrieb:
> unsigned char code Ascii_1[241][5]={ ...
>
> wenn ich das so mache dann meckert er wenn ich mit
>
> Src_Pointer =&Ascii_1[(b-1)][i]; auf die Adresse zugreifen wll

Jede Wette, dass sich bei der Definition von Src_Pointer auch wieder 
dieses 'code' findet.

Die müssen ALLE weg!
Überall.
UNd dann muss man den Code studieren, ob dieses 'code' irgendwelche 
Auswirkungen hatte. Ob Dinge genau so geschrieben wurden, WEIL es da 
eben dieses 'code' gab.

Das Problem:
Wenn du Code von A nach B portieren willst, solltest du schon ganz gut C 
können, um zu erkennen, welche Teile speziell und nur für diesen einen 
Prozessor geschrieben wurden.
Die Idee "Ich kann das nicht selber schreiben, also portiere ich mir 
Code von einem anderen Prozessor auf meinen Zielprozessor" ist zwar 
naheliegend, aber ohne ein gewisses Wissen geht das nun mal oft nicht.
Du wärest gut beraten, wenn du analysieren würdest, was die Idee im 
Originalcode ist, wie der funktioniert, und dann mit dieser Idee den 
Code im Prinzip auf deinem Prozessor neu schreibst. Das bringt dann auch 
deine C-Kenntnisse weiter und hat den Vorteil, dass du deinen Code intim 
kennst um ihn in weiterer Folge zu ändern oder zu erweitern.

Irgendwelche Anpassungen sind auf dieser Ebene praktisch immer 
notwendig. Die Idee, man könne den Code so einfach mir nichts dir nichts 
auf einen anderen Prozessor transportieren und alles ist in Butter, ist 
ein Trugschluss. Das funktioniert oft ganz einfach nicht.

von Jörg (Gast)


Lesenswert?

error:  #513: a value of type "const unsigned char *" cannot be assigned 
to an entity of type "unsigned char *"

Der Source Pointer ist so definiert
unsigned char *Src_Pointer;

Also sowie ich das verstehe, benutzt man hier den Flash speicher um die 
Ganzen ASCII Sachen reinzuschaufeln, da das Ganze viel Speicher braucht. 
Ich denke beim Cortex M0+ ist ist es nicht unbedingt nötig.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jörg schrieb:
> Also sowie ich das verstehe, benutzt man hier den Flash speicher um die
> Ganzen ASCII Sachen reinzuschaufeln, da das Ganze viel Speicher braucht.
> Ich denke beim Cortex M0+ ist ist es nicht unbedingt nötig.

Ich glaube, daß Du das eigentliche Problem nicht verstanden hast.

von Jan (Gast)


Lesenswert?


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.