PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : asurOS, ein Pseudo-Asuro-Betriebssystem



ElTransistor
07.12.2007, 17:34
hi!

da ja alle meine projekte an meiner mangelnden programmierfähigkeit bislang gescheitert sind, habe ich aus frust versucht etwas zu erstellen, was zwar aufwendig ist aber mich vom code her nicht überfordert..
durch die ganzen threads in denen man das hyperterminal benutzt bin ich auf die idee gekommen, mit dem asuro wie mit einem alten dos-pc kommunizieren zu können. viel sinn machts nicht \:D/ aber es hat spass gemacht das zu probieren, und das ist auch das erste aufwendigere programm das bei mir entstanden ist :)

leider ist auch das programm ziemlich unprofessionell programmiert, da bitte ich einfach etwas nachsicht zu haben..ich kann es eben noch nicht eleganter. und außerdem sprengt es den speicher vom asuro schon fast. ein paar zeilen mehr, und das flashtool will nicht mehr flashen. auch die strings haben den speicher überfordert, deswegen werden sie mit einer speziellen funktion (danke nochmal an izaseba!!) aus dem ram ferngehalten..

hier ist schonmal der code, die formatierung is etwas seltsam, ich hatte ziemlich mit dem programmers notepad zu kämpfen, und komm eigentlich immernoch nich so damit klar..



/************************************************** ******************************


asurOS, ein Pseudo-ASURO-Betriebssystem
***************************************


************************************************** ******************************/


#include "asuro.h"
#include "avr/pgmspace.h"

char data1[1], data2[1], data3[1], data4[1], data5[1], data6[1], data7[1];
char count = 0;
unsigned char ledColor, ledStatus, ledBackL, ledBackR, speed = 100;
int battery, countDis = 0, countAngle = 0;


void keyboardInput(void) {
//Tastatureingabe abwarten, bis ENTER gedrueckt wird.

SerRead(data1,1,0);
if(data1[0] != 0x0d) {
SerRead(data2,1,0);
if(data2[0] != 0x0d) {
SerRead(data3,1,0);
if(data3[0] != 0x0d) {
SerRead(data4,1,0);
if(data4[0] != 0x0d) {
SerRead(data5,1,0);
if(data5[0] != 0x0d) {
SerRead(data6,1,0);
if(data6[0] != 0x0d) {
SerRead(data7,1,0);
}
}
}
}
}
}
}

//Haelt die Strings der Ausgaben im Flash, sonst wird es dem Asuro zu viel;)
//THX AN izaseba!!!
void pushFlash(const char *string){
char sign;
while((sign = pgm_read_byte(string))) {
UartPutc(sign);
string++;
}
}

//Loescht die Eingabevariablen

void clear(void) {
data1[0] = 0; data2[0] = 0; data3[0] = 0; data4[0] = 0; data5[0] = 0; data6[0] = 0; data7[0] = 0;
}

//Gibt Fehlermeldung aus, falls Befehl unbekannt ist, oder zu viele Uebertragungsfehler ankommen

void irError(void) {
pushFlash(PSTR("\r\nUnknown Command!\r\n"));
count++;
if (count >= 6) {
pushFlash(PSTR("\r\nIR connection error!\r\n\r\nCheck your IR tranceiver\r\n\r\n"));
count = 0;
}
}

//Listet alle verfuegbaren Befehle auf

void commandList(void) {
pushFlash(PSTR("\r\n\r\nAwaible commands:\r\n\r\n"));
pushFlash(PSTR("\r\ncount Starts a countdown\r\n"));
pushFlash(PSTR("\r\nhelp List of all commands\r\n"));
pushFlash(PSTR("\r\nmove Change to move mode, for drive and turn\r\n"));
pushFlash(PSTR("\r\nreset resets all settings to default\r\n"));
pushFlash(PSTR("\r\nset Change to settings mode, access to LED and speed parameters\r\n"));
pushFlash(PSTR("\r\nstatus Shows actual settings and mileage\r\n"));

}

