unsigned char code Ascii_1 C

Gast #3271469
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;
Persönliche Seite #3271509
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...
Gast #3271999
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.
#3272505
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.
Gast #3273945
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.

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