WinAVR i symulacja w AVR Studio

Jun 02, 2005 10 Replies

witam,



chce przekopiowac zadeklarowany w programie 'string' char *ramka = "GPRMC,002310,A,5141.535,N,01735.096,E,001.0,090.0,091299,002.7,E*7C"; do innej zmienne unsigned char tmptext[100];


i wszystko kopiuje ladnie ale w pewnym momencie zamist odpowiednich znakow pojawiaja sie znaki o kodzie 10 ( symulacja w AVR Studio 4.11 ) zupelnie nie wiem co moze byc zle (choc przyznaje ze programowac w C pod AVR dopiero zaczynam) prosze wiec o pomoc, ponizej caly programik



pozdrawiam,



Tomek



------------------------------------------------------------------ #include <inttypes.h>



#include <string.h>



#include <avr/io.h>



#define F_CPU 1000000UL // 1 MHz



unsigned char tmptext[100]; unsigned char gpsline[100]; unsigned char posInRMC = 0; char *ramka = "GPRMC,002310,A,5141.535,N,01735.096,E,001.0,090.0,091299,002.7,E*7C";


void readfromGPS(char onechar) { tmptext[posInRMC] = onechar; posInRMC++; }



void test1() { unsigned char text_len = 80; for(unsigned char ia = 0; ia < text_len; ia++) { readfromGPS(ramka[ia]); } }


int main (void) { test1(); return (0); }


----------------------------- u mnie blad jest na bajtach 1A, 2C, 3B



Ten 'string' jest niezmienialny? To może go do pamięci programu przenieść? (Hint: PROGMEM, jeśli to avr-gcc)

Duże te tablice. Nie przekraczasz aby dostępnej pamięci RAM?

Pozdrawiam

dzieki za odpowiedz, ten string sluzy tylko czasowo do symulacji wejsca danych RS pamieci nie przekraczam chyba bo to wszak ATMega128

a tymczasam zamiast posuwac sie w pisaniu programu stoje w miejscu jak bedzie czas to po prostu sprobuje zaprogramowac sowja ATMege i zobaczyc czy wtedy bedzie dzialac, czy to moze wina symulatora

Tomek

tomm napisał(a):

Jak masz ATmeg'e to nie musisz się męczyć z symulatorem, tylko podłącz ja przez JTAG'a i będziesz miał to samo, tylko w żywym układzie.

chyba zaczne tak w koncu robic, tylko najpierw JTAG musze kupic

dzieki za pomoc,

poki co jednak dreczy mnie dlaczego tak sie dzieje, niby powinno dzialac ok a tutaj takie przygody i to w tak prostym fragmencie kodu

Tomek

A zajrzyj na poziom assemblera.

J.

no fakt, nie pomyslalem, w pon wiec zobacze

Tomek

To ma coś koło 68 znaków ;)

A tu każesz mu odczytać 80. Hmm. Ale czemu w środku się wali?

Pozdrawiam

wiem, wiem, ale problem wlasnie ze juz po kilkunastu bajtach zaczynaja sie problemy i sa przeklamania

Tomek

cos tu mi nadal nie gra, co prawda w asemblera nie zagladalem zbytnio, ale zrobilem prosta rzecz i w AVR studio podgladlem co jest w pamieciach

w tym celu w kodzie programu zrobilem tak:

#define FLASHDATA __attribute__ ((section (".flashdata"))) "GPRMC,002310,A,5141.535,N,01735.096,E,001.0,090.0,091299,002.7,E*7C"; static unsigned char *ramka2 = "GPRMC,002310,A,5141.535,N,01735.096,E,001.0,090.0,091299,002.7,E*7C";

i co sie okazuje, w pamieci programu wszystko jest OK, natomiast w pamiec Extended sa wlasnie niektore bajty pomylone

moglby moze ktos ten kod co dalem w pierwszym poscie wyprobowac u siebie ??

pozdrawiam,

Tomek

JUZ SIE wyjasnilo wszystko,

jak to zwykle bywa glupi blad byl, kompilowalem pod 8535 a do debug'u w AVR Studio wybralem 128

w koncu kod juz tak skrocilem, ze blad byl zbyt ewidentny i zaczelame szukac przyczyn gdzies indziej no i znalazlem

pozdrawiam,

Tomek

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required