//Aendert die LED Farben mit Rueckgabewert
void ledStatusChanger(unsigned char color, unsigned char status, unsigned char left, unsigned char right) {
StatusLED(color);
FrontLED(status);
BackLED(left, right);
ledStatus = status;
ledColor = color;
ledBackL = left;
ledBackR = right;
}

//Aendert die LED Farben im Modus SET/LED
void ledSetMode(void) {
unsigned char stat[4];
pushFlash(PSTR("\r\nType new colors\r\n"));
pushFlash(PSTR("\r\nStatus LED: 0 = OFF, 1 = green, 2 = red, 3 = yellow\r\nFront LED: 0 = OFF, 1 = ON\r\n"));
pushFlash(PSTR("Back LEDs: 0 = OFF, 1 = left 2 = right 3 = both ON\r\n"));
pushFlash(PSTR("\r\ntype all parameters at once, without *space*!\r\n\r\nASURO\\set\\led>"));
SerRead(stat,4,0);
if(stat[3] == 0x0d) {
if(stat[0] == '0') {
StatusLED(OFF);
ledColor = OFF;
}
else if(stat[0] == '1') {
StatusLED(GREEN);
ledColor = GREEN;
}
else if(stat[0] == '2') {
StatusLED(RED);
ledColor = RED;
}
else if(stat[0] == '3') {
StatusLED(YELLOW);
ledColor = YELLOW;
}
else {
irError();
ledSetMode();
}
if(stat[1] == '0') {
FrontLED(OFF);
ledStatus = OFF;
}
else if(stat[1] == '1') {
FrontLED(ON);
ledStatus = ON;
}
else {
irError();
ledSetMode();
}
if(stat[2] == '0') {
BackLED(OFF,OFF);
ledBackL = OFF;
ledBackR = OFF;
}
else if(stat[2] == '1') {
BackLED(ON,OFF);
ledBackL = ON;
ledBackR = OFF;
}
else if(stat[2] == '2') {
BackLED(OFF, ON);
ledBackL = OFF;
ledBackR = ON;
}
else if(stat[2] == '3') {
BackLED(ON,ON);
ledBackL = ON;
ledBackR = ON;
}
}
else {
irError();
ledSetMode();
}
pushFlash(PSTR("\r\nSettings changed!\r\nExiting set mode\r\n\r\n"));
}

//Aendert die Geschwindigkeit im Modus SET/SPEED
void speedSetMode(void) {
pushFlash(PSTR("\r\nCurrent speed value is "));
PrintInt(speed);
pushFlash(PSTR(".\r\nType new speed value (000 - 255)\r\nASURO\\set\\speed>"));
keyboardInput();
speed = ((data1[0] - 48) * 100) + ((data2[0] - 48) * 10) + (data3[0] - 48);
pushFlash(PSTR("\r\nSettings changed!\r\nExiting set mode\r\n\r\n"));
}

//Gibt die Farben der LEDs zurueck
void ledCheck(void) {
pushFlash(PSTR("\r\n\r\bLED status:\r\n"));

if(ledColor == YELLOW) {
pushFlash(PSTR("Status LED is yellow\r\n"));
}
else if(ledColor == OFF) {
pushFlash(PSTR("Status LED is off\r\n"));
}
else if(ledColor == GREEN) {
pushFlash(PSTR("Status LED is green\r\n"));
}
else if(ledColor == RED) {
pushFlash(PSTR("Status LED is red\r\n"));
}
if(ledStatus == ON) {
pushFlash(PSTR("Front LED is on\r\n"));
}
else {
pushFlash(PSTR("Front LED is off\r\n"));
}
if(ledBackL == ON) {
pushFlash(PSTR("Left back LED is on\r\n"));
}
else {
pushFlash(PSTR("Left back LED is off\r\n"));
}
if(ledBackR == ON) {
pushFlash(PSTR("Right back LED is on\r\n"));
}
else {
pushFlash(PSTR("Right back LED is off\r\n"));
}
}

