PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Intrinsische Funktionen



schnitzelbot
03.08.2014, 23:09
Salût zusammen.
Bin jetzt seit zwei Wochen stolzer Besitzer des RP6 und komm soweit auch ganz gut mit den Beispielprogrammen zurande...
Was ich aber leider bisher nicht finden konnte ist eine Übersicht der intrinsischen Funktionen (z.B. "DIST_MM").
Wäre super, wenn mir da jemand weiterhelfen könnte!

Danke schonmal

RolfD
04.08.2014, 17:53
Die liegen in den RP6 Libs und werden als .c/.h mit ins Projekt includiert bzw. dazu compiliert und gelinkt.
Such mal nach RP6RobotBaseLib.c / RP6RobotBaseLib.h bzw. für uart RP6uart.c / RP6uart.h und ähnliche..
Müsste auf der beiliegenden CD (veraltet) oder bei Arexx im Web zu finden sein: http://www.arexx.com/rp6/downloads/RP6Examples_20120725f.zip
Die benötigten Dateien liegen bei den Examples als separater Ordner RP6Lib.
Gruß

schnitzelbot
04.08.2014, 21:02
danke für deine Antwort. Das dachte ich zunächst auch, aber in den Libs werden nur zusätzliche, aber keine intrinsischen Funktionen definiert. Die heißen bei avr wohl Makros... aber leider habe ich auch in der "avr-libc-user-manual-1.6.7" nichts gefunden...
Normalerweise gibt es eine compilerabhängige Referneces-Datei, in der diese Funktionen definiert sind - die suche ich...

RolfD
04.08.2014, 21:53
Genau diese habe ich auch beschrieben.
Siehe z.B. da...


/* ************************************************** **************************
* _______________________
* \| RP6 ROBOT SYSTEM |/
* \_-_-_-_-_-_-_-_-_-_/ >>> BASE CONTROLLER
* ----------------------------------------------------------------------------
* ------------------- [c]2006 / 2007 - AREXX ENGINEERING ---------------------
* -------------------------- http://www.arexx.com/ ---------------------------
* ************************************************** **************************
* File: RP6Config.h
* Version: 1.2
* Target: RP6 Base - ATMEGA32 @8.00MHz
* Author(s): Dominik S. Herwald
* ************************************************** **************************
* Description:
*
* This file contains the calibration values for Encoder resolution and
* the DIST_MM macros.
* You need to do some experiments to get good encoder resolution values!
*
* ************************************************** **************************
* CHANGELOG AND LICENSING INFORMATION CAN BE FOUND AT THE END OF THIS FILE!
* ************************************************** **************************
*/


#ifndef RP6CONFIG_H
#define RP6CONFIG_H


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




/**
* You can change the Encoder resolution setting of 0.25mm to another
* value if you measured different resolution for your encoders.
*
*/
//#define ENCODER_RESOLUTION 0.23
//#define ENCODER_RESOLUTION 0.235
#define ENCODER_RESOLUTION 0.24
//#define ENCODER_RESOLUTION 0.25




#define DIST_MM(__DST__) (uint16_t)(__DST__/ENCODER_RESOLUTION)
#define DIST_CM(__DST__) (uint16_t)(__DST__/(ENCODER_RESOLUTION/10))
#define DIST_M(__DST__) (uint16_t)(__DST__/(ENCODER_RESOLUTION/1000))


Du verwechselst scheinbar die AVRLIBs mit den RP6Libs, welche letztere zum Lieferumfang des Bot gehören.
Gruß

Dirk
05.08.2014, 15:54
Hi schnitzelbot,

