PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO einfache Additionsrechnung



Jörg Plewka
12.06.2012, 17:36
Hallo Gemeinde,

haben in der Schule die Aufgabe bekommen mit dem Asuro eine Addition durchzuführen. Die Aufgabenbeschreibung lautet: Über Hyperterminal eine Zahl einzugeben und sie dann mit einer fest programmierten Zahl zu Addieren. Dabei soll zunächst die eingegebene Zahl in ein integer umgewandelt werden, damit die Rechenopperation durchgeführt werden kann. Danach soll das Ergebniss wieder in ein ASCI bzw. Char zurückgewandelt werden und an Hyperterminal ausgegeben werden.

Habe schon ein Programm geschrieben, kann mir jedoch nicht erklären warum ich keine vernünftigen Ergebnisse bekomme??

Vielleicht kann jemand von euch weiterhelfen. Würde mich sehr freuen.



Quellcode:
22569

markusj
13.06.2012, 00:03
Keine Ahnung woher du dein atoi hast, aber normalerweise ist der Integer der Rückgabewert von atoi.
Laut der Dokumentation der avr-libc (http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga3a1fe00c1327bbabc76688a7 a1d73370) erwartet atoi nur einen Parameter, und das ist ein Pointer auf einen C-String, also eine Zeichenkette die am Ende mit einem Nullbyte abgeschlossen wird. SerRead gibt dir übrigens (nach meinem Wissensstand) KEINEN nullterminierten String zurück!

Ich fasse zusammen: Nichtexistente Funktion, kein C-String. Ach ja, das ganze könnte selbst dann nicht funktionieren, wenn es ein solches atoi gäbe. Du übergibst der Funktion nämlich den Wert von summand, damit kann sie aber nichts Anfangen. Sollte sie die Daten an der Speicherstelle ablegen, an der summand liegt, müsstest du einen Zeiger auf summand übergeben.

mfG
Markus

Jörg Plewka
13.06.2012, 09:14
Vielen dank für die schnelle Antwort.

Was genau muss denn jetzt im Programm geändert werden. Muss ehrlich sagen, das ich die Sache mit den Pointern nicht so recht verstanden habe.




#include "asuro.h"
#include <stdio.h>



int main(void)
{




Init();




unsigned char eingabe[3];


int summand;
int summe;
unsigned char ausgabe[3];

//Benutzereingabe
SerWrite("Taschenrechner ",15);
SerRead(eingabe,3,0);

Sleep(255);Sleep(255);Sleep(255);
Sleep(255);


//Wandeln des Eingegebenen Wertes in ein Integer
atoi(eingabe,summand,20);


//Rechnung mit den Integern
summe=(summand+100);


//Zurückwandeln des Ergebnisses in ASCII
itoa(summe,ausgabe,3);
SerWrite(ausgabe,3);





while(1);
return 0;
}

Jörg Plewka
13.06.2012, 17:12
EDIT:


Hat sich erledigt habe das Problem gefunden. Habe bei der Umsetzung des Programmes in die falsche Richtung gedacht. Trotzdem danke für den Hinweis mit dem Pointer, wäre da so selber nie drauf gekommen. Bei bedarf kann ich das Programm noch Posten.

MFG

Jörg