//Gibt den Status der Batterie zurueck
void batteryCheck(void) {
battery = Battery() * 0.0055;
pushFlash(PSTR("\r\nBattery status: "));
PrintInt(battery);
pushFlash(PSTR(" Volt\r\n"));
}

//Gibt die Laufzeit zurueck
void timeCheck(void) {
pushFlash(PSTR("\r\nSystem time: "));
PrintInt(Gettime());
pushFlash(PSTR(" ms\r\n"));
}

//Gibt die aktuell gesetzte Geschwindigkeit zurueck
void speedCheck(void) {
pushFlash(PSTR("\r\nSpeed value: "));
PrintInt(speed);
pushFlash(PSTR("\r\n"));
}

//Gibt die gefahrene Strecke zurueck
void disCheck(void) {
pushFlash(PSTR("\r\nMileage: "));
PrintInt(countDis);
pushFlash(PSTR(" mm\r\nTurned: "));
PrintInt(countAngle);
pushFlash(PSTR(" degrees\r\n\r\n"));
}

//Wechselt in den SET-Modus
void setMode(void) {

pushFlash(PSTR("\r\nEntering Set mode\r\nType led to change LED colors or speed to change the speed value\r\nASURO\\set>"));
keyboardInput();
//LED farbe aendern
if(data1[0] == 'l' && data2[0] == 'e' && data3[0] == 'd' && data4[0] == 0x0d) {
ledSetMode();
}
else if(data1[0] == 's' && data2[0] == 'p'&& data3[0] == 'e' && data4[0] == 'e' && data5[0] == 'd') {
speedSetMode();
}
else {
irError();
}
}

//Wechselt in den MOVE-Modus
void moveMode(void) {
int distance = 0;
int angle = 0;
pushFlash(PSTR("\r\nEntering move mode\r\n"));
pushFlash(PSTR("\r\nType path for path mode or turn for turning mode\r\n"));
pushFlash(PSTR("ASURO\\move>"));
keyboardInput();

//Teilstueck fuer Distanz
if(data1[0] == 'p' && data2[0] == 'a' && data3[0] == 't' && data4[0] == 'h' && data5[0] == 0x0d) {
pushFlash(PSTR("\r\nEntering path mode\r\n"));
pushFlash(PSTR("Type distance in mm between 0 and 1000. Negative value to drive backward.\r\nExample: -0100 for 100mm backward\r\n"));
pushFlash(PSTR("ASURO\\move\\path>"));
keyboardInput();
if(data1[0] != 0x2d) {
distance = (((data1[0] - 48) * 1000) + ((data2[0] - 48) * 100) + ((data3[0] - 48) * 10) + (data4[0] - 48));
countDis += distance;
}
else if(data1[0] == 0x2d) {
distance = (((data2[0] - 48) * 1000) + ((data3[0] - 48) * 100) + ((data4[0] - 48) * 10) + (data5[0] - 48));
countDis += distance;
distance = -distance;
}
else {
irError();
moveMode();
}
pushFlash(PSTR("\r\n\r\nAsuro will move "));
PrintInt(distance);
pushFlash(PSTR(" mm.\r\n\r\nProceed? (Y/N)"));
clear();
SerRead(data1,1,0);
if(data1[0] == 'y') {
EncoderInit();
Go(distance,speed);
pushFlash(PSTR("\r\n"));
}
else if(data1[0] == 'n') {
if(distance >= 0) {
countDis -= distance;
}
else {
countDis += distance;
}
pushFlash(PSTR("\r\n"));
}
else {
pushFlash(PSTR("\r\n"));
irError();
moveMode();
}

}

//Teilstueck fuer Winkel
else if(data1[0] == 't' && data2[0] == 'u' && data3[0] == 'r' && data4[0] == 'n' && data5[0] == 0x0d) {
pushFlash(PSTR("\r\nEntering turning mode\r\n"));
pushFlash(PSTR("\r\nType angle in degrees between 0 and 360. Negative value to turn left.\r\nExample: -090 for left\r\n"));
pushFlash(PSTR("ASURO\\move\\turn>"));
keyboardInput();
if(data1[0] != 0x2d) {
angle = (((data1[0] - 48) * 100) + ((data2[0] - 48) * 10) + (data3[0] - 48));
countAngle += angle;
}
else if(data1[0] == 0x2d) {
angle = (((data2[0] - 48) * 100) + ((data3[0] - 48) * 10) + (data4[0] - 48));
countAngle += angle;
angle = -angle;
}
else {
irError();
moveMode();
}
pushFlash(PSTR("\r\n\r\nAsuro will turn "));
PrintInt(angle);
pushFlash(PSTR(" degrees.\r\n\r\nProceed? (Y/N)"));
clear();
SerRead(data1,1,0);
if(data1[0] == 'y') {
EncoderInit();
Turn(angle,speed);
pushFlash(PSTR("\r\n"));
}
else if(data1[0] == 'n') {
if(angle >= 0) {
countAngle -= angle;
}
else {
countAngle += angle;
}
pushFlash(PSTR("\r\n"));
}
else {
pushFlash(PSTR("\r\n"));
irError();
moveMode();
}
}
else {
irError();
moveMode();
}
}

