C: .h und .c habe ich erstellt - wie jetzt weiter?

Gast #2136871
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?
Gast #2136878
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
Gast #2136899
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.

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