Перейти к содержанию
    

Здавствуйте люди!

 

Подскажите кто может, в чем проблема при выделении пямяти под структуру СyUSBdevice

уже месяц бьюсь, не пойму в чем дело. СТУДИЯ видит устройство (су7с68013а)

данные передаються и принимаються, я подключил библиотеку СYUsb.Lib , СYUsb.h

к проекту, компилируеться нормально, но на строке

s_usb_device = new CCyUSBDevice();------ сообщение

"Access vilation at address 004048e1 in module "Project1" write address 0017f62c"

Заранее благодарен, Алексей.

 

 
c++ Bulder

void* usb_init(void)
{
    int i = 2;
CCyUSBDevice*s_usb_device = new CCyUSBDevice();

    // open my device
    if (s_usb_device->DeviceCount()) {
        // search for all connected devices, and add the one that has the right name
        for (i = 0; i < s_usb_device->DeviceCount(); i++) {
            s_usb_device->Open(i);
            if(strcmp (USB_DEVICE_NAME, s_usb_device->DeviceName) == 0)
                break;
            s_usb_device->Close();
        }
    } else {
        // Cannot find my device
        return NULL;
    }

    if (!s_usb_device->IsOpen()) {
        // Could not open my device
        return NULL;
    }

    delete s_usb_device;

  }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Звезду убери

CCyUSBDevice s_usb_device = new CCyUSBDevice();

 

 

Не помогает, все также, вот только при пошаговом исполнении, если просмотреть debug inspect переменную s_usb_device, до исполнения строки

 
CCyUSBDevice s_usb_device = new CCyUSBDevice()

 

поля настроек стали заполнеными, а раньше были не определены, может я что не определил

перед выделением памяти под CYUsbdevice???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, со звездой я погорячился. Попробуй вынести переменную в глобальные. А потом вызвать конструктор.

CCyUSBDevice *USBDevice;