//Setzt alle Einstellungen zurueck
void reset(void) {

pushFlash(PSTR("\r\nReset all settings? (Y/N)"));
SerRead(data1,1,0);
if(data1[0] == 'y') {
ledStatusChanger(GREEN, OFF, OFF, OFF);
speed = 100;
countDis = 0;
countAngle = 0;
pushFlash(PSTR("\r\n"));
}
else if(data1[0] == 'n') {
pushFlash(PSTR("\r\n"));
}
else {
irError();
}
}

//Zaehlt einen Countdown herunter
void countDown() {
unsigned int time = 0;

pushFlash(PSTR("\r\nType countdown duration. 1 to 65535 seconds. Example: 00008 for 8 seconds\r\nASURO\\countdown>"));
keyboardInput();
time = (((data1[0] - 48) * 10000) + ((data2[0] - 48) * 1000) + ((data3[0] - 48) * 100) + (data4[0] - 48) * 10) + (data5[0] - 48);
while(time > 0) {
pushFlash(PSTR("\r\n"));
PrintInt(time);
Msleep(1000);
time--;
}
pushFlash(PSTR("\r\n0\r\n"));
}

/************************************************** ***********************************************
HAUPTPROGRAMM
*************
************************************************** ***********************************************/

int main(void) {

Init();
ledStatusChanger(GREEN, OFF, OFF, OFF);
pushFlash(PSTR("\r\nasurOS System verion 1.0.1\r\n\r\nASURO is ready\r\nAwaiting command\r\n\r\n"));

do {

pushFlash(PSTR("ASURO>"));
keyboardInput();
//Abfrage der Befehle und Starten der entsprechenden Funktion
//Modus "move"
if(data1[0] == 'm' && data2[0] == 'o' && data3[0] == 'v' && data4[0] == 'e' && data5[0] == 0x0d) {
moveMode();
clear();

}
//Modus "help"
else if(data1[0] == 'h' && data2[0] == 'e' && data3[0] == 'l' && data4[0] == 'p' && data5[0] == 0x0d) {
commandList();
clear();

}
//Modus "status"
else if(data1[0] == 's' && data2[0] == 't' && data3[0] == 'a' && data4[0] == 't' && data5[0] == 'u' && data6[0] == 's' && data7[0] == 0x0d) {
ledCheck();
batteryCheck();
speedCheck();
timeCheck();
disCheck();
clear();

}
//Modus "set"
else if(data1[0] == 's' && data2[0] == 'e' && data3[0] == 't' && data4[0] == 0x0d) {
setMode();
clear();
}
//Modus "reset"
else if(data1[0] == 'r' && data2[0] == 'e' && data3[0] == 's' && data4[0] == 'e' && data5[0] == 't' && data6[0] == 0x0d) {
reset();
clear();
}
//Modus "Countdown"
else if(data1[0] == 'c' && data2[0] == 'o' && data3[0] == 'u' && data4[0] == 'n' && data5[0] == 't' && data6[0] == 0x0d) {
countDown();
clear();
}
//Wenn man was anderes eingibt, Fehlermeldung
else {
irError();
clear();

}
}
while(1);
return 0;
}


