C-Files aufsplitten

Persönliche Seite
Hi,

uart.h:
1
#ifndef __UART_H__
2
#define __UART_H__
3

4
#define BAUDRATE      115200
5
#define RXEN          2
6
#define TXEN          3
7

8
int Uart_Init(int baudRate);
9
int Uart_GetChar(void);
10
int Uart_PutChar(int c);
11

12
...
13

14
#endif


uart.c:
1
int Uart_Init(int baudRate)
2
{
3

4
  return(success);
5
}
6

7
int Uart_GetChar(void)
8
{
9
  return(c);
10
}
11

12
int Uart_PutChar(int c)
13
{
14
  return(c);
15
}

main.h:
1
#ifndef __MAIN_H__
2
#define __MAIN_H__
3

4
#define CLK    72000000
5
...
6

7
#endif

main.c:
1
#include <stdio.h>
2
#include "main.h"
3
#include "uart.h"
4

5

6
void main()
7
{
8
  Uart_Init();
9

10
  while(1)
11
  {
12
    ;
13
  }
14

15
}

Hi,

hier haste ein (hoffe ich) sauberes Konstrukt für den Aufbau 
verschiedener Files.
Ich bevorzuge ein Pärchen aus .c/.h File pro Peripheral (also Treiber) 
bzw. Funktionsgruppe.
So wird dein Programm wunderbar modular, und du kannst alle Module aus 
.c/.h wiederverwenden.

Ausnahme sind z.B. eine GPIO.h, wo die Pin #defines gemacht werden, die 
dann in der uart.h mit #include-iert werden.


Also, copy&paste, und gleich beim sauberen Stil bleiben!


VG,
/th.
Persönliche Seite
Hi,

das ist ganz einfach:

Der C Präprozessor nimmt alles, was als
1
#include "fileName"
angegeben ist, und packt es in genau der Reihenfolge in seinem 
temporären "file" über das C file, was er gerade bearbeitet, und macht 
danach die Ersetzungen

Also z.b.
1
#define UART_BAUDRATE     115200
2

3
Uart_Init(UART_BAUDRATE);

wird
1
Uart_Init(115200);

Damit man das ganze steuern kann, gibt es so was wie anfragen:
1
#if
2
#else
3
#elsif
4
#endif
5
#ifndef
6
#ifdef
7
...

Wenn du ein Symbol abfragst, definierst, was definitiv noch nicht da 
ist, und es dann definierst, ist es in diesem kontext vorhanden.
Die präpro wird TRUE, und er macht alles, was zwischen #ifndef und 
#endif steht.
1
#ifndef __UART_H__
2
#define __UART_H__
3

4
#endif

Solltest du durch ein anderes Headerfile, was im gleichen kontext 
compiliert wird, das gleiche noch mal includen, wären Symbole doppelt.
Das wird hier verhindert, da beim zweiten Lauf das Symbol (
1
__UART_H__
) definiert ist.

Daher habe ich mir für die Headerfile-#ifndef (if not defined) die 
Nomenklatur
1
__FILENAME_H__
ausgedacht, da das eigentlich immer unique ist.


VG,
/th.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.