Обсуждаем контроллеры компании Atmel.
Ответить

Почему возникает ошибка expected ',' or ';' before 'const' ?

Ср окт 10, 2018 20:40:17

Почему возникает ошибка компиляции expected ',' or ';' before 'const' в проекте ATmega48P + SSD1306 (ap.).zip

связанная с константой screen_1[1024]

main.h
Спойлер#ifndef MAIN_H_
#define MAIN_H_

#define F_CPU 20000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>


#include "I2C.h"
#include "SSD1306_I2C.h"

//----------

const unsigned char PROGMEM screen_1[1024]= //НАДПИСЬ RADIOKOT.RU и РИСУНОК КОТА
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xE0, 0x60, 0x60, 0x60, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60, 0x60,
0x60, 0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0xE0,
0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
0x80, 0xE0, 0x60, 0x00, 0x00, 0x80, 0xC0, 0xE0,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0x80, 0x00, 0x60,
0x60, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60,
0x60, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x7F, 0x06, 0x06, 0x1E, 0x7B, 0x73, 0x40,
0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x1F, 0x7E,
0x70, 0x00, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60,
0x70, 0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x00,
0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x70,
0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x07,
0x1F, 0x78, 0x60, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x60, 0x60, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x06,
0x0E, 0x3F, 0x71, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x70, 0xB0,
0xF0, 0xB0, 0xE0, 0x20, 0xE0, 0x60, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xC0, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8,
0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF,
0xBF, 0xBF, 0xDF, 0xFF, 0xEF, 0xF7, 0xFB, 0xFF,
0xFB, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
0xFD, 0xF7, 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC,
0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xBF, 0xFF, 0xCF, 0xF7, 0xFB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x7F, 0x9F, 0xCF, 0xF2, 0xFF, 0xE7, 0xDF, 0x97,
0x37, 0x77, 0xFF, 0xF7, 0xEF, 0xEF, 0xEF, 0xFF,
0xF7, 0xF7, 0xF7, 0xF7, 0xFB, 0xFB, 0xFB, 0xFB,
0xFB, 0xFB, 0xFB, 0xFB, 0xFA, 0xF8, 0xF4, 0xF4,
0xFC, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x78, 0x38,
0x98, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xDF, 0xFB, 0xFC, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
0xF7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F,
0xDC, 0x5A, 0x54, 0x7F, 0x5F, 0x5F, 0x5F, 0x7F,
0x5F, 0x3F, 0xFF, 0xB3, 0xF9, 0xF3, 0xFF, 0xFF,
0xDF, 0xFF, 0xFF, 0xF3, 0xF9, 0xB3, 0x7F, 0x3F,
0x7F, 0x5F, 0x7F, 0x5F, 0x5F, 0x7C, 0x54, 0x91,
0x90, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF,
0xF7, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFD, 0xFD, 0xF7, 0xFE, 0xDF, 0xBE, 0xFF,
0x7E, 0x7F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0x7E, 0x7F, 0xBE, 0x1F, 0x6E, 0x43, 0xC1, 0x80,
0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x7F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, 0x7F,
0x7F, 0x7F, 0x7F, 0x3F, 0x7F, 0x3F, 0x1F, 0x1F,
0x0F, 0x0F, 0x17, 0x1B, 0x1E, 0x1F, 0x0F, 0x0F,
0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x14, 0x30,
0x20, 0x20, 0x30, 0x1A, 0x0E, 0x0E, 0x0E, 0x0F,
0x1F, 0x17, 0x13, 0x18, 0x18, 0x08, 0x09, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

const unsigned char PROGMEM DIGIT[5][24]= //ЦИФРЫ
{
{
0x00, 0x00, 0x00, 0x30, 0x30, 0xF8, 0xF8, 0x00, //1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x18, 0x1F, 0x1F, 0x18, 0x18, 0x00, 0x00, 0x00,
},

{
0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x98, 0xF8, //2
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
0x1E, 0x1B, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00,
},

{
0x00, 0x00, 0x30, 0x98, 0x98, 0x98, 0x98, 0xF8, //3
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},

{
0x00, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0xF8, 0xF8, //4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
0x06, 0x06, 0x1F, 0x1F, 0x06, 0x00, 0x00, 0x00,
},

{
0x00, 0x00, 0xF8, 0xF8, 0x98, 0x98, 0x98, 0x98, //5
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},
};
//----------

#endif /* MAIN_H_ */



main.cpp
Спойлер//===========
#include "main.h"
//===========