die bedienung ist auch ganz einfach: flasht das programm, startet in windows hyperterminal, dann startet asuro. für eine übersicht aller befehle, tippt help ein, der rest ist selbsterklärend.

wünsche euch schonmal viel spass beim ausprobieren :)

julian

damaltor
07.12.2007, 21:01
schöne idee. wenn du dieses programm noch etwas einkürzt, und dann wieder erweiterst, könnte man dieses programm auch dazu gebrauchen, um einzelne funktionen des asuro zu testen, beispielsweise aktuelle odo-werte auszugeben oder ähnliches.

schöne idee!

Sternthaler
09.12.2007, 02:33
Hallo ElTransistor,
klasse gemacht, dafür dass du meinst mit "mangelnden programmierfähigkeit" zu scheitern.

Dein Programm erinnert mich ein bisschen an robo.fr's ASURO programmieren mit AB++ (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=34936).
Nur hast du ja einen total eigenen Ansatz für deine Lösung gewählt.
Wenn das so mit dir weitergeht, dann ist ja noch großes zu erwarten.

Gruß Sternthaler

ElTransistor
09.12.2007, 19:00
hi, danke erstmal :)

soviel lob hätte ich jetz nun auch nich erwartet. vom code her ist das ja eigentlich nix besonderes, ich hab ja nur schon vorhandene sachen verwendet. woran ich immer scheitere sind irgendwelche algorithmen sei es zum geradeausfahren oder so. und bitverschiebungen hab ich auch noch nicht verstanden... das hier sind ja bloß ein paar schleifen und viel text ;)

um ehrlich zu sein habe ich mit dem asuro nicht mehr viel vor, ich möchte mir einen fahrbaren untersatz bauen der die unzulänglichkeiten des asuros nicht hat (bessere tasten bessere geradeausfahrfähigkeit). dass man das alles mit geschicktem programmieren erreichen kann ist mir klar, darum schätze ich mich ja auch als unfähig ein :)

damaltor
09.12.2007, 19:15
hrhr
versuch doch mal dein wissen zu erweitern... man kann viel machen mit dem asuro!

Sternthaler
10.12.2007, 20:10
Da schließe ich mich damaltor auf alle Fälle an.
Es ist ja nicht falsch, oder frevelhaft, wenn du Code benutzt der schon da ist. Was anderes machst du ja auch nicht, wenn du die Funktionen aus der LIB benutzt.
Es kommt ja als erstes mal darauf an, dass man mit dem was man kennt, bzw. zu dem es eine Doku gibt, irgendeine Aufgabe zu lösen.
Das meinte ich mit meinem Lob.
Du hast dich mit Hilfe von izaseba unheimlich schlau gemacht um die Texte im Flash unterzubringen. So viel Ehrgeiz hat schon lange nicht jeder. Deine Lösung zum warten auf ein [Enter] ist zwar tatsächlich extravagant, aber funktionsfähig. Die hast du selber entwickelt.
Bleib bloß am Ball. Mit dem Asuro hast du ein sehr überschaubares System vor dir, zu dem es hier (und auch in anderen Foren) sehr viel kompetente Unterstützung gibt. Das findest du nicht so schnell, wenn du einen Eigenbau startest. Und zum Üben, um C zu lernen ist hier alles vorhanden.

Gruß Sternthaler

ElTransistor
11.12.2007, 17:10
hi, danke danke :) Also wenn ich sehe was die anderen hier vollbringen, ist trotzdem meine leistung nicht ganz so riesig. aber da die sache mit meiner eigenkonstruktion noch etwas auf sich warten lassen wird, bleibe ich euch auch erhalten und nerve euch mit blöden fragen wenn etwas beim asuro nich klappt (die zeit der innovativen ideen scheint beim asuro ja langsam abzulaufen da schon sogut wie alles mit ihm gemacht wurde) :)

