 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Sre Dec 15, 2010 11:41 am Naslov sporočila: Hi-tech picc Error[1091] |
|
|
V Piklabu pišem program v C-ju za merilec hitrosti in uporabljam PICC prevajalnik od HI-TECH (verzija 9.80). Težava je v tem, da uporabljam dve izvorni .c datoteki (merilec_hitrosti.c in lcd.c). Če vsebino lcd.c prekopiram v merilec_hitrosti.c, se projekt zgradi brez težav, čim ko je program v večdatotečni obliki, mi ne da miru z napako
Koda: |
Error[1091] /usr/hitech/picc/9.80/sources/float.c 86 : main function "_main" not defined |
Lcd.h:
Koda: |
/*
* LCD interface header file
* See lcd.c for more info
*/
/* write a byte to the LCD in 4 bit mode */
extern void lcd_write(unsigned char);
/* Clear and home the LCD */
extern void lcd_clear(void);
/* write a string of characters to the LCD */
extern void lcd_puts(const char * s);
/* Go to the specified position */
extern void lcd_goto(unsigned char pos);
/* intialize the LCD - call before anything else */
extern void lcd_init(void);
extern void lcd_putch(char);
/* Set the cursor position */
#define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)
|
Lcd.c:
Koda: |
/*
* LCD interface example
* Uses routines from delay.c
* This code will interface to a standard LCD controller
* like the Hitachi HD44780. It uses it in 4 bit mode, with
* the hardware connected as follows (the standard 14 pin
* LCD connector is used):
*
* PORTD bits 0-3 are connected to the LCD data bits 4-7 (high nibble)
* PORTA bit 3 is connected to the LCD RS input (register select)
* PORTA bit 1 is connected to the LCD EN bit (enable)
*
* To use these routines, set up the port I/O (TRISA, TRISD) then
* call lcd_init(), then other routines as required.
*
*/
#ifndef _XTAL_FREQ
// Unless specified elsewhere, 4MHz system frequency is assumed
#define _XTAL_FREQ 4000000
#endif
#include <htc.h>
#include "lcd.h"
#define LCD_RS RA0
//#define LCD_RW RA2
#define LCD_EN RA1
#define LCD_DATA PORTB
#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0))
/* write a byte to the LCD in 4 bit mode */
void
lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA = ( ( c >> 4 ) & 0x0F );
LCD_STROBE();
LCD_DATA = ( c & 0x0F );
LCD_STROBE();
}
/*
* Clear and home the LCD
*/
void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
__delay_ms(2);
}
/* write a string of chars to the LCD */
void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}
/* write one character to the LCD */
void
lcd_putch(char c)
{
LCD_RS = 1; // write characters
lcd_write( c );
}
/*
* Go to the specified position
*/
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
char init_value;
//ADCON1 = 0x06; // Disable analog pins on PORTA
init_value = 0x3;
TRISA=0;
TRISB=0;
LCD_RS = 0;
LCD_EN = 0;
//LCD_RW = 0;
__delay_ms(15); // wait 15mSec after power applied,
LCD_DATA = init_value;
LCD_STROBE();
__delay_ms(5);
LCD_STROBE();
__delay_us(200);
LCD_STROBE();
__delay_us(200);
LCD_DATA = 2; // Four bit mode
LCD_STROBE();
lcd_write(0x28); // Set interface length
lcd_write(0xF); // Display On, Cursor On, Cursor Blink
lcd_clear(); // Clear screen
lcd_write(0x6); // Set entry Mode
}
|
merilec_hitrosti.c: (program zdaj še ne dela nič)
Koda: |
#include <htc.h>
#include "lcd.h"
__CONFIG(UNPROTECT & LVPDIS & BORDIS & MCLREN & PWRTEN & WDTDIS & HS);
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 8000000
#endif
void
main (void)
{
}
|
Googlam že 2 uri, pa brez rezultata. V manualu sicer piše nekaj o tej napaki, ampak mi ne pove nič (da mora vsak program imeti funkcijo main()... ). Ima kdo kakšno idejo, ker meni se bo utrgalo? _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
sraka Član


