Отговори на тема  [ 9 мнения ] 
PIC C18 - Warning [2058] call of function without prototype 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение PIC C18 - Warning [2058] call of function without prototype
Това вече от доста време ме тормози и не мога да разбера какво става. Дава ми "call of function without prototype", но само на някои функции от header file-a:
Извиквам функиите така:

Код:
#include "lib18/lcd.h"
.....
  initLcd();
  initBacklight();
  lcdWriteStrRom("NS Toolbox v2.1");


Дава ми warning САМО на initBacklight(). На другите 2 не дава. Всъщност на никоя друга функция не дава warning.

lcd.h e:
Код:
#ifndef __LCD_H
#define __LCD_H
#include <stdint.h>
#include "const.h"

#define DEBUG_MODE   1
#define lcdDebugTris   TRISAbits.RA3
#define lcdDebugPin   LATAbits.LATA3
#define lcdDebugAnalog   ANSELAbits.ANSA3

// LCD Backlight
#define lcdBLTris  TRISBbits.RB5
#define lcdAnsel   ANSELBbits.ANSB5
#define lcdBLCCPCON  CCP3CON
#define lcdBLCCPR    CCPR3
#define lcdBLCCPRL   CCPR3L
#define lcdBLCCPRH   CCPR3H
#define lcdBLTmrSel  CCPTMRS0bits.C3TSEL
#define lcdBLDC      CCP3CONbits.DC3B


void initLcd(void);
void lcdWriteChar(const char c);
void lcdWriteStrRom(const rom char * str);
void lcdWriteStr(const char * str);
void lcdClear(void);
void lcdWriteCmd(char c);
void initBacklight();
void setLcdBacklight(int x);

#define lcdSetDDAddress(x) lcdWriteCmd(x|0x80)
#define lcdGoto(x,y) lcdSetDDAddress((x+(y>>1)*20) + ((y&1)*0x40))

#endif // __LCD_H


Тялото на initBacklight():

Код:
void initBacklight(){
  lcdBLTris = 0; // output
  lcdAnsel = 0;
  lcdBLCCPCON = 0x0F;
  lcdBLCCPR = 0;
  lcdBLTmrSel = 2; // 2 = Timer 6 for PWM
  lcdBLCCPRL = 0;
  lcdBLDC = 0x00;

  PR6 = 0xFF;

  TMR6 = 0;
  //Timer6
  T6CON = 0x04;
  PMD0bits.TMR6MD = 0;
  PMD1bits.CCP3MD = 0;
  //T6CONbits.T6OUTPS = 0; // 1:1
  //T6CONbits.TMR6ON = 1; // bit 2
  //T6CONbits.T6CKP = 0; // bits 1-0


  setLcdBacklight(0);
}

_________________
PIC SPBRG values calculator


Нед Ное 11, 2012 12:38 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: PIC C18 - Warning [2058] call of function without protot
void initBacklight(void);


void initBacklight(void)
{
}


Нед Ное 11, 2012 1:22 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: PIC C18 - Warning [2058] call of function without protot
първото е в header file-a. за initLcd() не дава тази грешка, а са декларирани по същия начин

_________________
PIC SPBRG values calculator


Нед Ное 11, 2012 4:31 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: PIC C18 - Warning [2058] call of function without protot
За C++ и някои C компилатори
Код:
void initBacklight(void);
е различно от
Код:
void initBacklight();
Принципно ако не декларираш explicit функцията като void а просто я декларираш () компилатора приема implicit, че тя има един int параметър - т.е. става
Код:
void initBacklight(int);
PIC C компилаторите са малко особенни, скоро се борих с едни Hitech C за PIC - мамата ми се разката докато изчистя всички warnings ... например
Код:
uiunt8_t v;
v = 5; // warning: implicit conversion from signed to unsigned т.е. трябва да е v = 5u;
v = v - 1; // warning: arithmetic overflow - това може да подлуди човек, един път го дава, един път не
v--; // това е ОК, а горното не?!

Имаше и други простотии, ама не ми се пише в момента ...

_________________
Мразя да мразя ...


Нед Ное 11, 2012 5:26 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: PIC C18 - Warning [2058] call of function without protot
:))))

Мерси! Имам някакво усещане, че това не е правилно, но ти го казваш така като че ли е стандарт. Явно някой едно време го е решил така и после някой друг е обявил първия за кретен и го е махнал... а Микрочип (както и аз) не са чували за този втория и затова си карат по тъпия начин.

_________________
PIC SPBRG values calculator


Нед Ное 11, 2012 10:49 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение Re: PIC C18 - Warning [2058] call of function without protot
"Принципно ако не декларираш explicit функцията като void а просто я декларираш () компилатора приема implicit, че тя има един int параметър - т.е. става "

Това пък къде си го гледал? По принцип понякога не си слагам void при декларациите но не съм забелязал в асемблерските листинги нещо нередно. Не ми се вижда и логично да е така.


Нед Ное 11, 2012 10:56 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Пон Апр 17, 2006 1:44 pm
Мнения: 291
Мнение Re: PIC C18 - Warning [2058] call of function without protot
Поне на теория (дотолкова, доколкото стандарта се спазва):
в "С":
void funct (void) - фунция неочакваща входни аргументи;
void funct () - функция очакваща произволен брой аргументи от неопределен тип;

в "С++":
void funct (void) - фунция неочакваща входни аргументи;
void funct () - фунция неочакваща входни аргументи, т.е. еднакво с горния ред.


Пон Ное 12, 2012 2:19 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: PIC C18 - Warning [2058] call of function without protot
Така е като се пише по памет - получават се глупости ... извинявам се.

На функции без прототип в C, компилатора прави прототип от рода на int fn(); т.е. функцията връща int и се опитва да познае какви са параметрите според употребата и. ( не както е останало в дебелата ми глава че има подразбиращ се инт параметър )

Малко по особен е случая като има декларация от рода на type fn(); - това се води декларация, но не прототип - прототип е когато се укажат точно параметрите. В C89/90 не ти трябва нито прототип, нито декларация за да се компилира (това разбира се не значи, че трябва да се прави така), в C99 е задължително преди извикване функцията да е декларирана, но не е задължително да има прототип.

Т.е. в примера се декларира функция, но не и се прави прототип - затова и има варнинг.

_________________
Мразя да мразя ...


Пон Ное 12, 2012 2:02 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: PIC C18 - Warning [2058] call of function without protot
@Nikola Kirov Не знам какво си мисли компилатора, но поне за C18 като сложа void в скобите спира да ми дава warning. За мен това е достатъчно. Дали по подразбиране решава че има 1 инт параметър - не знам, но не работи както трябва без (void) ... понякога.

_________________
PIC SPBRG values calculator


Пон Ное 12, 2012 6:13 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни