Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Serho88
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_baseublic 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_cyclublic t_io_cycl_base{//Обработка каналов, привязанных в коде CPP
public:
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_cyclublic t_io_cycl_base{//Обработка каналов, привязанных в TelePace Studio
public:
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2018, 18:20
Ответы с готовыми решениями:

Подскажите что мне делать с ошибкой [Linker Error] Unresolved external 'Btsdk_Init()' referenced from UNIT1.OBJ
Здравствуйте, помогите пожалуйста. Скачал с сайта http://www.bluesoleil.com/ библиотеку для работы с блютуз. В нее входит 4-е h...

подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать
Вывод В выходной файл выведите одно число - сколько ударов сделали часы за этот отрезок времени.

Что делать с ошибкой «C:\Windows\system32\msvcr110d.dll либо не предназначен.»?
как бороться с этой ошибкой?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2018, 18:20
Помогаю со студенческими работами здесь

Что мне делать с этой ошибкой: ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead?
Господа, обращаюсь к вам с огромной просьбой помочь!!! Делаю проект шифрования с методом гаммирования, все почти сделал, в кончоли...

Что делать с ошибкой "Debug Assertion Failed"?
https://www.cyberforum.ru/attachment.php?attachmentid=976234&amp;stc=1&amp;d=1540645789

Что делать с этой ошибкой: "LNK2019: ссылка на неразрешенный внешний символ _WinMain@16"?
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции...

Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #include &lt;string&gt; using namespace...

Подскажите что с этим делать на С++
Помогите с написанием задач на С++ пожалуйста: 1. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru