andreichk
Oct 2 2013, 07:00
Привет народ. Требуется помощь знающих програмистов на визуал студио 10.0 под вин7 небольшого проекта, кот. изначально был написан по юникс системы. на сайте автора вроде говорится, что и под вин должно всё работать.
Вначале я попробовал поставит визуал 10. на свою ОСь вин7. но она не встала, наверное из за того, что винда палёная. тогда я по совету друзей установил виртуалку и сунул в неё винХР и на неё положил визуал. Встало без проблем. После сознания проекта компиляция не удалась, из за отсутствия толи каких-то хедеров , толи какие-то настройки неправильные , вобщем мне непонятно. Может кто-нить возьмётся поглядеть исходники, там все несколько килобайт и скомпилит под винду простое консольное приложение?
Код должен выполнять подключение ФПГА через кипресс, прошивать его и затем выводить какую-то инфу с подключенного к ФПГА АЦП.
вся инфа была взята отсюда:
http://www.makestuff.eu/wordpress/software/fpgalink/http://www.makestuff.eu/wordpress/software...infrastructure/Опережая события , скажу, что железка, которая подключается ко всему этому ,работает, и может прошиваться готовым эксешником flcli.exe, но этого на данном этапе недостаточно, так как надо что-то читать с АЦП и выводить на консоль.
Заранее благодарен. Обещаю в случае успеха выложить красивые фотки ночного неба, если эта железка окончательно заработает.
andreichk
Oct 7 2013, 05:57
Ура !!! Проект удачно скомилировался и заработал. Оказывается надо было просто внешнюю библиотеку подключить: #pragma comment(lib, "c:/tmp/libfpgalink.lib")
Всем спасибо за активную помощь.
andreichk
Nov 10 2013, 16:21
Итак, проект как-то заработал, матрица стала давать картинки. Но проблема в том, что картинки имеют дефекты в виде горизонтальный полос через каждую 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
Nov 12 2013, 22:36
зачистка произведена........ просто тупо выпилил дефектные строки
Код
//======================= проверка кол-ва байтов в строке =====================
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
Nov 24 2013, 11:01
исправил на правильную схему
Цитата(andreichk @ Nov 24 2013, 13:01)

Народ, подскажите, чтобы вывернуть сигнал ,достаточно такой простой схемы на ОУ или нужно что-то похитрее?
Чтобы так вывернуть сигнал - недостаточно.
andreichk
Nov 24 2013, 18:17
спасибо, я уже нашёл правильную схему
andreichk
Dec 1 2013, 20:53
Цитата(andreichk @ Nov 24 2013, 12:01)

исправил на правильную схему
andreichk
Dec 25 2013, 00:24
поднадоела мне командная строка и всякие там батники. Решил под винду красивое приложение собрать на визуале. форму слепил
и даже как-то пришил исходники, которые прошивают и запускают консоль. Но мне ходелось бы сделать так, чтобы инит железки
происходил прямо из оконного приложения.
В общем выглядит это так:
Код
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
Dec 25 2013, 04:50
fpga(67, &string);
Только argc - это кол-во передаваемых параметров как правило. У вас получается передаются 67 параметров - смотрите, поаккуратнее там.
andreichk
Dec 25 2013, 09:38
Спасибо, я попробовал как вы советуете,
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
Dec 25 2013, 21:50
Цитата(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 и посмотреть что треба ышо для загрузки.
более детальный анализ пока опустим. но постарайтесь найти толковый учебник по депенденси утилитке.
Но думаю дальнейших телодвижений не потребуется.
andrewlekar
Dec 26 2013, 05:16
Я так понял, что дллка раньше загружалась, а в новом проекте не загружается. Для начала нужно проверить, как советовал kolobok0, есть ли дллка рядом с запускаемой программой. Если есть, но всё равно не работает, то причина может быть в преобразовании имён функций C/C++. Если дело в преобразовании имён, то как чинить не знаю. Гуглите "dll name mangling".
andreichk
Dec 26 2013, 06:43
дадада, спасибо вам за подсказки, я вначале совсем забыл положить дллку п папку к ехешнику, но это только полдела, понадобилось ещё внаглую завести параметры из батника прямо в переменные внутри процедуры 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
Dec 26 2013, 19:56
Народ подскажите , где в сети нормальный полноценный букварь найти по визуалу? Реально не могу вкурить, как с этих разных кнопочек параметры в код заталкивать
прилагаю проект, то , что работает на данный момент
andreichk
Dec 28 2013, 11:05
Разобрался с кнопочками и зависаниями, теперь приложение не залипает во время экспозиции. Могу вводить разные параметры с ползунков и прочих кнопок.Продолжаю развиваться....
andreichk
Jan 1 2014, 22:01
народ, подскажите битте, как эту строку, кот. определена в одном файле
InfoText->Text = L"Запись в file"+ number_of_file +".raw";
а значение number_of_file высчитывается в другом, оформить так, чтобы оно выводилось на экран не по нажатию какой-нить кнопочки напр., а само обновлялось.....спасибо заранее
Leopoldius
Jan 2 2014, 01:10
Цитата(andreichk @ Jan 2 2014, 00:01)

...
а значение number_of_file высчитывается в другом, оформить так, чтобы оно выводилось на экран не по нажатию какой-нить кнопочки напр., а само обновлялось
...
Для этого в языках высокого уровня, в той же студии смотрите компонент Timer. Он позволяет через равные промежутки выполнять какие то действия. Скажем завести глобальную переменную, в нее ложить данные. Если изменились - взвести флаг. В таймере обработать изменение, сбросить флаг. Сори, без примера. Я из противоположного стана Delphi и паскалей)) Студией только игрался
Немного про таймер для сишарпа
andreichk
Jan 4 2014, 14:37
спасибо за подсказку, вроде даже как-то получилось
Код
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;
}
}
немного подшлифовать и будет то, что доктор прописал...
gosha-z
Jan 14 2014, 07:48
Я как-то упустил момент, в который plain C превратился в Managed C++...
andreichk
Jan 14 2014, 20:16
Цитата(gosha-z @ Jan 14 2014, 08:48)

Я как-то упустил момент, в который plain C превратился в Managed C++...
я как-то вашего вопроса не понял....
andreichk
Feb 10 2014, 09:45
Народ подскажите, в каком месте схему видеоусилителя подправить, чтобы убрать тянучки?
andreichk
Nov 11 2015, 19:46
Привет народ, подскажите плиз, как мне организовать возможность дождаться конца создания файла, чтобы затем вывести его на форму ?
Код
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");
спасибо
Цитата(andreichk @ Feb 10 2014, 12:45)

Народ подскажите, в каком месте схему видеоусилителя подправить, чтобы убрать тянучки?
Я бы С3 уменьшил. Раз в сто. По идее клампится каждый пиксель, то постоянная времени должна быть одного порядка с ним.
Например, в похожей схеме с 10МГц пиксельной частотой переходной конденсатор 120пФ (пикофарад), последовательно с ним резистор 47 Ом.
andreichk
Nov 14 2015, 08:59
Gorby ,с этим я уже разобрался, спасибо.
У меня другая проблема возникла.
Вобщем я добился последовательного вывода картинок на экран, просто тупо вставил временную задержку в 1 секунду между
созданием файла и его выводом. Но при этом я не могу удалить или переписать эти ТИФы из папки, так как они оказываются
открытыми в моём приложении и чтобы удалить их или переписать, нужно вначале приложение закрыть, что не совсем удобно.
Как можно сделать это, не закрывая приложение?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.