Pridružen-a: Čet 20 Nov 2008 23:52 Prispevkov: 481 Aktiv.: 2.38 Kraj: PMAVs
|
Objavljeno: Sre Dec 15, 2010 12:03 pm Naslov sporočila: |
|
|
Nauk: Programiranje je igra, kjer se ti lahko utrga. _________________ Danes je težko biti budala, konkurenca je velika, pa še dokazovati se moraš večkrat na dan.
Sem ogledalo: Nisem kriv, če v meni vidite nekaj kar vam ni všeč. |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
Objavljeno: Sre Dec 15, 2010 10:30 pm Naslov sporočila: |
|
|
To delaš v mplabu ali zaženeš picc compiler na roke? |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Sre Dec 15, 2010 11:31 pm Naslov sporočila: |
|
|
To delam v Piklabu (Ubuntu-Linux), kjer prevajalnik kličem prek tega IDE-ja. Zakaj, je to pomembno? _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Sre Dec 15, 2010 11:40 pm Naslov sporočila: |
|
|
Ja pa napiši notri v main
{
a=0;
i=0;
for i=0 ; i=100 ; i++
a=i+a :
end for
i=0;
a=0;
}
ali nekaj podobnega. Ne moreš imeti praznega podprograma, sploh pa ne main (glavni program).
Sicer pa v main spada
{
- komplet inicializacija (LCD, ADC, I/O, vpis konstant in parametrov,...) nato pa
while(1)
{
.... glavna zanka, ki kliče podprograme ...
}
} _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
dule26 Član

Pridružen-a: Tor 28 Sep 2010 7:30 Prispevkov: 26 Aktiv.: 0.15 Kraj: Murska Sobota
|
Objavljeno: Čet Dec 16, 2010 8:09 am Naslov sporočila: |
|
|
Poskusi namesto "void main(void){}" napisat "int main() {}" |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Čet Dec 16, 2010 12:28 pm Naslov sporočila: |
|
|
int main() brez return? _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
dule26 Član

Pridružen-a: Tor 28 Sep 2010 7:30 Prispevkov: 26 Aktiv.: 0.15 Kraj: Murska Sobota
|
Objavljeno: Čet Dec 16, 2010 12:32 pm Naslov sporočila: |
|
|
Brez! |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Čet Dec 16, 2010 2:57 pm Naslov sporočila: |
|
|
Zaenkrat niti preizkusiti ne morem, ker v Piklabu ne morem nastaviti prevajalnika. Kl!k _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Ned Dec 19, 2010 4:10 pm Naslov sporočila: |
|
|
Ista napaka. Int main() ne pomaga  _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Dec 20, 2010 12:59 am Naslov sporočila: |
|
|
A ni Void main()  |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Pon Dec 20, 2010 3:26 am Naslov sporočila: |
|
|
Ali morajo biti frekvence povsod enake?
Enkrat je 4MHz, drugič pa 8MHz.
Povsem izbriši void in main ter ju napiši na novo. Lahko si kak skrit znak pred m natipkal. ALT GR + ... ali podobno.
Morda mora biti main(), namesto main () . Včash so povsem brezvezne stvari.
Vzemi eno delujočo datoteko in pobriši vse ven, razen main. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Pon Dec 20, 2010 1:52 pm Naslov sporočila: |
|
|
Zanimivo je, ker samo to datoteko gre prevest, če dam compile this file, projekta pa ne gre zgradit. Z ukazne vrstice pa gre obe datoteki, vsako posebej prevesti. Ne razumem ravno najbolje ukazne vrstice za ta prevajalnik. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Pon Dec 20, 2010 4:50 pm Naslov sporočila: |
|
|
Odločil sem se, da bom programiral prevajal z SDCC. Zanima me, na kakšen način bi lahko v nek del asm kode, ki jo vključim v c kodo prenesel vrednost iz kode, ki je napisana v c. Recimo imam funkcijo:
Koda: |
void funkcija (int vrednost) {_asm 'Tukaj želim recimo movlw vrednost _endasm;} |
Namreč dobil sem idejo, da bi driver za LCD napisal sam v zbirniku v neko funkcijo, potem pa bi to funkcijo klical iz glavnega programa:
Koda: |
lcd_pisi ("besedilo"); |
_________________ return;
brake; |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|