void migalka (void)
{

for (unsigned int i =0; i<3; i++)
{
PORTB |= (1<<i);
_delay_ms(500);
PORTB &= ~(1<<i);
}

}

int main(void)
{
//----------
DDRB = 0b00000111;
PORTB = 0b00000000;
PORTC=0x00; //линии I2C никогда не должны включаться на выход c высоким уровнем если контроллер питается более 3,3v - монитор сгорит.

migalka(); //однократно мигаем тремя светодиодами по очереди

_delay_ms(500); //пауза перед инициализацией - для завершения переходных процессов включения дисплея

SSD1306_I2C_INIT(); //инициализация дисплея
SSD1306_I2C_CLR(); //очистка экрана дисплея


I2C_Start(); //рисуем кота
I2C_SendByte(NAME); //посыл адреса+0
I2C_SendByte(DATS);
for(unsigned int i=0;i<1024;i++)
{
//I2C_SendByte(pgm_read_byte(screen_1+i));
}
I2C_Stop();

_delay_ms(2000);

while(1)
{
//----------
PORTB |= (1<<0); // Мигает светодиодом на PB0 перед каждым блоком цифр 1 ... 5
_delay_ms(500);
PORTB &= ~(1<<0);
_delay_ms(500);
//----------
for(unsigned char k=0; k<5; k++)
{
I2C_Start();
I2C_SendByte(NAME);
I2C_SendByte(COM);
I2C_SendByte(0x21); //Set Column Address (21h)
I2C_SendByte(COM);
I2C_SendByte(115); //будем выводить между 115...
I2C_SendByte(COM);
I2C_SendByte(126); //...и 126 колонками
I2C_SendByte(COM);
I2C_SendByte(0x22); //Set Page Address (22h)
I2C_SendByte(COM);
I2C_SendByte(6); //Будем крутиться между 6-ой...
I2C_SendByte(COM);
I2C_SendByte(7); //...и 7-ой страницами (строчками)
I2C_SendByte(DATS);
for(unsigned int i=0; i<12; i++) //рисуем верхнюю часть цифры
{
I2C_SendByte(pgm_read_byte(DIGIT[k]+i));
}
for(unsigned int i=12; i<24;i++) //рисуем нижнюю часть цифры
{
I2C_SendByte(pgm_read_byte(DIGIT[k]+i));
}
I2C_Stop();
_delay_ms(1000);
}
}
//----------
}


и не возникает в проекте ATmega48P + SSD1306 (3).zip, хотя объявление константы скопировано оттуда?
Вложения
ATmega48P + SSD1306 (3).zip
(104.39 KiB) Скачиваний: 184
ATmega48P + SSD1306 (ap.).zip
(102.61 KiB) Скачиваний: 168

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Ср окт 10, 2018 22:05:59

Наверное что-то не так с файлом SSD1306_I2C.h.

Добавлено after 10 minutes 38 seconds:
Re: Почему возникает ошибка expected ',' or ';' before 'const' ?
Сразу и не увидел. А зачем Вы константу в заголовочном файле определяете?

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Ср окт 10, 2018 22:16:08

Да действительно, в в конце этого файла константа такого же типа, в которой при копипастинге исчезла точка с запятой.
Спасибо, Z_h_e.

Сразу и не увидел. А зачем Вы константу в заголовочном файле определяете?


Это пока не законченный проект, а что плохого если она там и останется?

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Чт окт 11, 2018 04:58:10

Это пока не законченный проект, а что плохого если она там и останется?
Заголовочный файл обычно подключают к нескольким файлам. Что будет в этом случае?

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Чт окт 11, 2018 10:04:40

Область видимости расшириться, возможно, нежелательным образом.

Или размер прошивки увеличиться?

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Чт окт 11, 2018 11:43:59

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

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Чт окт 11, 2018 16:39:46

DENIS451 писал(а):Область видимости расшириться, возможно, нежелательным образом.

Или размер прошивки увеличиться?


Допустим Ваш проект содержит два исходника 1.c и 2.с, к обоим "подключен" header h.h .
В этом h.h вы определили некую переменную screen_1.
Компилятор откомпиллит 1.с и получит объектный файл 1.о в котором будет screen_1. А от 2.с тоже получит объектный файл 2.о, в котором тоже будет screen_1.
Затем компоновщик будет это все компоновать и в том числе выделять память под screen_1. Закончится это все сообщением что- то типа duplicate definition

Re: Почему возникает ошибка expected ',' or ';' before 'cons

Чт окт 11, 2018 19:14:16

Спасибо, учту!
Ответить