| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Използване на *.h *.c файлове http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4155 |
Страница 1 от 1 |
| Автор: | Ки4о [ Съб Май 05, 2007 4:27 pm ] |
| Заглавие: | Използване на *.h *.c файлове |
Стигнах до следния проблем: Искам да разделя в отделни файлове функциите за работа. Например в LCD.h да си сложа функциите за работа с LCD.Само че нещо не се получава.Част от програмата е това: #include <pic18f4550.h> #include <math.h> #include <stdlib.h> #define XTAL_FREQ 36MHZ #include "LCD.h" #include "delay.h" static bit LCD_EN @ ((unsigned)&PORTB*8+6); // Enable static bit LCD_RS @ ((unsigned)&PORTB*8+4); // Register select static bit LCD_RW @ ((unsigned)&PORTB*8+5); // Register select extern void LCD_STROBE(void); extern void lcd_init(void); extern void lcd_write(unsigned char c); extern void lcd_poz(unsigned char c); extern void lcd_puts(const char * s); extern void lcd_goto(unsigned char row,unsigned char pos); extern void lcd_clear(void); void main() { init(); lcd_init(); for(;;); } Във LCD.h имам : //---------------------------------------------------------------------------------------- void LCD_STROBE(void){ LCD_EN = 1; asm("nop"); asm("nop"); LCD_EN = 0; } //---------------------------------------------------------------------------------------- void lcd_init(void) { int pr; LCD_RW=0; LCD_RS = 0; DelayUs(20); pr=0x30; //-------------------------------------------------- PORTB=(0x0f&(pr>>4)); LCD_STROBE(); и така нататък ......... } Изкарва се грешка: Error[192] C:\Program Files\Microchip\work\PIС\LCD.h 11 : undefined identifier "LCD_EN" Error[192] C:\Program Files\Microchip\work\PIС\LCD.h 20 : undefined identifier "LCD_RW" Error[192] C:\Program Files\Microchip\work\PIС\LCD.h 21 : undefined identifier "LCD_RS" Как се ползват функции от друг файл?И какви са особенностите? |
|
| Автор: | Zdrav [ Съб Май 05, 2007 4:54 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
В .h файловете се слагат декларациите на функциите. В .c файловете - дефинициите им. void LCD_STROBE(void); // Tова е декларацията А това дефиницията на LCD_STROBE(): void LCD_STROBE(void){ LCD_EN = 1; asm("nop"); asm("nop"); LCD_EN = 0; } В твоя случай грешката идва от това че си декларирал: static bit LCD_EN @ ((unsigned)&PORTB*8+6); // Enable static bit LCD_RS @ ((unsigned)&PORTB*8+4); // Register select static bit LCD_RW @ ((unsigned)&PORTB*8+5); // Register select след като си написал: #include "LCD.h" Понеже в LCD.h неправилно си сложил дефинициите там не можеш да използваш LCD_EN, LCD_RS и LCD_RW. Които декларираш по-късно. Въобще заформил си една малка боза. Направи така: Съдържание на LCD.h
Съдържание на LCD.c
След това където искаш да използваш функциите за LCD просто пишеш #include "LCD.h" Разбира се в началото на файла преди да си използвал още някоя от функциите. |
|||||||||||||||||||
| Автор: | Ки4о [ Съб Май 05, 2007 8:10 pm ] |
| Заглавие: | |
Благодаря за спасителната сламка - излязох от бозата |
|
| Автор: | ToHu [ Съб Май 05, 2007 9:16 pm ] |
| Заглавие: | |
Tooo ако позлваш CCS той е малко странен в това отношение. |
|
| Автор: | Ки4о [ Съб Май 05, 2007 9:21 pm ] |
| Заглавие: | |
Ползвам Хайтек компилатор 9.50 PL 3 ,пробвах и ПРО версията,излекували са я но е бъгава все още. |
|
| Автор: | bateAz [ Съб Май 05, 2007 9:24 pm ] | |||||||||
| Заглавие: | ||||||||||
Какво ти "странен", той си е направо ненормален. |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|