Jump to content

    

Проект на Визуал студио Си 10.0 под винду

Recommended Posts

andreichk

Привет народ. Требуется помощь знающих програмистов на визуал студио 10.0 под вин7 небольшого проекта, кот. изначально был написан по юникс системы. на сайте автора вроде говорится, что и под вин должно всё работать.

Вначале я попробовал поставит визуал 10. на свою ОСь вин7. но она не встала, наверное из за того, что винда палёная. тогда я по совету друзей установил виртуалку и сунул в неё винХР и на неё положил визуал. Встало без проблем. После сознания проекта компиляция не удалась, из за отсутствия толи каких-то хедеров , толи какие-то настройки неправильные , вобщем мне непонятно. Может кто-нить возьмётся поглядеть исходники, там все несколько килобайт и скомпилит под винду простое консольное приложение?

Код должен выполнять подключение ФПГА через кипресс, прошивать его и затем выводить какую-то инфу с подключенного к ФПГА АЦП.

вся инфа была взята отсюда: http://www.makestuff.eu/wordpress/software/fpgalink/

http://www.makestuff.eu/wordpress/software...infrastructure/

 

Опережая события , скажу, что железка, которая подключается ко всему этому ,работает, и может прошиваться готовым эксешником flcli.exe, но этого на данном этапе недостаточно, так как надо что-то читать с АЦП и выводить на консоль.

Заранее благодарен. Обещаю в случае успеха выложить красивые фотки ночного неба, если эта железка окончательно заработает.

Share this post


Link to post
Share on other sites

andreichk

Ура !!! Проект удачно скомилировался и заработал. Оказывается надо было просто внешнюю библиотеку подключить: #pragma comment(lib, "c:/tmp/libfpgalink.lib") :rolleyes:

Всем спасибо за активную помощь. :santa2:

Share this post


Link to post
Share on other sites

andreichk

Итак, проект как-то заработал, матрица стала давать картинки. Но проблема в том, что картинки имеют дефекты в виде горизонтальный полос через каждую 25 строку , начиная с третьей.

 

Програмисты - Сишники , допоможите убогому от полос избавиться, замучился уже.....

вот код записи данных с буфера, в который собрались данные с потока, кот. считан с АЦП:

 

st=0x00;stt=0x00;line=0;p=0;
newline: //==========  поиск заголовка новой строки  ======================================
for(p=0; p<2689248; ++p)
     {                                           
  if(buf[p]==0x55){
       if(buf[p+1]==0xAA){  
           if(buf[p+4]==st 
            && buf[p+5]==stt) { 
                         if(p==2689248) goto newline; //обходим запись по достижении конца счёта битов
                                 else { // обрезка справа. тут только нечётное число
         if(line!=line+27) memcpy(&buf2[line*2613], &buf[p], 2613); // запись во второй буфер 
                                        goto countline;             // считаем строки
                                      }
                              } 
                        }
                 }
    }
//===============================================================================
for(ever){
countline:   if(st++ == 254){stt++;st=0;}   // считаем строки
             if(++line == 1027) break;      // прыжок на запись в файл по окончании записи  
                    else goto newline;      // подпрыгиваем вверх на поиск новой строки 
          }//===============================================================================
tut:       fwrite(buf2,sizeof(uint8),2689248,file);  // запись в файл
           fclose(file);                             // закрываем файл

post-16143-1384100453_thumb.jpg

Share this post


Link to post
Share on other sites

andreichk

зачистка произведена........ просто тупо выпилил дефектные строки

 

//======================= проверка кол-ва байтов в строке =====================
line=0;
for(p=0;p<2689248;++p)
{                         cc++;// считаем кол-во байт данных после маркера.

             if(buf[p]==0x55) { 
                    if(buf[p+1]==0xAA) {  
                                  if(buf[p+2]==0x00){
                                          if(buf[p+3]==0x00){ 
                                                 
if(cc==2612) memcpy(&buf4[++line*2611], &buf[p-cc], 2611); //выпиливаем бракованные строки

                                             cc = 0;  
}}}}}

post-16143-1384295811_thumb.jpg

Share this post


Link to post
Share on other sites

OlegH
Народ, подскажите, чтобы вывернуть сигнал ,достаточно такой простой схемы на ОУ или нужно что-то похитрее?

 

Чтобы так вывернуть сигнал - недостаточно.

Share this post


Link to post
Share on other sites

andreichk

поднадоела мне командная строка и всякие там батники. Решил под винду красивое приложение собрать на визуале. форму слепил

и даже как-то пришил исходники, которые прошивают и запускают консоль. Но мне ходелось бы сделать так, чтобы инит железки

происходил прямо из оконного приложения.

В общем выглядит это так:

 

int fpga(int argc, const char *argv[]) {
....................................тут код
}

 

а вызов процедуры я пытаюсь сделать так:

 

char string[] = "-i 04b4:8613 -v 04b4:8613 -p -x c:/winVS2010/KAF1301E/kaf1301.xsvf";
   fpga(67, string);

 

только он ниразу не хочет компилиться и пишет мне что:

 

