_dark_ 0 May 28 Posted May 28 (edited) · Report post Не могу понять из-за чего вылезает ошибка: ...co_core.h(86): error: #70: incomplete type is not allowed #include "co_tmr.h" typedef struct CO_NODE_T { struct CO_DICT_T Dict; /*!< Object dictionary */ struct CO_IF_T If; /*!< Can driver interface */ struct CO_EMCY_T Emcy; /*!< Node error status */ struct CO_NMT_T Nmt; /*!< Network management */ struct CO_TMR_T Tmr; /*!< Timer manager */ struct CO_SDO_T Sdo[CO_SSDO_N]; /*!< SDO Server Array */ uint8_t *SdoBuf; /*!< SDO Transfer Buffer */ #if USE_CSDO struct CO_CSDO_T CSdo[CO_CSDO_N]; /*!< SDO client array */ #endif struct CO_RPDO_T RPdo[CO_RPDO_N]; /*!< RPDO Array */ struct CO_TPDO_T TPdo[CO_TPDO_N]; /*!< TPDO Array */ struct CO_TPDO_LINK_T TMap[CO_TPDO_N * 8]; /*!< TPDO mapping links */ struct CO_SYNC_T Sync; /*!< SYNC management */ #if USE_LSS struct CO_LSS_T Lss; /*!< LSS slave handling */ #endif //USE_LSS enum CO_ERR_T Error; /*!< detected error code */ uint32_t Baudrate; /*!< default CAN baudrate */ uint8_t NodeId; /*!< default Node-ID */ } CO_NODE; в строке struct CO_TMR_T Tmr; в co_tmr.h typedef struct CO_TMR_T { struct CO_NODE_T *Node; /*!< Link to parent node */ uint32_t Max; /*!< Num. of elements in pools */ struct CO_TMR_ACTION_T *APool; /*!< Timer action pool */ struct CO_TMR_TIME_T *TPool; /*!< Timer event pool */ struct CO_TMR_ACTION_T *Acts; /*!< Timer action free list */ struct CO_TMR_TIME_T *Free; /*!< Timer event free list */ struct CO_TMR_TIME_T *Use; /*!< Timer event used list */ struct CO_TMR_TIME_T *Elapsed; /*!< Timer event elapsed list */ uint32_t Freq; /*!< Timer ticks per second */ } CO_TMR; если оставляю, ничего не меняется typedef struct CO_TMR_T { uint32_t Max; } CO_TMR; т.е. она не зависит от состава структуры CO_TMR_T зы - код стека CANopen - компилятор V5.06 ззы другие строки компилятся без ошибок, например типа struct CO_DICT_T Dict; Edited May 28 by _dark_ Quote Share this post Link to post Share on other sites More sharing options...
_dark_ 0 May 28 Posted May 28 · Report post Странно как то... в co_core.h объявляю для теста typedef struct CO_NODE2_T { struct CO_TMR2_T Tmr; /*!< Timer manager */ } CO_NODE2; в co_tmr.h typedef struct CO_TMR2_T { uint32_t Freq; /*!< Timer ticks per second */ } CO_TMR2; появляется еще одна такая же ошибка теперь переношу шаблон typedef struct CO_TMR2_T в другой файл (co_obj.h) и ошибка на строку struct CO_TMR2_T Tmr; пропадает, т.е. шаблон в др. *.h видится, что-то не так с co_tmr.h ? зы пните меня пжл.! всю голову сломал co_tmr.h co_core.h Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 349 May 28 Posted May 28 · Report post Где-то циклическая зависимость по включаемым файлам появилась, видимо. #include "co_types.h" #include "co_cfg.h" //#include "co_core.h" Сейчас закомментировано, но, видимо, было раскомментировано? Quote Share this post Link to post Share on other sites More sharing options...
x893 85 May 28 Posted May 28 · Report post 7 hours ago, _dark_ said: пните меня пжл.! всю голову сломал Возьмите пример с github и не надо ничего ломать Quote Share this post Link to post Share on other sites More sharing options...
novikovfb 40 May 29 Posted May 29 · Report post Попробуйте скомпилировать с сохранением результата работы препроцессора (для gcc - опция "-save-temps") и посмотреть, что и в каком порядке загружает препроцессор. Возможно, CO_TMR_T или одно из ее полей на этот момент еще не объявлена, а только заявлено, что есть какая-то структура с таким типом (как для объявления указателей). Quote Share this post Link to post Share on other sites More sharing options...
_dark_ 0 May 29 Posted May 29 (edited) · Report post 16 hours ago, Arlleex said: Сейчас закомментировано, но, видимо, было раскомментировано? //#include "co_core.h" это я добавлял, т.к. в co_core.h уже есть объявления всех нужных *.h насчет циклической зависимости не понял, все *.h подключаются один раз и явных перекрестных зависимостей в прототипах нет... я знаю, что у keil-a есть зависимость в последовательности объявления хидоров, но и тут все корректно 5 hours ago, novikovfb said: для gcc - опция "-save-temps" Не понял куда ее вставлять, при добавлении в Мisk Сontrol в [C/C++] ругается... Судя по первой ошибке обрабатывается co_core.h, а co_tmr.h еще не подключен (или вообще не подключен), т.к. при закоментаренной строчке #include "co_tmr.h" co_core.h эффект тотже! 13 hours ago, x893 said: Возьмите пример с github и не надо ничего ломать эта библиотека на github лежит с CMake (и примеры тоже), к Keil-у прикрутил стандартно с указанием всех ее путей... Пока понятно, что не видятся нормально часть *.h файлов, но не понятна причина и как это исправить... - пути в проекте всех дирректорий библиотеки прописанны - файлы в группы добавлены.. Edited May 29 by _dark_ Quote Share this post Link to post Share on other sites More sharing options...
_dark_ 0 May 29 Posted May 29 · Report post 6 hours ago, novikovfb said: ... и в каком порядке загружает препроцессор. Возможно, CO_TMR_T или одно из ее полей на этот момент еще не объявлена, а только заявлено, что есть какая-то структура с таким типом (как для объявления указателей). скорее всего именно это и происходит делать то что? я не знаю как в Keil реализовать последовательность обработки кроме как "подвигать" хидеры вверх-вниз, там где их подключили кучей. для своих файлов это работает, условно в main.h объвляю все *.h и далее только указываю обычно его в др. файлах... иногда какой-то *.h нужно поднять в объявлении выше других файлов... Quote Share this post Link to post Share on other sites More sharing options...
novikovfb 40 May 29 Posted May 29 · Report post 11 minutes ago, _dark_ said: делать то что? прочитать описание компилятора и настроить его, чтобы сохранял файл с результатом работы препроцессора (все include, define и т.п. развернуты в простой текст). Тогда увидите, что приводит к ошибке и станет понятно, в какой последовательности подключать файлы Quote Share this post Link to post Share on other sites More sharing options...
_dark_ 0 May 29 Posted May 29 · Report post структура проекта и подключенные директории... Quote Share this post Link to post Share on other sites More sharing options...
x893 85 May 29 Posted May 29 · Report post 2 hours ago, _dark_ said: эта библиотека на github лежит с CMake Где тут CMake - неизвестно. И под Keil всё собирается без проблем, и под makefile, и под STM32Ide. Что Вы там мастерите - непонятно. Quote Share this post Link to post Share on other sites More sharing options...
_dark_ 0 May 29 Posted May 29 (edited) · Report post Это не CANopenNode. )) С ним то по сборке проблем нет. Он собирается без ошибок и предупреждений. (но писали его мазахисты, продраться через #if#def-ы тот еще квест) Я нашел минимум 5 открытых стеков CANopen. 3 из них нормально собрались. "Фестиваль" замороченный и c++ - не понравился, задвинут. Этот от немцев написан лучше, чем CONode, и с лучшей документацией в т.ч. на сайте, но сборка... (( зы мне одному кажется, что сайт исправляет текст как T9? Edited May 29 by _dark_ Quote Share this post Link to post Share on other sites More sharing options...
dimka76 99 May 29 Posted May 29 · Report post On 5/29/2026 at 4:06 PM, _dark_ said: Этот от немцев написан лучше, чем CONode, и с лучшей документацией в т.ч. на сайте, но сборка... (( Тогда ссылку хоть на этот стек бы привели. On 5/29/2026 at 4:06 PM, _dark_ said: мне одному кажется, что сайт исправляет текст как T9? Одному Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 349 May 29 Posted May 29 · Report post 37 минут назад, dimka76 сказал: Тогда ссылку хоть на этот стек бы привели. Лучше сразу проект в Кейле архивом. С минимальным составом файлов, чтобы лишь проблема проявлялась. Quote Share this post Link to post Share on other sites More sharing options...
dimka76 99 May 29 Posted May 29 · Report post On 5/29/2026 at 5:37 PM, Arlleex said: Лучше сразу проект в Кейле архивом. С минимальным составом файлов, чтобы лишь проблема проявлялась. Кейл не у всех есть. Но можно и ссылку, и Кейл 🙂 Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 349 May 29 Posted May 29 · Report post 24 минуты назад, dimka76 сказал: Кейл не у всех есть. У меня есть https://github.com/embedded-office/canopen-stack Всю папку src вытащил в кейл и скомпилил. Компилится, ошибок нет. 1 Quote Share this post Link to post Share on other sites More sharing options...