RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO 2 Nibo2: Assembler Code in C einbinden

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Banner

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7426 private projects
  • 385 public projects
  • 16180353 lines compiled
  • 58212 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1
  • 2

THEMA: Nibo2: Assembler Code in C einbinden

Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1283

  • Arcanix
  • Arcanixs Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 96
Hallo zusammen,

bin neu hier und habe seit ca. 1 Monat einen kleinen Nibo2. Ich habe ihn mir gekauft um C zu erlernen, habe es aber nicht übersehen können dass man den Nibo2 auch in Assembler programmieren kann. Nun habe ich versucht zu recherchieren wie man Assembler Code in C integrieren kann und habe nichts richtiges gefunden (Vielleicht habe ich aber einfach nur falsch gesucht). Nach längerem herumprobieren habe ich eine Lösung gefunden. Ich benutze AVR Studio 4 mit dem normalem avr-gcc Compiler. So sieht es dann aus:

Hiermit kann man nun die 2 Frontscheinwerfer anschalten:

int main()
{
//hier kann C Code stehen
asm
(
"ldi R16,0b11111111" "\n\t"
"out 0x17,R16" "\n\t"
"ldi R17,0b00100000" "\n\t"
"out 0x18,R17" "\n\t"
);
//hier kann C Code stehen
}

Und so sieht es aus wenn man den Inhalt (zumindest Dezimal) von PORTB auf dem Nibo2 Display anzeigen lassen will:

#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <stdio.h>
#include <avr/io.h>
#include <stdint.h>

int main()
{

display_init();
gfx_init();

asm
(
"ldi R16,0b11111111" "\n\t"
"out 0x17,R16" "\n\t"
"ldi R17,0b11111111" "\n\t"
"out 0x18,R17" "\n\t"
);
int port_b =PORTB;
char text[3]="---";
sprintf(text, "%d", port_b);
gfx_move(0, 20);
gfx_print_text(text);
return 0;
}

Der Code ist sicher nicht der allerbeste da ich noch blutiger Anfänger bin und entschuldigt bitte wenn ich ab und zu nicht die richtigen Begriffe verwende aber er funktioniert schon mal. Wenn ich das dann richtig sehe kann mann damit den Nibo2 dann als Experimentierboard benutzen um Assembler zu lernen.

Hier noch eine URL der Portbelegung: Portbelegung ATMega 128 Nibo2

Wenn interesse an weitern Projekten besteht, schreibt es mir einfach. Ich werde mich in die Materie sicherlich weiter einarbeiten. Für Fragen oder Anregungen habe ich natürlich ein offenes Ohr.

Grüße, Arcanix
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1294

  • Arcanix
  • Arcanixs Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 96
Hallo zusammen,

habe mir mal die Leds angeschaut une ein Programm geschrieben bei dem die Leds nacheinander rundum blinken:


int main()
{
asm
(
//Leds aktivieren PORTB
"ldi R16,0b10000000" "\n\t"
"out 0x17,R16" "\n\t" //DDRB
"out 0x18,R16" "\n\t" //PORTB

//PORTC DDRC als Augang schalten
"ldi R16,0b11111111" "\n\t"
"out 0x14,R16" "\n\t"

//Rundlauf Start
"Start:" "\n\t"
"ldi R20,0b00000001" "\n\t"

"Loop:" "\n\t"
"out 0x15,R20" "\n\t"

// ob00000010 verschachtelte Verzögerungsschleifen
"ldi R22,0b11111111" "\n\t"
"schleife2:" "\n\t"
"ldi R21, 0b11111111" "\n\t"
"schleife1:" "\n\t"
"dec R21" "\n\t"
"brne schleife1" "\n\t"
"dec R22" "\n\t"
"brne schleife2" "\n\t"
// Verzögerungsschleifen Ende


"LSL R20" "\n\t" //Bit eine Stelle nach links schieben, dadurch nächstes Led an
"BRCS Start" "\n\t" // Wenn Carry-Flag aktiviert, dann von vorne los
"rjmp Loop" "\n\t"
);
}

Ich muss sagen Assembler macht Spaß und ganz schwer sind nur die ersten paar Zeilen. Was Nervt ist dass man alles in "" schreiben muss und natürlich noch das "\n\t" jedesmal hintendran. Dadurch hält man sich jedoch die Möglichkeit offen C Befehle zu integrieren.
Wenn hierzu aber einer eine andere Möglichkeit kennt, könnte er mich glücklich machen.

Es besteht natürlich auch die Möglichkeit alles komplett in Assembler zu schriben aber da traue ich mich nicht ran. Ich bin der Meinung dass ich gelesen habe (vielleicht sogar hier im Forum?) dass man sich dabei selber aussperren, und keine Programme mehr auf den Nibo2 laden kann. Wenn sich damit jemand auskennt könnte er mir sagen wie das geht.

Grüße, Arcanix
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1295

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Hallo Arcanix,

Du kannst Deine Projekte auch "publishen" und den Link hier posten... ;)

Durch die Verwendung von Assembler kannst Du Dich nicht aussperren, das ist nur durch Setzen der falschen Fuse-Bits möglich....
Letzte Änderung: 11 Jahre 10 Monate her von workwind.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1296

  • Egon
  • Egons Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 316
Hi Arcanix

In assembler schreiben - da biste zwar ganz nah am Prozessor dran (und dies ist für zeitkritische Operationen die erste Wahl natürlich), man muß aber die Befehle schon ganz gut kennen (hat natürlich den Vorteil, dass man sich mit dem Prozessor sehr intensiv beschäftigen muss)...und ich denke, die meisten NIBO2 User, die hier unterwegs sind, werden wohl lieber mit einer Hochsprache (in dem Fall C) vorlieb nehmen - ich auch btw

Egon
lokalisieren, eliminieren, Vollzug melden
Letzte Änderung: 11 Jahre 10 Monate her von Egon.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1297

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Wer seinen Compiler wirklich verstehen möchte, muss Assembler lernen.... ;)
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Nibo2: Assembler Code in C einbinden 11 Jahre 10 Monate her #1299

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
....oder so schreiben, dass einen der Compiler versteht.. :unsure:

Was sind zeitkritische Operationen beim Nibo2.. :huh:
Ich finde, dass die Kunst darin besteht, den Prozessor nicht Nichts tun zu lassen..
Kooperatives Multitasking anstatt delay_us? delay_ms?

Mann sollte die Assemblerbefehle auch kennen (oder wissen, wo sie beschrieben sind); wenn etwas nicht funktioniert, schaue ich auch in der lss-Datei nach, was der Compiler da übersetzt (oder wegoptimiert) hat.
Aber die ganzen Mnemonics selber eingeben .. da bin ich auch einer der meisten NIBO2 User.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
  • 2
Ladezeit der Seite: 0.048 Sekunden

Werbung