damaltor
11.12.2007, 19:00
ooh da täusch dich mal nicht, die möglichkeiten sind sicher noch nicht ausgeschöpft...

und fragen kannst du immer, dafür ist das forum ja da =)

Sternthaler
12.12.2007, 22:52
... da schon sogut wie alles mit ihm gemacht wurde) :)
Wie damaltor schon schreibt: Das kann nicht sein, da es ja an dir liegt, ob es noch weiteres gibt. :idea:

Das letzte Highlight kam gerade von M1.R rein. So ganz unerwartet in einem Thread, der eigentlich nur Neues brachte, aber dann gab es noch mehr Neues darin. Um hier nur deine Neugierde zu wecken, nichts dazu was ich eigentlich meine. Weiteres solltest du unter Was will uns der ASURO eigentlich sagen ? (https://www.roboternetz.de/phpBB2/viewtopic.php?p=334425) selber erkunden.

Also schön am Ball bleiben bitte.

und fragen kannst du immer, dafür ist das forum ja da
Und Antworten wird es auf alle Fälle geben.

Gruß Sternthaler

ts230
01.02.2008, 17:30
Ich habe es mir auch draufgeflasht.
Doch ein Problem:bei der lezten Page von euerm fertigrn Das Hexfile kommt v.v.v.v.v.v.v.v.v.v.
Ich habe die Meldungen auch auf Deutsch übersetzt.Ich habe die Datei angehängt.

ElTransistor
02.02.2008, 12:58
hi! na da es mein programm war will ich dir mal versuchen zu helfen..

laut asuro manual steht das v.v.v. etc für verify error

d.h. dein atmega hat falsche daten in das eeprom geschrieben. und dort steht dass es passieren kann wenn man mehr als 10000 mal geflashed hat..

ts230
02.02.2008, 16:08
Ich habe es nochmal probirt,aber es funkt manchmal manchmal nicht.Weil mein PC gestern sehr beschäftigt war beim Flashen kann das davon kommen.Mein ASURO habe ich erst Dienstag bekommen und erst 30X geflasht.Manchmal kommt nur Unkown Command ohne dass ich etwas eingebe.Welche Asuro-Lib brauche ich für das Programm?Aber das Projekt ist wirklich gut.Wie findet ihr die übersetzte Version?

ElTransistor
03.02.2008, 12:52
könnte es sein, dass du deinen IR transceiver nicht genau genug eingestellt hast oder er von irgendetwas gestört wird..?
ich hab die lib 2.7 benutzt, wenn du das .hex file nimmst müsste es ja egal sein welche du installiert hast

inka
03.02.2008, 17:31
hi allerseits,
habe versucht das programm zu kompilieren, folgende fehlermeldung des avr-studios kenne ich noch nicht:
-------------------
c:\programme\asuro\win_avr\bin\..\lib\gcc\avr\4.1. 2\..\..\..\..\avr\bin\ld.exe: region text is full (ir_hyperterminal.elf section .text)
-------------------

habe gestern das avr-studio von version 4.12 auf 4.13 upgedated. hat das damit zu tun?

danke erstmal...

M1.R
03.02.2008, 18:44
hi allerseits,
habe versucht das programm zu kompilieren, folgende fehlermeldung des avr-studios kenne ich noch nicht:
-------------------
c:\programme\asuro\win_avr\bin\..\lib\gcc\avr\4.1. 2\..\..\..\..\avr\bin\ld.exe: region text is full (ir_hyperterminal.elf section .text)
-------------------

habe gestern das avr-studio von version 4.12 auf 4.13 upgedated. hat das damit zu tun?

danke erstmal...
Hallo inka,

den Fehler im AVR-Studio 4.13 hatte ich auch - mit Programmers Notepad ließ sich das Programm kompilieren.

Gruss
M.

inka
03.02.2008, 18:48
hallo M1.R im schönen Freiburg...

schön, dass sich das durch die verwendung von PN umgehen liess :-), aber was kann man denn im avr-studio tun?