1>c:\winvs2010\kaf1301e\ASTROKAMERA.h(1024): error C2664: fpga: невозможно преобразовать параметр 2 из "char [67]" в "const char *[]"

1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

а я в толк не возьму, чего ему от меня надо? Подскажите приз, как правильно аргументы загонять в int fpga(int argc, const char *argv[])

Share this post


Link to post
Share on other sites

andrewlekar

fpga(67, &string);

 

Только argc - это кол-во передаваемых параметров как правило. У вас получается передаются 67 параметров - смотрите, поаккуратнее там.

Share this post


Link to post
Share on other sites

andreichk

Спасибо, я попробовал как вы советуете,

 

char *string = "-i 04b4:8613 -v 04b4:8613 -p -x c:/winVS2010/KAF1301E/kaf1301.xsvf";

fpga(6, &string);

 

теперь компилит, но при попытке вызова выскакивает ошибка

 

 

 

************** Текст исключения **************

System.DllNotFoundException: Не удается загрузить DLL "libfpgalink.dll": Не найдена указанная процедура. (Исключение из HRESULT: 0x8007007F)

в flFreeFile(Byte* )

в fpga(Int32 argc, SByte** argv)

в KAF1301E.ASTROKAMERA.kAF1301EToolStripMenuItem1_Click(Object sender, EventArgs e)

в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)

в System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)

в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)

в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)

в System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)

в System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)

в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)

в System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)

в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

в System.Windows.Forms.Control.WndProc(Message& m)

в System.Windows.Forms.ScrollableControl.WndProc(Message& m)

в System.Windows.Forms.ToolStrip.WndProc(Message& m)

в System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)

в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

 

 

ну и конечно ничего не работает. хотя либа #pragma comment (lib, "c:/winVS2010/KAF1301E/libfpgalink.lib")

в коде присутствует. Мне непонятно, какую именно процедуру не находит в ней?

Share this post


Link to post
Share on other sites

kolobok0
...System.DllNotFoundException: Не удается загрузить DLL "libfpgalink.dll": Не найдена указанная процедура. (Исключение из HRESULT: 0x8007007F)

...либа #pragma comment (lib, "c:/winVS2010/KAF1301E/libfpgalink.lib")

в коде присутствует. Мне непонятно, какую именно процедуру не находит в ней?

 

юзанье либ делится на статическое и динамическое. динамическая загрузка дэлеле под форточками делится на явную и не явную.

явная - это когда Вы зовёте ручками лоадлайбрэри и гэт для нужной вам функции.

не явная - это когда делаете в свой проект импорт либы, в которой находится вся необходимая инфа для динамической загрузки дэлеле.

 

я так понимаешь у Вас юзается не явная загрузка дэлеле.

Что нуна сделать:

1) проверить наличие указанной дэлеле по стандартным путям поиска загружаемых дэлеле. Просче всего подложить рядом с запускаемым экзешником.

2) убедиться в правильной версионности этой либы. т.е. файл описания именно от этой либы.

3) убедиться, что всё что может загружать данная дэлеле - так-же лежит рядом(лучше, пока в каталоге загрузки экзешника).

Для этого необходимо загрузить утилитку Dependency и посмотреть что треба ышо для загрузки.

 

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

Но думаю дальнейших телодвижений не потребуется. :)

Edited by kolobok0

Share this post


Link to post
Share on other sites

andrewlekar

Я так понял, что дллка раньше загружалась, а в новом проекте не загружается. Для начала нужно проверить, как советовал kolobok0, есть ли дллка рядом с запускаемой программой. Если есть, но всё равно не работает, то причина может быть в преобразовании имён функций C/C++. Если дело в преобразовании имён, то как чинить не знаю. Гуглите "dll name mangling".

Edited by andrewlekar

Share this post


Link to post
Share on other sites

andreichk

дадада, спасибо вам за подсказки, я вначале совсем забыл положить дллку п папку к ехешнику, но это только полдела, понадобилось ещё внаглую завести параметры из батника прямо в переменные внутри процедуры fpga(). То есть именно вот так:

 

//const char *vp = NULL, *ivp = NULL, *jtagPort = NULL, *xsvfFile = NULL, *dataFile = NULL;

const char *vp = "04b4:8613",

*ivp = "04b4:8613",

*jtagPort = NULL,

*xsvfFile = "c:/winVS2010/KAF1301E/kaf1301.xsvf",

*dataFile = NULL;

bool scan = false,

usbPower = true;//false;

 

и только после всего этого оно заработало......

щас у меня уже другие проблемы. надо научиться правильно перемещать всякие разные значения из процедур в форму и обратно, чтобы на форме какие-нить тексты писало, числа и чтобы с формы с кнопочек и ползунков задавать нужные настройки. Тут ещё вопросов миллион не меньше будет, так что борюсь с синтаксисом

Share this post


Link to post
Share on other sites

andreichk

Народ подскажите , где в сети нормальный полноценный букварь найти по визуалу? Реально не могу вкурить, как с этих разных кнопочек параметры в код заталкивать

прилагаю проект, то , что работает на данный момент

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.