main()
{
...
   USBDevice = new CCyUSBDevice();
....
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, со звездой я погорячился. Попробуй вынести переменную в глобальные. А потом вызвать конструктор.

CCyUSBDevice *USBDevice;

main()
{
...
   USBDevice = new CCyUSBDevice();
....
}

 

Вот пример того что я пытался запустить

 
#include <vcl.h>
#pragma hdrstop
#include "CyAPI.h"

//---------------------------------------------------------------------------

#pragma argsused
CCyUSBDevice *USBDevice;

int main(int argc, char* argv[])
{

USBDevice = new CCyUSBDevice();

int devices = USBDevice->DeviceCount();
int vID, pID;
int d = 0;
do
{
USBDevice->Open(d); // Open automatically calls Close() if necessary
vID = USBDevice->VendorID;
pID = USBDevice->ProductID;
d++;
} while ((d < devices ) && (vID != 0x04b4) && (pID != 0x8613));

return 0;
}

 

пример взят из документации по CYUSB

На строке USBDevice = new CCyUSBDevice(); машина начинает сильно тормозить, но сообщений никаких нет?

раньше я использовал с FT245 -- ot FTDI а сейчас понадобился поток 8 Мбайт/сек

 

Мне кажеться что чего-то не хватает для связи с драйвером CYUSB

Я пробовал найти устройство через

QueryDosDevice(NULL, path, PATH_SIZE);

Устройсво есть но почему то 2 шт, с разными GUID???

 

А для чего эта функция "DeviceIoControl("???

Спасибо за ответ!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На строке USBDevice = new CCyUSBDevice(); машина начинает сильно тормозить, но сообщений никаких нет?

Странно, а строка в конечном итоге проходит или нет??

 

Мне кажеться что чего-то не хватает для связи с драйвером CYUSB

Я пробовал найти устройство через

QueryDosDevice(NULL, path, PATH_SIZE);

Устройсво есть но почему то 2 шт, с разными GUID???

Ты глянь в системе, железо нормально встало?? драйвер подключился?? Драйвер CyUSB.sys??

Ты GUID часом не менял в инф файле при установке драйвера??

по QueryDosDevice нчего не скажу, не пользовался.

 

А для чего эта функция "DeviceIoControl("???

Посылает пакет драйверу устройства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, а строка в конечном итоге проходит или нет??

Ты глянь в системе, железо нормально встало?? драйвер подключился?? Драйвер CyUSB.sys??

Ты GUID часом не менял в инф файле при установке драйвера??

по QueryDosDevice нчего не скажу, не пользовался.

Посылает пакет драйверу устройства.

 

Нет срока не проходит. Builder застрявает на ней, я подождал минутку, потом сбросил.

Нет, GUID я не менял, драйвер СyUSB.sus стал нормально.

USB studio купреса видит устойство, я взял за основу HEX из какогото примера

у немцев ADC2USB там был HEX и прошивка для ПЗУ, все залилось, устройство появляеться сразу как

CYPRESS2USB vid и pid 04в4 и 8613--- две точки Bulk -64 и isohronous 1020

все передаеться принимаеться (через USB студию cypress)

есть еще одна особенность :

при подключении к материнским платам ASrosk c чипом VIA 6202 контроллер сy7c68013 вообще не видиться системой, только если поставить на D- сопротивление 1,5 ком, тогда все видиться, и работает. А ВОТ к плате ASUS отлично, все как по книжке.

Может в кофигурации самого контроллера чото не так??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может в кофигурации самого контроллера чото не так??

Это вряд ли, если, говоришь USB studio работает, то и твоя прога тоже будет. Ты войди в режим отладки(в самом билдере(CPU window) или лучше в стороннем) глянь, на какой функции конструктора класса прога начинает глючить. Глянь в отладчике как исполняется конструктор в USB studio. Все д.б. один в один. Сразу найдешь ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вряд ли, если, говоришь USB studio работает, то и твоя прога тоже будет. Ты войди в режим отладки(в самом билдере(CPU window) или лучше в стороннем) глянь, на какой функции конструктора класса прога начинает глючить. Глянь в отладчике как исполняется конструктор в USB studio. Все д.б. один в один. Сразу найдешь ошибку.

Да это идея, спасибо большое за совет, сейчас буду пробовать!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да это идея, спасибо большое за совет, сейчас буду пробовать!!!

 

Привет всем!

Попробовал отладчиком, так вот мой проект очень похоже обращаеться к какой-то области памяти

и система выдает ошибку. До конструктора помоему дело и не доходит ???

Очень похоже на ошибку, корая возникает при нарушении границ массивов(я имею ввиду сообщение WINDOWS)

вот конфигурация USB и участок CPU viem ----переменной USBDevice.

это конфигурация USB 1.1
(fullspeed)
через USBviem

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type: Isochronous
wMaxPacketSize:     0x03FC (1020)
bInterval:            0x01

Configuration Descriptor:
wTotalLength:       0x0029
bNumInterfaces:       0x01
bConfigurationValue:  0x01
iConfiguration:       0x03
0x0407: "Busversorgt, kein Aufwecken"
bmAttributes:         0x80 (Bus Powered )
MaxPower:             0x4B (150 Ma)

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0xFF
bInterfaceSubClass:   0xFF
bInterfaceProtocol:   0xFF
iInterface:           0x04
0x0407: "Interface ohne Bandbreite, nur Bulk"

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x01
bNumEndpoints:        0x01
bInterfaceClass:      0xFF
bInterfaceSubClass:   0xFF
bInterfaceProtocol:   0xFF
iInterface:           0x05

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type: Isochronous
wMaxPacketSize:     0x03FC (1020)
bInterval:            0x01

=====================================================================
Вот окно CPU viem

naemec_cosole.cpp.15: USBDevice = new CCyUSBDevice();///--break point
0040139C 689C090000       push $0000099c
004013A1 E866280000       call $00403c0c
004013A6 59               pop ecx
004013A7 8945FC           mov [ebp-$04],eax
004013AA 85C0             test eax,eax
004013AC 7438             jz $004013e6
004013AE 66C745E81800     mov word ptr [ebp-$18],$0018
004013B4 6A01             push $01
004013B6 FF35D0404000     push dword ptr [$004040d0]
004013BC FF35CC404000     push dword ptr [$004040cc]
004013C2 FF35C8404000     push dword ptr [$004040c8]
004013C8 FF35C4404000     push dword ptr [$004040c4]
004013CE 6A00             push $00
004013D0 FF75FC           push dword ptr [ebp-$04]
004013D3 E86C030000       call $00401744          /// вот на этой строке происходит сбой
это значение  00401744 было в сообщении.


004013D8 83C41C           add esp,$1c

 

 

Не знаю, может что-то в конфигурации USB в самой системе, кстати пробовал

и WIn2000, WINXP на разных машинах???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собери это проект, отключив на закладке Linker галку Use dynamic RTL и выложи здесь exeшник. У меня щас есть плата с сайпресом, попробую у себя твой exeшник. А вообще надо идти по коду глубже и смотреть какая именно простейшая команда вызвала Exception.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собери это проект, отключив на закладке Linker галку Use dynamic RTL и выложи здесь exeшник. У меня щас есть плата с сайпресом, попробую у себя твой exeшник. А вообще надо идти по коду глубже и смотреть какая именно простейшая команда вызвала Exception.

 

вот архив, в нем

ADC2USB там HEX и т.д.

и проэкт С++ Builder

Proj.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У тебя какой Билдер?? Явно не шестой. EXe-шник не запускается - при сборке галку не убрал. Проект Билдера пустой =\ Сдается мне, что библиотека не подходит под твою версию Билдера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С этим Cypress API есть довольно неприятная хреновина (или фича?), библиотека работает ТОЛЬКО при компиляции с Data Alignment = 8 (Quad Word), в противном случае вываливается в точности как у Вас. Чтобы не трогать проект, необходимо в CyAPI.h добавить тройку строчек с #pragma pack:

//______________________________________________________________________________
//
// Copyright (c) Cypress Semiconductor, 2003
// All rights reserved.
//
//______________________________________________________________________________

#ifndef CyUSBH
#define CyUSBH

#pragma pack(push)
#pragma pack(8)

.....

#pragma pack(pop)

#endif

У меня после этого все завелось и работает без проблем независимо от data alignment :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У тебя какой Билдер?? Явно не шестой. EXe-шник не запускается - при сборке галку не убрал. Проект Билдера пустой =\ Сдается мне, что библиотека не подходит под твою версию Билдера.

 

У меня не шестой, у меня Borland Developer Studio

 

Borland® C++Builder® Preview for Microsoft® Windows™ Version 10.0.2151.25345 Copyright © 2005 Borland® Software Corporation. All Rights Reserved.

 

НЕУЖЕЛИ ИЗ-ЗА ЭТОГО ????????, у меня есть шестой, может поробовать, мне казалось этот лучше?

тут все борландовские примочки есть?

я тоже заметил что если взять библиотеку VC++ и подсунуть ему

то реакция без изменений.

 

ПРОШУ ПРОЩЕНИЯ я не заметил что путь срр изменен.

Вот опять архив, галка убрана.

 

 

 

У тебя какой Билдер?? Явно не шестой. EXe-шник не запускается - при сборке галку не убрал. Проект Билдера пустой =\ Сдается мне, что библиотека не подходит под твою версию Билдера.

 

У меня не шестой, у меня Borland Developer Studio

 

Borland® C++Builder® Preview for Microsoft® Windows™ Version 10.0.2151.25345 Copyright © 2005 Borland® Software Corporation. All Rights Reserved.

 

НЕУЖЕЛИ ИЗ-ЗА ЭТОГО ????????, у меня есть шестой, может поробовать, мне казалось этот лучше?

тут все борландовские примочки есть?

я тоже заметил что если взять библиотеку VC++ и подсунуть ему

то реакция без изменений.

 

ПРОШУ ПРОЩЕНИЯ я не заметил что путь срр изменен.

Вот опять архив, галка убрана.

 

:wub:

 

С этим Cypress API есть довольно неприятная хреновина (или фича?), библиотека работает ТОЛЬКО при компиляции с Data Alignment = 8 (Quad Word), в противном случае вываливается в точности как у Вас. Чтобы не трогать проект, необходимо в CyAPI.h добавить тройку строчек с #pragma pack:

//______________________________________________________________________________
//
// Copyright (c) Cypress Semiconductor, 2003
// All rights reserved.
//
//______________________________________________________________________________

#ifndef CyUSBH
#define CyUSBH

#pragma pack(push)
#pragma pack(8)

.....

#pragma pack(pop)

#endif

У меня после этого все завелось и работает без проблем независимо от data alignment :)

 

 

я посмотрел в настройках у меня стоит Data Alignment = 8 (Quad Word) ???

nemec_console.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...