Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проект на Визуал студио Си 10.0 под винду
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
andreichk
Привет народ. Требуется помощь знающих програмистов на визуал студио 10.0 под вин7 небольшого проекта, кот. изначально был написан по юникс системы. на сайте автора вроде говорится, что и под вин должно всё работать.
Вначале я попробовал поставит визуал 10. на свою ОСь вин7. но она не встала, наверное из за того, что винда палёная. тогда я по совету друзей установил виртуалку и сунул в неё винХР и на неё положил визуал. Встало без проблем. После сознания проекта компиляция не удалась, из за отсутствия толи каких-то хедеров , толи какие-то настройки неправильные , вобщем мне непонятно. Может кто-нить возьмётся поглядеть исходники, там все несколько килобайт и скомпилит под винду простое консольное приложение?
Код должен выполнять подключение ФПГА через кипресс, прошивать его и затем выводить какую-то инфу с подключенного к ФПГА АЦП.
вся инфа была взята отсюда: http://www.makestuff.eu/wordpress/software/fpgalink/
http://www.makestuff.eu/wordpress/software...infrastructure/

Опережая события , скажу, что железка, которая подключается ко всему этому ,работает, и может прошиваться готовым эксешником flcli.exe, но этого на данном этапе недостаточно, так как надо что-то читать с АЦП и выводить на консоль.
Заранее благодарен. Обещаю в случае успеха выложить красивые фотки ночного неба, если эта железка окончательно заработает.
andreichk
Ура !!! Проект удачно скомилировался и заработал. Оказывается надо было просто внешнюю библиотеку подключить: #pragma comment(lib, "c:/tmp/libfpgalink.lib") rolleyes.gif
Всем спасибо за активную помощь. santa2.gif
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);                             // закрываем файл
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;  
}}}}}
andreichk
исправил на правильную схему
OlegH
Цитата(andreichk @ Nov 24 2013, 13:01) *
Народ, подскажите, чтобы вывернуть сигнал ,достаточно такой простой схемы на ОУ или нужно что-то похитрее?


Чтобы так вывернуть сигнал - недостаточно.
andreichk
спасибо, я уже нашёл правильную схему
andreichk
Цитата(andreichk @ Nov 24 2013, 12:01) *
исправил на правильную схему

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[])
andrewlekar
fpga(67, &string);

Только argc - это кол-во передаваемых параметров как правило. У вас получается передаются 67 параметров - смотрите, поаккуратнее там.
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")
в коде присутствует. Мне непонятно, какую именно процедуру не находит в ней?
kolobok0
Цитата(andreichk @ Dec 25 2013, 13:38) *
...System.DllNotFoundException: Не удается загрузить DLL "libfpgalink.dll": Не найдена указанная процедура. (Исключение из HRESULT: 0x8007007F)
...либа #pragma comment (lib, "c:/winVS2010/KAF1301E/libfpgalink.lib")
в коде присутствует. Мне непонятно, какую именно процедуру не находит в ней?


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

я так понимаешь у Вас юзается не явная загрузка дэлеле.
Что нуна сделать:
1) проверить наличие указанной дэлеле по стандартным путям поиска загружаемых дэлеле. Просче всего подложить рядом с запускаемым экзешником.
2) убедиться в правильной версионности этой либы. т.е. файл описания именно от этой либы.
3) убедиться, что всё что может загружать данная дэлеле - так-же лежит рядом(лучше, пока в каталоге загрузки экзешника).
Для этого необходимо загрузить утилитку Dependency и посмотреть что треба ышо для загрузки.

более детальный анализ пока опустим. но постарайтесь найти толковый учебник по депенденси утилитке.
Но думаю дальнейших телодвижений не потребуется. sm.gif
andrewlekar
Я так понял, что дллка раньше загружалась, а в новом проекте не загружается. Для начала нужно проверить, как советовал kolobok0, есть ли дллка рядом с запускаемой программой. Если есть, но всё равно не работает, то причина может быть в преобразовании имён функций C/C++. Если дело в преобразовании имён, то как чинить не знаю. Гуглите "dll name mangling".
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;


и только после всего этого оно заработало......
щас у меня уже другие проблемы. надо научиться правильно перемещать всякие разные значения из процедур в форму и обратно, чтобы на форме какие-нить тексты писало, числа и чтобы с формы с кнопочек и ползунков задавать нужные настройки. Тут ещё вопросов миллион не меньше будет, так что борюсь с синтаксисом
andreichk
Народ подскажите , где в сети нормальный полноценный букварь найти по визуалу? Реально не могу вкурить, как с этих разных кнопочек параметры в код заталкивать
прилагаю проект, то , что работает на данный момент
andreichk
Разобрался с кнопочками и зависаниями, теперь приложение не залипает во время экспозиции. Могу вводить разные параметры с ползунков и прочих кнопок.Продолжаю развиваться.... smile3046.gif
andreichk
народ, подскажите битте, как эту строку, кот. определена в одном файле
InfoText->Text = L"Запись в file"+ number_of_file +".raw";

