Speicher auslesen, wie?

OP (Firma: schueler) #693284
Hallo zusammen!

ATmega32, CodeVisionAVR

Aaalso, habe ein mehr oder weniger großes Problem...
Ich bearteite das fertige HEX-File (nach dem compile-ieren) und zwar
füge ich noch mit ner kleinen C-Software ein paar strings hinzu.
Das heißt, mein Programm liegt zB von 0x0000 - 0x4000
dann werden noch Strings hinzugefügt, zB 0x5000-0x6000
Jetzt meine Frage, wie kann ich in meinem Programm auf die Werte bzw auf
die Speicherstellen (0x5000-0x6000) zugreifen?
Mit Zeiger?

int *p;
p=0x5000;    //Das wäre mein erster Gedanke gewesen, geht aber nicht...

Error beim compilieren...

Hat wer eine Idee wie ich auf dieses Zeugs zugreifen kann????

Ich habe zur veranschaulichung ein HEX-file dazugegeben, damit ihr wisst
wie das aussieht...

Ab 0x3000 beginnen die hinzugefügten Daten...


Danke für eure Vorschläge schon im Vorraus!

lg
rok
Angehängte Dateien:
#693286
Matthias Grimmer wrote:

> Error beim compilieren...

Wasn das fürn komischer Compiler?

Schmeißn weg, ein Compiler ohne ordentliche Fehlermeldung mit 
Zeilennummer taugt nichts.

Und dann:
Copy&Paste Fehlermeldung + Soucre-Zeile, sonst wird das nix.


Peter
#693289
Hallo,

muß Peter Dannegger zustimmen der CodeVisionAVR-Compiler hat in der 
Fehlerausgabe so seine Eigenheiten, aus diesem Grund ist der auch bei 
mir schon vor längerer Zeit von der Platte geflogen. Nimm den GCC oder 
ein kommerzielles Produkt, aber erspare dir den CodeVision-Schrott. Da 
wirst du meiner Meinung nach nicht Glücklich damit.
Falls es kommerziell sein muß, ich arbeite gerne mit dem 
Imagecraft-Compiler, ist meiner Meinung nach sehr gut das ding leider 
aber auch nicht ganz billig.

Roland
OP (Firma: schueler) #693293
hm, ich hab auch schon bemerkt, dass der codevision schrott ist...
aber ich habe leider keine alternative... firmenprojekt :(
ich muss es also wohl oder übel mit codevision schaffen...

vl helfen assambler befehle weiter...
#693309
Matthias Grimmer wrote:
> int *p;
>
>  p = (int*)0x5000;
>
> hmmm, selber fehler...
> <<'(' missing>>

Poste mal etwas mehr aus der Umgebung der Zeile. 2 Zeilen
davor, 2 Zeilen danach. Das klingt nach einem Folgefehler, zumal
ja in der (originalen) Zeile keine ( vorkommt.
OP (Firma: schueler) #693314
Karl heinz Buchegger wrote:
> Matthias Grimmer wrote:
>> int *p;
>>
>>  p = (int*)0x5000;
>>
>> hmmm, selber fehler...
>> <<'(' missing>>
>
> Poste mal etwas mehr aus der Umgebung der Zeile. 2 Zeilen
> davor, 2 Zeilen danach. Das klingt nach einem Folgefehler, zumal
> ja in der (originalen) Zeile keine ( vorkommt.



#include <mega32.h>
#include <stdio.h>
#include <string.h>
#include "types.h"
#include "delay.h" // for wait function
#include "iinchip_conf.h"
#include "w3150a.h"
#include "main.h"

#include "util.h"
#include "sockutil.h"
#include "socket.h"
#include "httpd.h"
#include "webserver.h"

//#define WEB_DEBUG


u_char* http_response;    // Pointer to HTTP response

st_http_request *http_request;  // Pointer to HTTP request




/* http service */
void proc_http(SOCKET, u_char *, int);    // processing HTTP
char ERROR_REQUEST_PAGE[]="a";
char ERROR_HTML_PAGE[]="A";

char temp[112];


uint16 *pointer;
pointer = (uint16*)0x3100;
uint8 i;

/*
Description  : processing http protocol , and excuting the followed 
fuction.
               View the configuration of EVBARM7
               Remote LEDs Control
               Remote System Reset
               Send a Mail to SMTP Server
Argument     : None.
Return Value : None.
Note         :
*/
void web_server(u_char ch)
{



... hier beginnt dann die software...

ohne den zeiger-deklarationen lässt sich der code comilieren
Gast #693354
Eine Zuweisung kann nicht auf oberster Ebene stehen. Sie kann nur in 
einer Funktion ausgeführt werden. Mach eine Initialisierung daraus, dann 
sollte es gehen:

uint16 *pointer = (uint16*)0x3100;
#693356
Matthias Grimmer wrote:
>
>
> uint16 *pointer;
> pointer = (uint16*)0x3100;
> uint8 i;

Du bist hier noch mitten in der Deklarationssektion.

pointer = (uint16*)0x3100;
ist aber eine Anweisung. Anweisungen können nur innerhalb von
Funktionen auftauchen. Was du brauchst ist eine Initialisierung!

uint16 *pointer = (uint16*)0x3100;

Auch wenn das syntaktisch sehr ähnlich aussieht, besteht doch
ein fundamentaler Unterschied zwischen einer Initialisierung
und einer Zuweisung.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.