Hi,
danke für die schnelle und vor allem umfangreiche Antwort.
Zu 1:
Ja, nach der Anleitung in diesem Post habe ich begonnen. Allerdings habe ich noch nie avrdude benutzt, und da das Hochladen so nicht auf Anhieb funktioniert hat, habe ich weiterhin den nibobee-programmer benutzt, indem ich die entstehende .hex-Datei aus dem Verzeichnis target\cross hochgeladen hab.
Ich bin jedoch schon bald darüber gestolpert, dass die in der Asurolib definierten Methoden Sleep() und Msleep() nicht funktionieren. Ich hab mir das bis jetzt noch nicht näher angesehen, sondern einfach eine Schleife benutzt, um Zeit zu verschlafen, denn ich wollte ja erst mal einfach nur mit einer LED blinken. Ich gehe mal davon aus, das die Konfiguration des Timers, so wie sie für den Asuro benutzt wird, nicht für den nibobee funktioniert.
Zu 2:
Ok, werd ich machen.
Zu 3:
Meine Umsetzung von "Blinksimple" besteht aus 2 Klassen. Led.java definiert die Klassenkonstanten PORTB und DDRB, welche die Adressen der gleichnamigen Register enthalten. Außerdem gibt es 3 Klassenmethoden, weche die Initialisierung der Hardware übernehmen, die 4 LED's ein- oder ausschalten oder von einer zur nächsten weiterschalten.
Led.java:
Code:
import static haiku.vm.MemoryAccess.*;
public class Led {
public static final int DDRB=(((0x17) + 0x20));
public static final int PORTB=(((0x18) + 0x20));
public static void LedInit() {
setMemory8(DDRB,(getMemory8(DDRB)| 0b00001111));
setMemory8(PORTB, 0b00000001);
}
public static void LedSwitch(){
int portb;
portb=getMemory8(PORTB);
if (portb < 0b00001111){
setMemory8(PORTB, (portb << 1));
}
else {
setMemory8(PORTB, 0b00000001);
}
}
public static void LedSet(int leds){
if (leds > 0b00001111){
leds=0b00001111;
}
setMemory8(PORTB,leds);
}
}
Die Klasse TestLed.java enthält eine Klassenmethode, welche die Schleife für die Wartezeit durchläuft (als simpler Ersatz für Sleep(), wird später natürlich über den Timer geregelt, da gehe ich als nächstes dran). Außerdem enthält sie main(), in welcher einfach nur eine Art Lauflicht gebaut wird, indem nach der Initialisierung Led nach der anderen an- und ausgeschaltet wird (ich hätte auch statt LedSet mit zaehler einfach LedSwitch ohne Argumente verwenden können):
TestLed.java:
Code:
public class TestLed {
private static void Sleep (int msec) {
int j;
for (int i=0; i<(msec*7); i++) {
j=i;
}
}
public static void main (String args[]){
int zaehler=0;
Led.LedInit(); // 1. Led an
while (true){
while (zaehler < 4){
Led.LedSet((0b00000001 << zaehler));
zaehler++;
Sleep(1000);
}
zaehler=0;
}
}
}
Zu 4-6: Ok, das ist doch mal ein Lösungsansatz, DANKE!
Ich werde damit mal rumspielen. Sobald was funktionierendes dabei rum kommt, poste ich selbstverständlich hier. Ich hab auch schon gleich die erste Frage: Was enthält top, die du mit pushTop() auf dem Stack ablegst (also bevor ...getTimer2() aufgerufen wird?
ADC ist der nächste Schritt, das ist klar. Sobald ich geradeaus fahren kann, steht natürlich Linienverfolgung auf dem "Grundschul"plan eines Roboterprogrammierers. 
Vielen Dank nochmal für die Hilfe, bis demnächst!
Lesezeichen