|
11 / 11 / 8
Регистрация: 08.10.2013
Сообщений: 51
|
|
Подскажите что делать с ошибкой19.02.2018, 18:20. Показов 1871. Ответов 0
Метки нет (Все метки)
Не получается скомпилировать проект выдает сообщение
Кликните здесь для просмотра всего текста
C:\SCADAPAC357>make ECHO is on. ------------------------------------------------------------------- Checking for unresolved externals with SCADAPack 350 CTools library ------------------------------------------------------------------- ldarm -e0 imImage.o "C:\CTools\Controller\TelePACE\SCADAPack _350_TelePACE_Firmware_Image" -o imLink_SCADAPack350.o imImage.o: In function `t_io_cycl::IO_ReadAll(void)': imImage.o(.text+0xb294): undefined reference to `__pure_virtual' imImage.o(.text+0xb2d4): undefined reference to `__pure_virtual' imImage.o(.text+0xb2dc): undefined reference to `__pure_virtual' imImage.o(.text+0xb2e4): undefined reference to `__pure_virtual' imImage.o(.text+0xb2fc): undefined reference to `__pure_virtual' imImage.o(.text+0xb32c): more undefined references to `__pure_virtual' follow make: *** [imLink_SCADAPack350.o] Error 0x1 makefile Кликните здесь для просмотра всего текста
# ----------------------------------------------------------------------------- # makefile # # Make file for SCADAPack 350 / SCADAPack 33x / SCADASense 4203 C Tools # application for TelePACE firmware # Copyright 2007-2008 Control Microsystems Inc. # # usage: # make - makes application for all controllers # make TARGET=SCADAPack350 - makes application for SCADAPack 350 controller # make TARGET=SCADAPack33x - makes application for SCADAPack 33x controller # make TARGET=4203 - makes application for SCADASense 4203 controller # make clean - deletes all output files # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # set the name of the output file here # ----------------------------------------------------------------------------- APPLICATION_NAME = OBP_SCADAPAC357 # ----------------------------------------------------------------------------- # list all object files here # ----------------------------------------------------------------------------- objects = appstart.o main.o stdlibex.out mbdi.out mbai.out mbci.out mbdev.out debug.out mb_map.out mbdevri.out mbdn.out mbdo.out mapscv.out mbset4tm.out mb.out io.out mbzu.out mbecn.out date.out # ----------------------------------------------------------------------------- # list the default target controllers here # ----------------------------------------------------------------------------- TARGET = SCADAPack350 # ----------------------------------------------------------------------------- # set location of C Tools files # ----------------------------------------------------------------------------- # take the C Tools path from the environment, or set default if it's not there (default may not be correct for all installations) ifeq ($(strip $(CTOOLS_PATH)),) CTOOLS_PATH = C:\CTools endif # ----------------------------------------------------------------------------- # set location of TelePACE specific files # ----------------------------------------------------------------------------- INCLUDE_PATH = $(CTOOLS_PATH)\Controller\TelePACE # ----------------------------------------------------------------------------- # compiler flags # ----------------------------------------------------------------------------- CFLAGS = -O3 -mapcs-32 -lstdc++ -mlittle-endian -march=armv4 -ansi -fno-builtin -DARMEL -I"$(INCLUDE_PATH)" -DCPU=ARMARCH4 -DTOOL_FAMILY=gnu -DTOOL=gnu -std=c99 # ----------------------------------------------------------------------------- # list of file suffixes used in this makefile # ----------------------------------------------------------------------------- .SUFFIXES: .SUFFIXES: .cpp .c .o .out # ----------------------------------------------------------------------------- # determine intermediate link target(s) used to check # if all symbols can be resolved in firmware # ----------------------------------------------------------------------------- stripTarget = $(strip $(TARGET)) ifeq ($(stripTarget),SCADAPack350 4203) intermediate_objects = imLink_SCADAPack350.o imLink_4203.o endif ifeq ($(stripTarget),SCADAPack350) intermediate_objects = imLink_SCADAPack350.o endif # Note that at this time the 350 and 33x images are the same ifeq ($(stripTarget),SCADAPack33x) intermediate_objects = imLink_SCADAPack350.o endif ifeq ($(stripTarget),4203) intermediate_objects = imLink_4203.o endif # ----------------------------------------------------------------------------- # rules for making .out file # ----------------------------------------------------------------------------- $(APPLICATION_NAME).out : imImage.o $(intermediate_objects) # Process CPP constructors and destructors @echo @echo -------------------- @echo Building output file @echo -------------------- nmarm imImage.o | "$(CTOOLS_PATH)\Arm7\tcl\bin\tclsh84.exe " "$(CTOOLS_PATH)\Arm7\host\x86-win32\bin\munch.tcl" -c arm > ctdt.c ccarm $(CFLAGS) -c -fdollars-in-identifiers ctdt.c -o ctdt.o # Link downloadable application. ccarm -I. -r -nostdlib -Wl,-X -Wl,-EL -T "$(CTOOLS_PATH)\Arm7\target\h\tool\gnu\l dscripts\link.OUT" imImage.o ctdt.o -o $(APPLICATION_NAME).out # Clean up temporary files del ctdt.c ctdt.o # ----------------------------------------------------------------------------- # rules for making intermediate objects # ----------------------------------------------------------------------------- imImage.o: $(objects) # Merge all object files into one ccarm -I. -r -nostdlib -Wl,-X -Wl,-EL -Wl $(objects) -o imImage.o # ----------------------------------------------------------------------------- # link with controller specific CTools library to check for unresolved externals # ----------------------------------------------------------------------------- imLink_SCADAPack350.o: imImage.o @echo @echo ------------------------------------------------------------------- @echo Checking for unresolved externals with SCADAPack 350 CTools library @echo ------------------------------------------------------------------- ldarm -e0 imImage.o "$(INCLUDE_PATH)\SCADAPack_350_TelePACE_ Firmware_Image" -o imLink_SCADAPack350.o imLink_4203.o: imImage.o @echo @echo --------------------------------------------------------------------- @echo Checking for unresolved externals with SCADASense 4203 CTools library @echo --------------------------------------------------------------------- ldarm -e0 imImage.o "$(INCLUDE_PATH)\SCADASense_4203_TelePAC E_Firmware_Image" -o imLink_4203.o # ----------------------------------------------------------------------------- # list all source file dependencies here # ----------------------------------------------------------------------------- appstart.o: appstart.cpp nvMemory.h main.o: main.cpp nvMemory.h stdlibex.hpp mbdi.hpp mbai.hpp mbci.hpp mbdev.hpp debug.hpp mb_map.hpp macro.hpp mbdevri.hpp mbdn.hpp mbdo.hpp mapscv.hpp mbset4tm.hpp stdlibex.cpp mbdi.cpp mbai.cpp mbci.cpp mbdev.cpp debug.cpp mb_map.cpp mbdevri.cpp mbdn.cpp mbdo.cpp mapscv.cpp mbset4tm.cpp mb.cpp mb.out io.hpp io.cpp mbzu.cpp mbzu.hpp mbecn.hpp mbecn.cpp date.cpp date.hpp # ----------------------------------------------------------------------------- # rules for making files # ----------------------------------------------------------------------------- %.o : %.c ccarm $(CFLAGS) -c $< -o $@ %.o : %.cpp ccarm $(CFLAGS) -c $< -o $@ # ----------------------------------------------------------------------------- # clean up all output files # ----------------------------------------------------------------------------- .PHONY: clean clean: del *.o del *.out io.hpp Кликните здесь для просмотра всего текста
#ifndef IO_INCLUDED #define IO_INCLUDED class t_cycl_base{ public: t_cycl_base(); //Функция циклического опроса BOOLEAN IO_Run(); protected: UINT32 IO_Period; UINT32 IO_LostPeriodCount; UINT32 IO_StartTimer;//Показания таймера на момент начала периода BOOLEAN IO_TimerEnabled;//Таймер включен virtual BOOLEAN IO_ReadAll(){} virtual UINT32 getPeriod(){} //Количество потерянных периодов virtual UINT32 getLostPeriodCount(){} //Количество потерянных периодов virtual void setLostPeriodCount(UINT32 LostPeriodCount){} }; class t_io_cycl_base ublic t_cycl_base{public: t_io_cycl_base(UINT16 _IO_Period_Addr,UINT16 _IO_LostPeriodCount_Addr); private: UINT16 IO_Period_Addr, IO_LostPeriodCount_Addr; virtual UINT32 getPeriod(){} //Количество потерянных периодов virtual UINT32 getLostPeriodCount(){} //Количество потерянных периодов virtual void setLostPeriodCount(UINT32 LostPeriodCount){} }; class t_io_cycl ublic t_io_cycl_base{//Обработка каналов, привязанных в коде CPPpublic: t_io_cycl( UINT16 _IO_Period_Addr ,UINT16 _IO_LostPeriodCount_Addr ,UINT16 const* Config ,UINT16 Config_Len ,UINT16 Config_Count ,UINT16 ModuleBufferSize ); virtual ~t_io_cycl()=0; static UINT16 IO_NOTIFICATION_COUNT;//Количество блокировок с момента запуска UINT16 IO_NOTIFICATION;//Номер блокировки //Функция циклического опроса virtual BOOLEAN IO_ReadAll(){} virtual BOOLEAN IO_Request(UINT16 moduleAddress){} virtual BOOLEAN IO_Read(UINT16 configidx,char *modulebuffer){} virtual BOOLEAN ModuleRead(UINT16 , char *modulebuffer){}// UINT32 (&data)[4]); UINT16 const*IO_Config;//Конфигурация UINT16 IO_Config_LEN;//Длинна записи конфигурации (количество регистров) protected: UINT16 IO_Config_COUNT;//Количество записей с конфигурацией UINT16 ModuleBufferSize;//Размер буфера чтения информации с модуля ввода-вывода char* ModuleBuffer; }; class t_mb_cycl ublic t_io_cycl_base{//Обработка каналов, привязанных в TelePace Studiopublic: t_mb_cycl( UINT16 _IO_Period_Addr ,UINT16 _IO_LostPeriodCount_Addr ,UINT16 const* Config ,UINT16 Config_Count ); protected: //Функция циклического опроса virtual BOOLEAN IO_ReadAll(){} virtual BOOLEAN IO_Read(UINT16 configidx){} UINT16 const*IO_Config;//Конфигурация UINT16 IO_Config_COUNT;//Количество записей с конфигурацией }; #endif /* IO_INCLUDED */ io.cpp Кликните здесь для просмотра всего текста
//============ //Модуль обработки дискретных входных сигналов //=========== #undef DEBUG #include <ctools.h> #include <string.h> #include "debug.hpp" #include "macro.hpp" #include "io.hpp" t_cycl_base::t_cycl_base(){ IO_Period = 0; IO_LostPeriodCount = 0; IO_StartTimer=0;//Показания таймера на момент начала периода IO_TimerEnabled = FALSE;//Таймер включен } //Функция циклического опроса BOOLEAN t_cycl_base::IO_Run(){ //Прочитать период опроса //DPRINTF(("IO_Run()\n")); UINT32 MB_IO_Period= getPeriod(); if(IO_Period != MB_IO_Period){ IO_Period = MB_IO_Period; DPRINTF(("IO_Period=%4u\n",IO_Period)); //Рестарт таймера IO_StartTimer = readStopwatch(); IO_TimerEnabled = IO_Period?TRUE:FALSE; } //Проверить что счетчик потерь не сброшен UINT32 IO_MBLostPeriodCount = getLostPeriodCount(); if(IO_MBLostPeriodCount==0 && IO_LostPeriodCount>0){//Команда сброса счетчика потерь DPRINTF(("IO_MBLostPeriodCount=%4u\n",IO _MBLostPeriodCount)); IO_LostPeriodCount = 0; } //Сработал таймер опроса UINT32 Ticks = readStopwatch()-IO_StartTimer; if (IO_TimerEnabled && Ticks>=IO_Period*100){ UINT32 IO_LostCount = Ticks/(IO_Period*100);//Прошло в текущем цикле IO_LostPeriodCount+=IO_LostCount-1;//Все что больше 1 то потеряно DPRINTF(("IO_LostPeriodCount=%4lu\n",IO_ LostPeriodCount)); IO_StartTimer+=IO_LostCount*(IO_Period*1 00); setLostPeriodCount(IO_LostPeriodCount); //Прочитать значения каналов IO_ReadAll(); } return TRUE; } UINT32 UINT32 t_cycl_base::getPeriod(){return 0} //Количество потерянных периодов UINT32 t_cycl_base::getLostPeriodCount(){ return 0; } //Количество потерянных периодов void t_cycl_base::setLostPeriodCount(UINT32 LostPeriodCount){ return; } void t_io_cycl_base::t_io_cycl_base(UINT16 _IO_Period_Addr,UINT16 _IO_LostPeriodCount_Addr): t_cycl_base(), IO_Period_Addr(_IO_Period_Addr), IO_LostPeriodCount_Addr(_IO_LostPeriodCo unt_Addr) { } //Значение периода опроса UINT32 t_io_cycl_base::getPeriod(){ request_resource(IO_SYSTEM); UINT32 MB_IO_Period= dbase(MODBUS, IO_Period_Addr); release_resource(IO_SYSTEM); return MB_IO_Period; } //Количество потерянных периодов UINT32 t_io_cycl_base::getLostPeriodCount(){ request_resource(IO_SYSTEM); UINT32 LostPeriodCount= dbase(MODBUS, IO_Period_Addr); release_resource(IO_SYSTEM); return LostPeriodCount; } //Количество потерянных периодов void t_io_cycl_base::setLostPeriodCount(UINT3 2 LostPeriodCount){ request_resource(IO_SYSTEM); setdbase(MODBUS, IO_LostPeriodCount_Addr,LostPeriodCount) ; release_resource(IO_SYSTEM); return; } UINT16 t_io_cycl ::IO_NOTIFICATION_COUNT(0); t_io_cycl ::t_io_cycl( UINT16 _IO_Period_Addr ,UINT16 _IO_LostPeriodCount_Addr ,UINT16 const* Config ,UINT16 Config_Len ,UINT16 Config_Count ,UINT16 _ModuleBufferSize ) :t_io_cycl_base(_IO_Period_Addr,_IO_Lost PeriodCount_Addr) ,IO_Config(Config) ,IO_Config_LEN(Config_Len) ,IO_Config_COUNT(Config_Count) ,ModuleBufferSize(_ModuleBufferSize) { IO_NOTIFICATION = t_io_cycl::IO_NOTIFICATION_COUNT++;//Количество циклов опроса модулей (допускается не более 32) ModuleBuffer = new char[ModuleBufferSize*16]; } t_io_cycl ::~t_io_cycl(){ delete ModuleBuffer; } BOOLEAN t_mb_cycl::IO_Read(UINT16 configidx){return false} BOOLEAN t_io_cycl::IO_Read(UINT16 configidx,char *modulebuffer){} //Чтение всех каналов IO BOOLEAN t_io_cycl::IO_ReadAll(){ BOOLEAN result = TRUE; //Инициализация чтения модулей bool ModuleInit[16];//Инициализированные модули memset(ModuleInit,0,sizeof(bool)*16); for(UINT16 i=0;i<IO_Config_COUNT;i++){ UINT16 moduleaddr = *(IO_Config+i*IO_Config_LEN+0); UINT16 modulechanel = *(IO_Config+i*IO_Config_LEN+1);//Номер канала модуля if(moduleaddr>15 || modulechanel>32){ result = FALSE;//Неверная конфигурация continue; } if(!ModuleInit[moduleaddr]){ ModuleInit[moduleaddr]=true; IO_Request(moduleaddr); DPRINTF(("ModuleInit:%u\n",moduleaddr)); } } ioNotification(IO_NOTIFICATION);//Подождать готовности ответа от модулей ввода-вывода wait_event(IO_NOTIFICATION); //char ModuleBuffer[ModuleBufferSize*16];//Буффер для результата чтения с модулей ввода-вывода BOOLEAN ModuleReady[16];//Список прочитанных модулей BOOLEAN ModuleError[16];//Список модулей с ошибками memset(ModuleReady,0,sizeof(ModuleReady) );//Каналы не готовы //Чтение и обработка информации с модулей for(UINT16 i=0;i<IO_Config_COUNT;i++){ UINT16 ModuleNum = IO_Config[0]; if(ModuleNum>=16) continue;//Таких модулей не существует if(!ModuleReady[ModuleNum]){//Этот модуль еще не прочитан ModuleReady[ModuleNum] = TRUE; result &= //Получить результат безошибоного чтения всех модулей ModuleError[ModuleNum]= ModuleRead(ModuleNum,(ModuleBuffer+Modul eBufferSize*ModuleNum))?FALSE:TRUE; DPRINTF(("ModuleReady:%u\n",ModuleNum)); } if(ModuleError[ModuleNum]) continue;//Ошибка чтения модуля IO_Read(i,(ModuleBuffer+ModuleBufferSize *ModuleNum));//Обработать результат чтения модуля DPRINTF(("IO_Read:%u,%u\n",i,(ModuleBuff er+ModuleBufferSize*ModuleNum))); } return result; } t_mb_cycl ::t_mb_cycl( UINT16 _IO_Period_Addr ,UINT16 _IO_LostPeriodCount_Addr ,UINT16 const* Config ,UINT16 Config_Count ) :t_io_cycl_base(_IO_Period_Addr,_IO_Lost PeriodCount_Addr) ,IO_Config(Config) ,IO_Config_COUNT(Config_Count) { } //Чтение всех каналов IO BOOLEAN t_mb_cycl::IO_ReadAll(){ BOOLEAN result = TRUE; for(UINT16 i=0;i<IO_Config_COUNT;i++){ result&=IO_Read(i); } return result; }
0
|
|
| 19.02.2018, 18:20 | |
|
Ответы с готовыми решениями:
0
Подскажите что мне делать с ошибкой [Linker Error] Unresolved external 'Btsdk_Init()' referenced from UNIT1.OBJ подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать Что делать с ошибкой «C:\Windows\system32\msvcr110d.dll либо не предназначен.»? |
| 19.02.2018, 18:20 | |
|
Помогаю со студенческими работами здесь
1
Что мне делать с этой ошибкой: ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead? Что делать с ошибкой "Debug Assertion Failed"?
Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать Подскажите что с этим делать на С++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|