www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Funktionsauslagerung


Autor: R Griesser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hab in letzter Zeit mein Programm für den PMBus geschrieben das jetzt 
funktioniert. Jetzt wollte ich die Funktionen in C - files auslagern was 
eigentlich immer funktioniert. Jedoch bekomm ich beim Compilieren einen 
Fehler den ich nicht erklären kann.

µC Infos: STM32L152

Die Funktion "I2CInit" ist in dem C-File "i2ccom.c". Der Prototyp 
befindet sich in der zugehörigen .h datei. Die .h datei ist per include 
in das "bootloader.c" file eingefügt in dem auch die Funktion aufgerufen 
wird.

Als Fehler bekomme ich:

Error: L6218E: Undefined symbol I2CInit() (referred from bootmain.o).
Not enough information to produce a SYMDEFs file.
Not enough information to list image symbols.
Finished: 2 information, 0 warning and 1 error messages.

Vielleicht weiss von euch jemand was zu tun ist?

Ich bin für jede Hilfe sehr Dankbar!

Gruß R. Griesser

Code:

bootmain.c:

/**************************************************************/
/***********************INCLUDES*******************************/
/**************************************************************/

#include <stdio.h>
#include <stdint.h>
#include "bsp/system_stm32l1xx.h"
#include "lib/STM32L1xx_StdPeriph_Driver/inc/stm32l1xx_conf.h"
#include "lib/CMSIS/CM3/CoreSupport/core_cm3.h"
#include "systemcore/pcc_common/includes/pcc_types.h"
#include "bootmain.h"
#include "interrupt.h"
#include "i2ccom.h"

/**************************************************************/
/***********************DEFINITIONS****************************/
/**************************************************************/

//defines
#define Transmitter             0x00
#define Receiver                0x01

#define Write              0x00
#define Read                  0x01

//prototypes
void PinInit(void);
void EXTI0Init(void);
void EXTI1Init(void);
void TestWrite(void);
void TestRead(void);
void PollAdresses(void);
void I2CReadFunction(void);
void I2CWriteFunction(void);

//variables
uint8_t SlaveAddress;
uint8_t Direction;
uint8_t Command;
__IO uint8_t TransmissionData;
__IO uint8_t ExpectedData;
__IO uint8_t Tx_Index;
__IO uint8_t Rx_Index;
uint8_t I2C_Tx_Buffer[32];
uint8_t I2C_Rx_Buffer[32];
uint8_t addressBuffer[128];
int TestReadFlag;
int TestWriteFlag;


/**************************************************************/
/**************************MAIN METHOD*************************/
/**************************************************************/

int main(void)
{
  PinInit();
  EXTI0Init();
  EXTI1Init();
  I2CInit();

  TestWriteFlag = FALSE;
  TestReadFlag = FALSE;

   while(1)
   {
     if (TestReadFlag == TRUE) TestRead();
     if (TestWriteFlag == TRUE) TestWrite();
   }
}

i2ccom.c:

/**************************************************************/
/***********************INCLUDES*******************************/
/**************************************************************/

#include "i2ccom.h"
#include <stdio.h>
#include <stdint.h>
#include "bsp/system_stm32l1xx.h"
#include "lib/STM32L1xx_StdPeriph_Driver/inc/stm32l1xx_conf.h"
#include "lib/CMSIS/CM3/CoreSupport/core_cm3.h"


/**************************************************************/
/***********************DEFINITIONS****************************/
/**************************************************************/
void I2CInit(void);

GPIO_InitTypeDef  GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

extern uint8_t SlaveAddress;
extern uint8_t Direction;
extern uint8_t Command;
extern __IO uint8_t TransmissionData;
extern __IO uint8_t ExpectedData;
extern __IO uint8_t Tx_Index;
extern __IO uint8_t Rx_Index;
extern uint8_t I2C_Tx_Buffer[32];
extern uint8_t I2C_Rx_Buffer[32];
extern uint8_t addressBuffer[128];
extern int TestReadFlag;
extern int TestWriteFlag;

/**************************************************************/
/**************************METHODS*****************************/
/**************************************************************/

void I2CInit(void)
{

}

i2ccom.h:

#ifndef I2CCOM_H_
#define I2CCOM_H_

#endif /*I2CCOM_H_*/

/**************************************************************/
/***********************DEFINITIONS****************************/
/**************************************************************/

#include "bootmain.h"

/**************************************************************/
/************************Prototypes****************************/
/**************************************************************/

void I2CInit(void);

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Makefile (bzw. Projekteinstellungen) prüfen. Es sieht so aus, als ob 
i2ccom.c kein Teil deines Projektes ist.

Autor: R Griesser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
im Jamfile ist die i2ccom.c eingefügt und wird mit kompiliert.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jamfile kannte ich noch nicht. => 
http://public.perforce.com/public/jam/src/Jamfile.html

Vielleicht hilft es, wenn du jemanden das Jamfile checken lässt. Und 
wenn du dem Linker auf die Finger schaust, ob der i2ccom.o zum Programm 
dazu bindet. Ein Schritt in die Richtung ist die Anzeige aller 
Kommandozeilen der Tools im Buildprozess.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.