Свежие обсуждения
Микроконтроллеры

Ошибки при компиляции - прошу помочь !

1 5

Проблема с компиляцией данной программы. Выдаются следующие ошибки:

Error [372] C:\PROJEKTY\PIC\OSC\DELAY.C; 35.22 "," expected
Warning [349] C:\PROJEKTY\PIC\OSC\DELAY.C; 36.1 non-prototyped function declaration for "Delay_Us"

Может кто пояснит. В Си я ноль полный, а надо программу (чужую) откомпилировать.

Очень например мне непонятно почему в *.C и в *.H файле - подпрограмма DelayUs определена получается дважды, но если закомментировать один из вариантов (ассемблерный) то ошибок не буден, но при компиляции всей программы имеем в числе прочего :

Error [1098] C:\PROJEKTY\PIC\OSC\LCD3310.C; 196. conflicting declarations for variable "_DelayMs" (C:\PROJEKTY\PIC\OSC\DELAY.C:13)
(в мануале на HI TECH - неизвестная ошибка - со всеми вопросами к разработчику)

Error [237] C:\PROJEKTY\PIC\OSC\delay.c; 13. function "_DelayMs" redefined

Но копий вроде больше нет .... проверял

188112.c

 

Компилятор HI-TEC PIC18 V9.51 PRO , оболочка MPLab IDE v8.15

Прикреплен include для предыдущего файла

188113.h

 

см в топике "Ликбез"

 

А как определить ? В модуле Delay.C есть 2 функции Delayms и Delayus, которые вызываются из все остальных модулей.

 

Вот часть кода LCD3310.c

void LcdInit ( void )
{
SPIInit();

// Pull-up on reset pin.
// LCD_RST_PIN=1;

// Set output bits on port B.
DelayMs(100);

// Toggle display reset pin.
// LCD_RST_PIN=0;
// Delay();
// LCD_RST_PIN=1;

// Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
// SPCR = 0x50;

// Disable LCD controller
LCD_CE_PIN=1;

LcdSend( 0x21, LCD_CMD ); // LCD Extended Commands.
LcdSend( 0xC8, LCD_CMD ); // Set LCD Vop (Contrast).
LcdSend( 0x06, LCD_CMD ); // Set Temp coefficent.
LcdSend( 0x13, LCD_CMD ); // LCD bias mode 1:48.
LcdSend( 0x20, LCD_CMD ); // LCD Standard Commands, Horizontal addressing mode.
LcdSend( 0x0C, LCD_CMD ); // LCD in normal mode.

// Reset watermark pointers.
LoWaterMark = LCD_CACHE_SIZE;
HiWaterMark = 0;

LcdClear();
LcdUpdate();
}

Просто вызов подпрограммы ...

 

выложи реализацию delayев из delay.c и из 3310.c сравним. если одинаковые - выкинем один, если разные - сделаем, чтоб не мешали друг-другу

 

Вот заголовок LCD3310.C

#include <pic18.h>

/** S P I : Chip Select Lines ***************************************/

#define tris_LCD_CE_PIN TRISB4 // Output
#define LCD_CE_PIN LATB4

#define tris_LCD_RST_PIN TRISB3 // Output
#define LCD_RST_PIN LATB3

#define tris_LCD_DC_PIN TRISB5 // Output
#define LCD_DC_PIN LATB5

#define SPI_MISO_PIN LATB6
#define tris_SPI_MISO_PIN TRISB6

#define SPI_CLK_PIN LATB7
#define tris_SPI_CLK_PIN TRISB7

#define byte unsigned char
#define word unsigned int
#define bool bit

#define TRUE 1
#define FALSE 0

#define LCD_X_RES 84
#define LCD_Y_RES 48
#define LCD_CACHE_SIZE (LCD_X_RES*LCD_Y_RES)/8

#define PIXEL_OFF 0
#define PIXEL_ON 1
#define PIXEL_XOR 3
#define FONT_1X 1
#define FONT_2X 2

#define LcdCmdData byte
#define LcdFontSize byte
#define LcdPixelMode byte
/*
#define LCD_RST_PIN 1
#define LCD_CE_PIN 2
#define SPI_MOSI_PIN 3
#define LCD_DC_PIN 5
#define SPI_CLK_PIN 6
*/
#define LCD_CMD 0
#define LCD_DATA 1
//#define PORT LATB
//#define TRIS TRISB
/*--------------------------------------------------------------------------------------------------
Private function prototypes
--------------------------------------------------------------------------------------------------*/
// Function prototypes are mandatory otherwise the compiler generates unreliable code.

void LcdSend ( byte data, LcdCmdData cd );
void Delay ( void );
void LcdClear ( void );
void LcdUpdate ( void );
/*--------------------------------------------------------------------------------------------------
Character generator

This table defines the standard ASCII characters in a 5x7 dot format.

Далее идёт знакогенератор.

/*--------------------------------------------------------------------------------------------------
Global Variables
--------------------------------------------------------------------------------------------------*/
static byte LcdCache [ LCD_CACHE_SIZE ];

static int LcdCacheIdx;
static int LoWaterMark;
static int HiWaterMark;
static bool UpdateLcd;

А вызовы функции DELAYMS - выше кусок.

 

Строку #include < pic18.h > из LCD3310.C уберите, оставьте только в хедере

 

Так мало ? Буду завтра пробывать.

 

... не помогло ...