powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C. Не компилируется под arm-eabi-gcc
13 сообщений из 13, страница 1 из 1
C. Не компилируется под arm-eabi-gcc
    #38458222
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решаю задачу написания программы в HMIWorks для ICPDAS TPD-xxx. Поскольку редактор там г***о (даже поиска нет) и отладчика нет, а писать много - написал все структуры и функции по их обработке QtCreator. Чтобы потом их просто вставлять в обработчики событий в самой HMIWorks. Расширения всех файлов исходников заменил на .c, чтобы вызвывался gcc, а не g++. Скомпилировал gcc в QtCreator. Эти-же самые файлы, подключаю к HMIWorks, прописываю их в файле проекта, т.к. добавлять существующие файлы из графического интерфейса пользователя она не умеет. Пытаюсь скомпилировать (devKitArm arm-eabi-gcc) и получаю ошибки:
arm-eabi-gcc CC main.c
CC _frame0.c
CC _frame1.c
CC _frame2.c
CC _dict.c
CC ladder.c
CC ../shared/structs.c
CC ../shared/activeguielement.c
CC ../shared/extflash.c
CC ../shared/guicommon.c
In file included from ./_frame0.h:4,
from ./HMIWorks.h:61,
from ../shared/extflash.h:5,
from ../shared/guicommon.h:4,
from ../shared/guicommon.c:1:
./../shared/activeguielement.h:24: error: expected specifier-qualifier-list before 'Geometry16'
In file included from ./_frame0.h:14,
from ./HMIWorks.h:61,
from ../shared/extflash.h:5,
from ../shared/guicommon.h:4,
from ../shared/guicommon.c:1:
./../shared/simplebitmap.h:13: error: expected specifier-qualifier-list before 'Geometry16'
./../shared/simplebitmap.h:15: warning: struct has no members
make.exe: *** [../shared/guicommon.o] Error 1


guicommon.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#ifndef GUICOMMON_H
#define GUICOMMON_H
#include <stdint.h>
#include "extflash.h"
/*...*/
#define SIZEOF_Geometry16 (SIZEOF_PointS16 + SIZEOF_SizeU16)
struct Geometry16 {
    /*struct*/ PointS16 leftTop;
    /*struct*/ SizeU16 size;
};
typedef struct Geometry16 Geometry16;
/*...*/
int Geometry16_loadFromExternalFlash(const uint32_t address, /*struct*/ Geometry16 *outGeometry, int *ok);/* Для неё требуется extflash.h. Если эту функцию туда перенести и убрать отсюда #include "extflash.h" - всё становиться нормально, но появляются другие пдобные проблемы, для решения которых всё надо расположить в одном .h и одном .c файлах*/
#endif


extflash.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
#ifndef EXTFLASH_H
#define EXTFLASH_H
#include <stdint.h>
#include <HMIWorks.h>
/*...*/
#endif


simpleBitmap.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#ifndef SIMPLEBITMAP_H
#define SIMPLEBITMAP_H

#include <stdint.h>
#include <HMIWorks.h>
#include <malloc.h>
//#include <mem.h>

#include "guicommon.h"
#include "extflash.h"

struct SimpleBitmap {
    /*struct*/ Geometry16 geometry; // Считает, что ошибка здесь.
    uint32_t *pixels;
};
typedef struct SimpleBitmap SimpleBitmap;
/*...*/
#endif



activeguielement.h:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#ifndef ACTIVEGUIELEMENT_H
#define ACTIVEGUIELEMENT_H
#include <stdint.h>
#include <malloc.h>
#include <HMIWorks.h>
#include "modbusrgs.h"
#include "mbmeasurement.h"
#include "extflash.h"
#include "guicommon.h"
/*...*/
struct ActiveGUIElement {
    uint8_t type;
    /*struct*/ Geometry16 geometry;
    /*struct*/ MBMeasurement measurement;
    uint8_t parameters [ACTIVE_GUI_ELEMENT_PAR_SIZE];
};
typedef struct ActiveGUIElement ActiveGUIElement;
/*...*/
#endif



Что не так? Не понимаю. Целый день убил. Благодарен за любую помощь.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38458252
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyЧто не так? Не понимаю.
У тебя Geometry16 объявлен после include в котором он используется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38458295
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По подробнее, можно, пожалуйста. Возможно-ли обойтись forward declaration или что надо делать?
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38458307
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymanovskyчто надо делать?
Или перенести объявление выше, или инклуд - ниже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38458311
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете указать конкретно, что и куда. Никогда с такой заразой не сталкивался.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38458354
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyМожете указать конкретно, что и куда. Никогда с такой заразой не
сталкивался.
Вы никогда не сталкивались с тем, что типы надо объявлять ДО использования?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38459816
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В QtCreator всё компилируется. Вначале пишу все необходимые #include. Значит, как я понимаю, всё объявлено. Далее использую те типы, которые описаны в подключённых выше #include. Поэтому не могу понять, почему не объявлено? Я же #include написал.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38459847
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом случайных перестановок, эту проблему решил. Но появились другие. Какой принцип правильного размещения #include? в с++ таких проблем никогда не было.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38460094
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyМетодом случайных перестановок, эту проблему решил. Но появились другие. Какой принцип правильного размещения #include? в с++ таких проблем никогда не было.

Проблема в том, что правильного принципа нет.
Есть тул -- препроцессор -- и человек, и этот человек должен знать, что делает, когда использует этот тул.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38460117
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Dymanovskyarm-eabi-gccIn file included from ./_frame0.h:4,
from ./HMIWorks.h:61,
from ../shared/extflash.h:5,
from ../shared/guicommon.h:4,
from ../shared/guicommon.c:1:



Не хватает исходников HMIWorks.h и _frame0.h для точной диагностики.
Но кажется, у вас из HMIWorks.h инклудится _frame0.h, из которого еще инклудится например activeguielement.h

Но при этом компиляция guicommon.h дошла только до строки #include "extflash.h"
Строчка #define GUICOMMON_H отработала но структуры еще не определены.

Дальше по цепочке вложенных инклудов попали на activeguielement.h
Из него снова инклудится guicommon.h, проскакивает его по #ifndef GUICOMMON_H
Структуры по прежнему не определены.
Вот вам и ошибка.
DymanovskyКакой принцип правильного размещения #include?
Избегать циклического включения
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38461006
Dymanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно понял, но внутри меня так и осталось некоторое недопонимание.
Помог этот вопрос:
http://stackoverflow.com/questions/705676/how-does-inclusion-of-header-file-happen
Поступил по следующему правилу. Если в заголовочном файле определена структура, в состав которой входит другая структура, определённая вне этого файла, то перед первой структурой делаем предварительное объявление 2-й, объявляем 2-ю в 1-й как указатель. Подключаем все #include после определения 1-й структуры. Я обожаю С++! В нём нет такого идиотизма. После 2-х дней борьбы с компилятором, наконец-таки скомпилировал.
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38461136
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyЯ обожаю С++! В нём нет такого идиотизма.есть. В этом смысле оба языка ничем не отличаются ))) да и не идиотизм это вовсе.
с первым утверждением - согласен )))
...
Рейтинг: 0 / 0
C. Не компилируется под arm-eabi-gcc
    #38461162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DymanovskyЯ обожаю С++!
Опытные горько вздохнули, воздев глаза вверх....
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C. Не компилируется под arm-eabi-gcc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]