Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Загрузка BIOS в плату

Вы не вошли.

 Поиск | Регистрация | Вход 

Борис
03.10.2011 04:48:12
#1

Гость

Загрузка BIOS в плату

Здравствуйте! Подскажите пожалуйста, с чем может быть связано отсутствие загрузки BIOS в плату? До этого все инструкции программы выполняются, а после нет. При компиляции выдаются только предупреждения:
void atomic_dec(atomic_t*)//' defined but not used
stubs.h
void atomic_inc(atomic_t*)//' defined but not used
stubs.h
no newline at end of file
program.cpp
no newline at end of file
ifc_ldev.h

В консоли выводиться следующее:
> Load library
> Call CreateInstance
> Get IDaqLDevice interface
> IDaqLDevice get success
> OpenLDevice Handle 0x7dc

И на этом все заканчивается.

Привожу ниже код основной программы:

#include <windows.h>
#include <objbase.h>
#include <iostream>
#include "C://workspace//thermonoises//include//ioctl.h"
#include "C://workspace//thermonoises//include//ifc_ldev.h"
#include "C://workspace//thermonoises//include//CREATE.h"
#include "C://workspace//thermonoises//include//stubs.h"

using namespace std;

//typedef  unsigned long int ULONG;

CREATEFUNCPTR CreateInstance;

ULONG CallCreateInstance(char* name)
{
   HINSTANCE hComponent = ::LoadLibrary(name);
   if(hComponent==NULL)
   {
      return 0;
   }

   CreateInstance = (CREATEFUNCPTR)::GetProcAddress(hComponent,"CreateInstance");
   if(CreateInstance==NULL)
   {
      return 0;
   }
   return 1;
}

int main()
{
ULONG slot = 0;
SLOT_PAR sl;
   PLATA_DESCR_U2 pd;

   // Загрузка библиотеки и инициализация интерфейса

   cout << "Load library" << endl;
   CallCreateInstance("lcomp.dll");
   cout << "Call CreateInstance" << endl;
   LUnknown* pIUnknown = CreateInstance(slot);
   if(pIUnknown == NULL) { cout << "Call CreateInstance failed" << endl; return 1; }
   
   cout << "Get IDaqLDevice interface" << endl;
   IDaqLDevice* pI;
   HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
   if(!SUCCEEDED(hr)) { cout << "Get IDaqLDevice failed" << endl; return 1; }
   pIUnknown->Release();
   cout << "IDaqLDevice get success" << endl;

   // Начало работы с платой
   cout << "OpenLDevice Handle " << pI->OpenLDevice() << endl;
   cout << "LoadBios status    " << pI->LoadBios("e2010") << endl;
   cout << "Plata descr        " << pI->ReadPlataDescr(&pd) << endl;
   cout << "Plata test         " << pI->PlataTest() << endl;
   cout << endl << "Slot parameters" << endl;   
   pI->GetSlotParam(&sl);

   cout << "Base    " << hex << sl.Base << endl;
   cout << "BaseL   " << sl.BaseL << endl;
   cout << "Mem     " << sl.Mem << endl;
   cout << "MemL    " << sl.MemL << endl;
   cout << "Type    " << sl.BoardType << endl;
   cout << "DSPType " << sl.DSPType << endl;
   cout << "Irq     " << sl.Irq << endl;
   //...
   ASYNC_PAR pp;
   pp.s_Type = L_ASYNC_ADC_INP;
   pp.Chn[0] = 0x00; // 0 канал дифф. подключение (в общем случае лог. номер канала)
   pI->IoAsync(&pp);
   cout << (short)pp.Data[0] << endl; // в Data[0] код АЦП

   // Завершение работы
   cout << "Close Plata       " << pI->CloseLDevice() << endl;

   // Закрытие интерфейса
   pI->Release();
   return 0;
}

Борис
03.10.2011 04:51:45
#2

Гость

Re: Загрузка BIOS в плату

