Servus,
ich habe eine lcd hd44780 lib für GPIO und I2C in C geschrieben
(stm32f1). Jetzt möchte ich möglichst die Funktionen nicht doppelt
schreiben, sondern elegand programmieren, damit der Code besser wartbar
ist.
1 | ...
|
2 | #ifdef I2C
|
3 | #define hd44780_write() _I2C_hd44780_write(_LCD_MODE_t MODE_t, uint8_t data)
|
4 | #endif
|
5 |
|
6 |
|
7 | #define hd44780_clear() hd44780_write( COMMAND, HD44780_CMD_CLEAR )
|
8 | #define hd44780_home() hd44780_write( COMMAND, HD44780_CMD_RETURN_HOME )
|
9 | ...
|
10 | #define hd44780_write_char( c ) hd44780_write( DATA, c & 0xff )
|
11 |
|
12 |
|
13 | //---------------------------------------------------------------------
|
14 | // typedef _LCD_MODE_t
|
15 | // @brief enum for function hd44780_write();
|
16 | //---------------------------------------------------------------------
|
17 | typedef enum{
|
18 | COMMAND = 0,
|
19 | DATA,
|
20 | HI_NIBBLE,
|
21 | }_LCD_MODE_t;
|
22 |
|
23 | //------------------------------- global function -------------------------------
|
24 | void hd44780_init( void );
|
25 | void hd44780_write(_LCD_MODE_t MODE_t, uint8_t data);
|
26 |
|
27 | void hd44780_write_string( char *s );
|
28 | void hd44780_set_cursor( uint8_t x, uint8_t y );
|
29 | void hd44780_ticker ( char *msg );
|
30 | extern void Delay_us( uint32_t c );
|
31 | extern void Delay_ms( uint32_t c );
|
Die Funktion
1 | _I2C_hd44780_write(_LCD_MODE_t MODE_t, uint8_t data);
|
ist nicht global.
1 | #ifdef I2C
|
2 | #define hd44780_write() _I2C_hd44780_write(_LCD_MODE_t MODE_t, uint8_t data)
|
3 | #endif
|
Geht das überhaubt so? Sollte ich alle #defines überschreiben? Oder
jemand ein Tipp wie ich das elegant lösen kann. Vielleicht mithilfe
"weak"...
Vielen Dank.
PS: Die GPIO lib ist von CooCox. Die I2C lib habe ich mit DMA gelösst.
Diese funktioniert einbahnfrei.