Forum: Mikrocontroller und Digitale Elektronik C: .h und .c habe ich erstellt - wie jetzt weiter?


von Dennis (Gast)


Lesenswert?

Hallo Leute!

Ich stehe auf dem Schlauch. Ich habe mir eine .h und eine .c Datei 
erstellt. Die .h Datei habe ich jetzt in meinen Quelltext eingebunden, 
aber die Funktionen werden einfach übergangen. Was ist mit dieser 
"Ogject"-Datei. Macht der Compiler dasd nicht von selber, wenn ich die 
.h einbinde?

Ich arbeite mit IAR.

Hier mal ein Beispiel:
1
// clock_module_initializations.h
2
3
#ifndef CLOCK_MODULE_INITIALIZATIONS_H
4
#define CLOCK_MODULE_INITIALIZATIONS_H
5
6
7
8
void configure_clock_module( void );
9
10
#endif // CLOCK_MODULE_INITIALIZATIONS_H
Und die dazugehörige .c Datei:
1
// clock_module_initializations.c
2
3
#include "clock_module_initializations.h"
4
#include "msp430x24x.h"
5
#include <stdint.h>
6
7
8
9
void configure_clock_module( void )
10
{
11
  // Initialization of clock source - Crystal 3.6864 MHz
12
  
13
  // BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
14
  // XT2OFF:  XT2 oscillator (bit cleared: XT2 is now active)
15
  BCSCTL1 &= ~( XT2OFF | XTS );
16
  
17
  // BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
18
  // XT2Sx:   XT2 range select (XT2S_0: 0-4 MHz)
19
  // XCAPx:   Oscillator capacitor selection (XCAP_1: ~6pF)
20
  BCSCTL3 = ( XT2S_0 | XCAP_1 );
21
  
22
  do
23
  {
24
    volatile uint16_t i = 0;
25
    IFG1 &= ~ OFIFG;              // Clear oscillator-fault-flag
26
    for (i = 0xFFFF; i > 0; i--)  // Time to get stable
27
    {}                            // Loop
28
  } while (IFG1 & OFIFG);         // Do, until no fault present
29
  
30
  // BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
31
  // SELMx:   Select MCLK (SELM_2: XT2CLK)
32
  // SELS:    Select SMCLK (bit set: XT2CLK)
33
  // DIVM:    Divider MCLK (DIVM_1: /2 -> 3.6864MHz / 2 = 1.8432MHz)
34
  // DIVS:    Divider SMCLK (DIVS_1: /2 -> 3.6864MHz / 2 = 1.8432MHz)
35
  BCSCTL2 = ( SELM_2 | SELS | DIVM_1 | DIVS_1 );
36
}
Und dann sieht das ganze im Hauptprogramm so aus:
1
#include "msp430x24x.h"
2
#include "clock_module_initializations.h"
3
4
void main( void )
5
{
6
  // Stop watchdog timer to prevent time out reset
7
  WDTCTL = WDTPW + WDTHOLD;
8
9
  void configure_clock_module( void );
10
  
11
  _BIS_SR (GIE);                       // Global interrupts enabled
12
13
  while (1)
14
  {
15
    
16
  }

Aber "void configure_clock_module( void );" wird einfach übrgangen.

Was mache ich hier falsch?

von Dennis (Gast)


Lesenswert?

Oh je...anstatt:
1
void configure_clock_module( void );
sollte es wohl eher heissen:
1
configure_clock_module();

von Dennis (Gast)


Lesenswert?

Geht trotzdem nicht. Jetzt übergeht er sie nicht mehr, aber sagt mir, 
dass diese Funktionen nicht da sind.

von Alfred (Gast)


Lesenswert?

Hallo,

mach doch einfach einen Funktionsaufruf! Das was bei Dir dasteht, ist 
ein Prototyp. Was mich allerdings wundert, warum meckert da der Compiler 
nicht? Machen "lokale" Prototypen Sinn?

Auf jeden Fall statt
1
void main( void )
2
{
3
  // Stop watchdog timer to prevent time out reset
4
  WDTCTL = WDTPW + WDTHOLD;
5
6
  void configure_clock_module( void );
7
  
8
  _BIS_SR (GIE);                       // Global interrupts enabled
9
10
  while (1)
11
  {
12
    
13
  }

das hier benutzen:
1
void main( void )
2
{
3
  // Stop watchdog timer to prevent time out reset
4
  WDTCTL = WDTPW + WDTHOLD;
5
6
 configure_clock_module();
7
  
8
  _BIS_SR (GIE);                       // Global interrupts enabled
9
10
  while (1)
11
  {
12
    
13
  }

Beste Grüße,
Alfred

von Dennis (Gast)


Angehängte Dateien:

Lesenswert?

So sieht der Fehler aus.

von tut nix zur sache (Gast)


Lesenswert?

Hi,

compilierst du denn die "clock_module_initializations.c" mit?

von Dennis (Gast)


Lesenswert?

OK, ich glaube jetzt geht es.

Ich habe bis jetzt immer nur auf den grünen "Download & Debug"-Knopf 
gedrückt. Jetzt muss ich augenscheinlich vorher noch "Compile" machen.

Dachte, das würde automatisch gemacht.

von Dennis (Gast)


Lesenswert?

Zu früh gefreut. Wenn ich "Compile" mache, dann gibt es keinen Fehler. 
Wenn ich es übertragen will, dann kommt obige Fehlermeldung.

von Karl H. (kbuchegg)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.