Да, забыл добавить, среда разработки - wascana (Eclipse C/C++ IDE + MinGW)

03.10.2011 10:20:14
#3

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

а модуль то какой? e2010 или e2010m? там и имена биосов разные будут...

Борис
03.10.2011 11:28:53
#4

Гость

Re: Загрузка BIOS в плату

Да, действительно e2010m. Я внес изменения в программу:
cout << "LoadBios status    " << pI->LoadBios("e2010m") << endl;
но на результат это к сожалению не повлияло.

Борис
03.10.2011 11:37:09
#5

Гость

Re: Загрузка BIOS в плату

Такое ощущение, что программа доходит до функции LoadBios() на которой немного зависает и аварийно завершает работу. Следующие инструкции уже не выполняются. Это лучше видно, если запускать скомпилированный exe файл.

03.10.2011 13:40:43
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

а свнормальной среде типа VC как? тестовый пример вообще работает? L7XX.TST который. client 0 e2010m если запустить?

Борис
04.10.2011 09:30:40
#7

Гость

Re: Загрузка BIOS в плату

Немного доработал код - заблокировал выполнение функции загрузки биоса - и программа не виснет.

В консоли выводиться следующее:

Load library
1Call CreateInstance
Get IDaqLDevice interface
IDaqLDevice get success
OpenLDevice Handle 0x7dc  (а должен быть LDev##?)
0xffffffff (значение INVALID_HANDLE_VALUE )
Plata descr        0
Plata test         0

Может такое быть, что OpenLDevice просто криво формирует линк, но не выдает ошибку? И если да, то как с этим бороться?

04.10.2011 10:52:37
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

Без загрузки успешной ничего работать не будет. Последовательность должна быть как в L7XX.TST

Борис
05.10.2011 09:43:55
#9

Гость

Re: Загрузка BIOS в плату

Запускал проект L7XX.TST в VC++ 2010 Express.

При компиляции выдает стабильно следующие ошибки:

1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(348): error C2664: CreateFileW: невозможно преобразовать параметр 1 из "const char [9]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(350): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "const char [16]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(354): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "const char [16]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>  CREATE.CPP
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//include//create.cpp(14): error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из "char *" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

Борис
05.10.2011 09:43:58
#10

Гость

Re: Загрузка BIOS в плату

Запускал проект L7XX.TST в VC++ 2010 Express.

При компиляции выдает стабильно следующие ошибки:

1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(348): error C2664: CreateFileW: невозможно преобразовать параметр 1 из "const char [9]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(350): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "const char [16]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//proba win32//proba.cpp(354): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "const char [16]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>  CREATE.CPP
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//projects//include//create.cpp(14): error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из "char *" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

05.10.2011 10:35:20
#11

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

в проекте опции unicode  отключите. в родном проекте там все обычный char

Борис
06.10.2011 03:28:46
#12

Гость

Re: Загрузка BIOS в плату

Продолжаю работать с L7XX.TST в среде MVC++ 2010. Разобрался и победил юникод=). После этого появились следующие ошибки:

1>CLIENT.obj : error LNK2028: ссылка на неразрешенную лексему (0A00039A) "extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PBD1I@Z)
1>CLIENT.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z) в функции "extern "C" int __cdecl MessageBox(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PBD1I@Z)
1>c://documents and settings//admin.microsof-5ac470//мои документы//visual studio 2010//Projects//test2//Debug//test2.exe : fatal error LNK1120: 2 неразрешенных внешних элементов

06.10.2011 10:32:16
#13

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

это в опциях линкера смотрите какие Lib подключаются. поля Input и Command Line...

ykor67
12.03.2013 14:56:57
#14

Гость

Re: Загрузка BIOS в плату

А не могли бы Вы поподробнее объяснить, какие lib и как их надо правильно подключить?

12.03.2013 15:49:18
#15

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка BIOS в плату

для чего?