а значение number_of_file высчитывается в другом, оформить так, чтобы оно выводилось на экран не по нажатию какой-нить кнопочки напр., а само обновлялось.....спасибо заранее
Leopoldius
Цитата(andreichk @ Jan 2 2014, 00:01) *
...
а значение number_of_file высчитывается в другом, оформить так, чтобы оно выводилось на экран не по нажатию какой-нить кнопочки напр., а само обновлялось
...


Для этого в языках высокого уровня, в той же студии смотрите компонент Timer. Он позволяет через равные промежутки выполнять какие то действия. Скажем завести глобальную переменную, в нее ложить данные. Если изменились - взвести флаг. В таймере обработать изменение, сбросить флаг. Сори, без примера. Я из противоположного стана Delphi и паскалей)) Студией только игрался

Немного про таймер для сишарпа
andreichk
спасибо за подсказку, вроде даже как-то получилось

Код
void textinformation(void)//тексты на экран
   {
      
               Col->Text = ""+color;
               Jar->Text = ""+jarkost;
               Kon->Text = ""+kontrast;
          TempText->Text = (float)Temp_Peltier/5 + L" °C";
          InfoText->Text = L"Запись в file"+ number_of_file +L".raw";
            TPtext->Text = L"Т.CCD: " + (float) peltier_current(Temp_Peltier)/10 + L" °C";// Т.пельтье  на экран
   }

private:

void InitializeTimer()
   {
      // Run this procedure in an appropriate event.
      timer1->Interval = 500;
      timer1->Enabled = true;
      // Hook up timer's tick event handler.
      this->timer1->Tick += gcnew System::EventHandler(this, &ASTROKAMERA::timer1_Tick);
   }

void timer1_Tick(System::Object ^ sender, System::EventArgs ^ e)
   {
     if (number_of_file)
        {
         timer1->Enabled = false;
         textinformation();//ВЫВОД ТЕКСТОВОЙ ИНФОРМАЦИИ КАЖДЫЕ 500 мсек
         timer1->Enabled = true;
        }
   }

немного подшлифовать и будет то, что доктор прописал... rolleyes.gif
gosha-z
Я как-то упустил момент, в который plain C превратился в Managed C++...
andreichk
Цитата(gosha-z @ Jan 14 2014, 08:48) *
Я как-то упустил момент, в который plain C превратился в Managed C++...
я как-то вашего вопроса не понял.... laughing.gif
andreichk
Народ подскажите, в каком месте схему видеоусилителя подправить, чтобы убрать тянучки?
andreichk
Привет народ, подскажите плиз, как мне организовать возможность дождаться конца создания файла, чтобы затем вывести его на форму ?

Код
char* cmd_line = (char*)(void*)Marshal::StringToHGlobalAnsi("c:\\Astrokamera_Dalsa\\Release\\GnuWin32\\bin\\raw2tiff.exe -H0 -w "\
                 +Size_Wert_Hor_to_file+" -l "+Size_Wert_Vert_to_file+" -b1 -dshort -ipixel -p minisblack -L c:\\file\\FTF5066C_"\
             +Size_Wert_Hor_to_file+"x"+Size_Wert_Vert_to_file+"_flat_"+numb+".raw c:\\file\\FTF5066C_"+Size_Wert_Hor_to_file+"x"\
        +Size_Wert_Vert_to_file+"_flat_"+numb+".tif");

        WinExec(cmd_line, SW_SHOW);

        Marshal::FreeHGlobal((System::IntPtr)cmd_line);
}

вот в этом месте надо организовать возможность дождаться конца создания файла
//===========последовательный вывод на экран картинок из каталога======================================================

  this->  pictureBox1->BackgroundImage = BackgroundImage->FromFile("c:\\file\\FTF5066C_"+Size_Wert_Hor_to_file+"x"+Size_Wert_Vert_to_file+"_flat_"+numb+".tif");


спасибо
Gorby
Цитата(andreichk @ Feb 10 2014, 12:45) *
Народ подскажите, в каком месте схему видеоусилителя подправить, чтобы убрать тянучки?

Я бы С3 уменьшил. Раз в сто. По идее клампится каждый пиксель, то постоянная времени должна быть одного порядка с ним.
Например, в похожей схеме с 10МГц пиксельной частотой переходной конденсатор 120пФ (пикофарад), последовательно с ним резистор 47 Ом.
andreichk
Gorby ,с этим я уже разобрался, спасибо.
У меня другая проблема возникла.
Вобщем я добился последовательного вывода картинок на экран, просто тупо вставил временную задержку в 1 секунду между
созданием файла и его выводом. Но при этом я не могу удалить или переписать эти ТИФы из папки, так как они оказываются
открытыми в моём приложении и чтобы удалить их или переписать, нужно вначале приложение закрыть, что не совсем удобно.
Как можно сделать это, не закрывая приложение?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.