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?