diese Dateien (http://rn-wissen.de/wiki/index.php/RP6_-_Programmierung#Library) gehören zur RP6 Library.
Darin findest du alle Definitionen für den RP6, die nicht in AVR-GCC enthalten sind.

schnitzelbot
06.08.2014, 21:41
hallo dirk und rolf,
danke für eure tipps. die meisten dieser dateien habe ich auch schon durchforstet. was mir fehlt ist eine übersicht, welche funktionen oder variablen einem vom hersteller aus zur verfügung stehen. z.b. wir in "RP6RobotBaseLib.c" unter // Distance

volatile uint16_t mleft_dist;

aufgeführt - man muss sich aber erst alles mühsam suchen.
von anderen compilern, z.b. INTEL für C++ und FORTRAN kenne ich es, dass es eine Beschreibung der intrinsischen Funktionen gibt. Dann weiß man von vorneherein, was man sich selbst programmieren muss und was fertig genutzt werden kann - beim RP6 z.b. distanzen abfragen, beim INTEL-Compiler funktionen wie MAX oder matrizenmultiplikation.
aber ich denke, ich werde mich wohl so durchkämpfen ;-)

RolfD
06.08.2014, 22:02
Ich verstehe dein Problem nicht so ganz.
Funktionen werden üblicher Weise in .c Dateien geschrieben und hinzu gelinkt.

Definitionen von Funktionen sowie Macros werden allgemein in .h Dateien erstellt und dienen dem Compiler zur Anordnung vom Call/Var Stack. Beispiel:

void writeChar(char ch); < -- das ist eine Funktionsdefinition und das:

void writeChar(char ch)
{
while (!(UCSRA & (1<<UDRE)));
UDR = (uint8_t)ch;
}

ist die eigentliche Funktion, dementsprechend steht erstes in der RP6uart.h und zweites in der RP6uart.c

Das ist aber keine Eigenheit der RP6Lib sondern von c bzw. c++ Grundwissen.
Folglich kannst du alle wichtigen Funktionen als Definition in den .h Dateien finden.

Ansonsten findest du eine Doku der Funktionen der RP6lib in den PDF Files auf der CD sowie im Web auf bereits genannter Seite und auch als REMark in den Funktionen.
Die Docu zur AVRLib hast du schon gesehen wie aus deinem Beitrag hervorgeht...

Mehr gibts da nicht...
Aber wenn du eine wirklich gute Doku haben möchtest, beschäftige dich mal mit Doxygen und generiere dir deine eigene Docu.
http://de.wikipedia.org/wiki/Doxygen
Da Du dich ja mit Intel C++ und Fortran auskennst, wirst du Doxygen aber bereits kennen und nutzen. :)
Gruß

inka
07.08.2014, 09:31
er meint vermutlich eine auflistung fertiger funktionen und die angabe in welcher .c datei die zu finden ist. Die gibt es meines wissens nicht oder nur ansatzweise im netz

RolfD
07.08.2014, 09:47
Genau die Liste kann man sich z.B. mit Doxygen selbst bauen.
Gruß

radbruch
07.08.2014, 19:57
Hallo

Hier hatte ich eine Liste aller RP6-Funktionen (Stand 2007) mit Verweisen auf das jeweilige Kapitel in der Doku erstellt:
https://www.roboternetz.de/community/threads/28920-RP6-Software-%28Library-und-Demos%29?p=275864&viewfull=1#post275864

(Der Bug in "4.6.10.2. I²C Master" ist inzwischen behoben.)

Gruß

mic

inka
07.08.2014, 20:53
schöne liste mic,
leider fehlt auch dort der hinweis darauf in welcher lib diese funktion zu finden ist. Aber evtl. kennt sich schnitzelbot wirklich mit doxygen aus und kann diese liste erstellen?

shedepe
08.08.2014, 17:32
Alle Funktionen, Defines und Makros die in der avr-libc definiert sind findet man hier:
http://www.nongnu.org/avr-libc/user-manual/modules.html

Für den RP6 würde ich in die Anleitung schauen, dort sind die meisten Sachen die man braucht beschrieben, oder lässt halt wirklich mal Doxygen drüber laufen. Doxygen ist wirklich einfach zu bedienen. Man generiert zunächst mit

doxygen -g <config-file> ein Configurationsfile (Dafür gibt es auch grafische Programme, die die Konfiguration einfacher machen z.B. Doxywizard) und führt danach im selben Verzeichniss den befehl doxygen <config-file> aus.
Man findet dann je nach Konfiguration ein Unterverzeichniss in dem die als HTML formatierte Ausgabe liegt.