damaltor
03.02.2008, 19:06
also v.v.v.v.v. bedeutet eigentlich dass der prozessor defekt ist, da er die daten korrekt empfangen hat, aber nicht korrekt in den flash-speicher (nicht en eeprom) schreiben konnte. im allgemeinen ist der prozessor dann hin. sollte das problem öfter auftreten, schreib mal ne mail an
info@arexx.nl (am besten auf englisch)
und man kann dir sicher weiterhelfen.

ts230
04.02.2008, 12:02
Ich glaube das Programm ist einfach zu groß.Ich habe das v.v.v.v. jetzt ind den griff bekommen.Es kommt nur bei sehr großen Programmen.

damaltor
07.02.2008, 19:38
ann ist vermutlich der hintere speicherbereich des prozessors beschädigt. ich würde das problem nicht so auf die leichte schulter nehmen, v.v.v. ist ein schwerwiegender technischer fehler des chips.

Sternthaler
08.02.2008, 20:13
Hallo zusammen,
ich finde zwar nicht wo inka das geschrieben haben soll, aber es enthält die Lösung:


hi allerseits,
habe versucht das programm zu kompilieren, folgende fehlermeldung des avr-studios kenne ich noch nicht:
-------------------
c:\programme\asuro\win_avr\bin\..\lib\gcc\avr\4.1. 2\..\..\..\..\avr\bin\ld.exe: region text is full (ir_hyperterminal.elf section .text)
-------------------

habe gestern das avr-studio von version 4.12 auf 4.13 upgedated. hat das damit zu tun?

danke erstmal...
Hallo inka,

den Fehler im AVR-Studio 4.13 hatte ich auch - mit Programmers Notepad ließ sich das Programm kompilieren.

Gruss
M.

Das oben angegebene region text is full sagt schon wärend des compilierens, dass das Ergebniss nicht in den AVR passen wird.
Ich bin mir aber hier nicht sicher, ob der Compiler von 8 kByte oder von den uns zur Verfügung stehenden 7 kByte ausgeht. Auf alle Fälle ist es jedenfalls für 8 kByte zu viel.

Gruß Sternthaler

Lunarman
08.02.2008, 20:26
Was letztendlich bedeutet dass der letzte Teil des Programmes zwar vielleicht abgeschickt wird, aber nich ins Flash geschrieben wird und somit bei der Verifizierung natürlich fehlt ;) Frage is jetz wieso es sich beim einem flashen lässt und beim andern nich o.O

damaltor
09.02.2008, 16:01
also wenn man vom code ausgeht, der bei jedem selbst kompiliert wird, könnte man von compilereinstellungen ausgehen. gerade doe optimierung sollte natürlich gleich sein. bei mir steht im makefile optimierung "s", was für kleine dateien steht.

Sternthaler
11.02.2008, 02:26
Jepp, "s"mal is beautiful.

Ich habe mal gegrübelt über die 7 oder 8 kByte.
Ich bin relativ sicher, dass es sich eigentlich nur um 8 kByte handeln kann, da der Compiler ja nur die Info bekommt, dass er Code für einen Atmega8 erzeugen soll. Der Compiler kann also nichts darüber wissen, dass wir im Asuro schon 1 kByte 'Verlust' haben.

Wenn dann aber beim Compilieren mit bzw. ohne "s"-Optimierung ein Unterschied von mindestens diesem einen Kilobyte herraus kommt, heißt das: Der Optimierer muß sagenhaft gut sein.

Gruß Sternthaler

damaltor
12.02.2008, 23:15
du kannst mal optimierung "1" einstellen, dann wird schneller (nicht merklich.. denke ich), aber größer. dann kann das programm durchaus doppelte größe erreichen, merke ich gerade bei einem andren projekt...