Universelle CAN Bibliothek: undefined reference to `can_init'

Gast #3968046
Lesenswert?

Hallo

Ich arbeite mit einem AT90CAN128 (genau genommen mit dem Developer Board 
DVK90CAN1) und wollte die Bib von 
http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek 
einbinden. (Universelle CAN Bibliothek)

Jedoch bekomme ich immer diesen Fehler für alle Funktionen die in der 
Bib enthalten sind

undefined reference to `can_get_message'

Makefile und config habe ich angepasst und dann die Bib erstellt sowie 
es in der Anleitung beschrieben ist

Ich arbeite mit Atmel Studio 6 und habe die Dateien dann über den
Solution Explorer eingebunden

einmal mit Exsiting item und die Bib mit Add Library.

Im Toolchain -> Linker ist dann auch der Ort der Bib angegeben.

Hat jemand vielleicht eine Tipp für mich

Danke
#3968167
Lesenswert?

Markus schrieb:
> Ja danke den hatte ich schon gefunden. Jedoch kam ich damit nicht
> weiter.
> Ich dachte ich hätte das so eingebunden wie es dort beschrieben ist

Das mag schon sein, dass du das glaubst.
Fakt ist aber, dass irgendwo eine Pfadangabe falsch ist oder die Library 
nicht mit ins Projekt aufgenommen wurde, sonst würde der Linker die 
Funktion finden.
Gast #3968240
Lesenswert?

Also leider hat das mit dem a wegnehmen nicht funktioniert.

in der config habe ich folgende Zeilen verändert gehabt bevor die bib 
erstellt worden ist

// 
------------------------------------------------------------------------ 
-----
/* Global settings for building the can-lib.
 *
 * Select ONE CAN controller for which you are building the can-lib.
 */
#define  SUPPORT_MCP2515      1
#define  SUPPORT_AT90CAN      1
#define  SUPPORT_SJA1000      0
Gast #3974915
Lesenswert?

Danke das hat funktioniert.


Jedoch läuft der DVK90CAN1 mit 8mhz und nicht mit 16mhz. Ich denke 
deswegen bekomme ich es jetzt trotzdem nicht zum laufen.

Ich hab das ganze jetzt geschafft mit der Atmel Bib zu realisieren. 
Allerdings kann ich dann keine IDs richtig Filtern.

Das ganze hängt an dieser Funktion (unten angehängt). Vielleicht 
versteht ja einer was man damit machen kann. Ich steig nicht dahinter. 
Wäre cool.

Das Problem liegt daran, wenn ich einen Mask setzte und eine falsche ID 
kommt sendet diese Funktion MOB_NOT_COMPLETED und ich häng damit in 
einer while Schleife fest. Leider kann ich diese while nicht verändern, 
denn selbst wenn die richtige ID kommt benötigt diese ein paar 
durchläufe bevor die unten stehende Funktion nicht MOB_NOT_COMPLETED 
zurückgibt.

Ich verwende die Atmel bib. Bekommen von dieser Seite:
https://bitbucket.org/m.kramis/canbootloader/src/784c7fc10a75/libraries/lib_mcu/can/

Jegliche Hilfe die mir eventuell auch nur Mobs besser verstehen lässt 
wäre toll. Vielleicht komm ich damit dann irgendwie weiter.

U8 can_get_mob_status(void)
{
    U8 mob_status, canstmob_copy;

    // Test if MOb ENABLE or DISABLE
    if ((CANCDMOB & 0xC0) == 0x00) {return(MOB_DISABLE);}

    canstmob_copy = CANSTMOB; // Copy for test integrity

    // If MOb is ENABLE, test if MOb is COMPLETED
    // - MOb Status = 0x20 then MOB_RX_COMPLETED
    // - MOb Status = 0x40 then MOB_TX_COMPLETED
    // - MOb Status = 0xA0 then MOB_RX_COMPLETED_DLCW
    mob_status = canstmob_copy & ((1<<DLCW)|(1<<TXOK)|(1<<RXOK));
    if ( (mob_status==MOB_RX_COMPLETED) ||   \
         (mob_status==MOB_TX_COMPLETED) ||   \
         (mob_status==MOB_RX_COMPLETED_DLCW) ) { return(mob_status); }

    // If MOb is ENABLE & NOT_COMPLETED, test if MOb is in ERROR
    // - MOb Status bit_0 = MOB_ACK_ERROR
    // - MOb Status bit_1 = MOB_FORM_ERROR
    // - MOb Status bit_2 = MOB_CRC_ERROR
    // - MOb Status bit_3 = MOB_STUFF_ERROR
    // - MOb Status bit_4 = MOB_BIT_ERROR
    mob_status = canstmob_copy & ERR_MOB_MSK;
    if (mob_status != 0) { return(mob_status); }

    // If CANSTMOB = 0 then MOB_NOT_COMPLETED
  cmd->status =
    return(MOB_NOT_COMPLETED);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren