2014-01-22 3 views
0

При использовании инструментов NI для создания файла бит FPGA LabView генерирует файл C.h, который содержит информацию для связи с приложением FPGA, таким как подпись (константа) и регистрировать адреса (как перечисления).Как получить доступ к информации о файле .h из C#

Проблема заключается в том, что мое приложение написано на C#, а мне нужен доступ к этим адресам регистра.

Единственные варианты я могу думать о том, являются:

  1. вырезать и вставить содержимое файла .h в .cs файл ~~~~ ... дает мне дрожь, С # один разработчик и FPGA - другой.
  2. Разбираем файл .h ~~~~ ... дает мне мурашки тоже - писать свой собственный язык парсер :(

Там получил быть лучше !!!

Sample .h:.

/* 
* Generated with the FPGA Interface C API Generator 12.0.0 
* for NI-RIO 12.0.0 or later. 
*/ 

#ifndef __NiFpga_M_OTRM_OVDFPGA_h__ 
#define __NiFpga_M_OTRM_OVDFPGA_h__ 

#ifndef NiFpga_Version 
    #define NiFpga_Version 1200 
#endif 

#include "NiFpga.h" 

/** 
* The filename of the FPGA bitfile. 
* 
* This is a #define to allow for string literal concatenation. For example: 
* 
* static const char* const Bitfile = "C:\\" NiFpga_M_OTRM_OVDFPGA_Bitfile; 
*/ 
#define NiFpga_M_OTRM_OVDFPGA_Bitfile "NiFpga_M_OTRM_OVDFPGA.lvbitx" 

/** 
* The signature of the FPGA bitfile. 
*/ 
static const char* const NiFpga_M_OTRM_OVDFPGA_Signature = "D0751ADE3A0EC976606D63C425B35E85"; 

typedef enum 
{ 
    NiFpga_M_OTRM_OVDFPGA_IndicatorBool_FallingEdge = 0x8132, 
    NiFpga_M_OTRM_OVDFPGA_IndicatorBool_StopSignal = 0x813A, 
} NiFpga_M_OTRM_OVDFPGA_IndicatorBool; 

.... 

#endif 
+0

Можете ли вы опубликовать пример файла .h? –

+0

Если это достаточно просто, регулярное выражение. В противном случае gcc-xml –

+0

Как лучший способ опубликовать пример .h-файла? – markshancock

ответ

0

Я решил проблему, добавив проект C++/CLI для решения, которое включает в файл .h и выставляет информацию через управляемые статические методы.

public ref class OTRM_Ovd_FPGA 
{ 
public: 
    static System::String^ GetFilename() { return gcnew System::String(NiFpga_M_OTRM_OVDFPGA_Bitfile);}; 
    static System::String^ GetSignature() { return gcnew System::String(NiFpga_M_OTRM_OVDFPGA_Signature);}; 

    enum class RegisterAddress : System::UInt16 
    { 
     InitialPulseAmplitude = NiFpga_M_OTRM_OVDFPGA_IndicatorU16_ExtPulseAmplitudeDisplay, 
     CurrentPulseAmplitude = NiFpga_M_OTRM_OVDFPGA_IndicatorU16_ExtPulseAmplitudeDisplay, 
     PulseAmplitudeDecrement = NiFpga_M_OTRM_OVDFPGA_ControlU16_Decrement_Step, 
     PollPeriod = NiFpga_M_OTRM_OVDFPGA_ControlI16_Frequency_ms, 
     HvprotState = NiFpga_M_OTRM_OVDFPGA_ControlI16_HVProt, 
     PaceThreshold = NiFpga_M_OTRM_OVDFPGA_ControlI16_VVIThreshold, 
    }; 
}; 
+0

В конечном итоге это будет хорошо работать. В конце концов я могу переместить файлы FPGA (включая сгенерированный файл .h) из сборки приложения в сборку FPGA и сделать сборку приложения зависимой от сборки FPGA. Тогда разработчик FPGA может работать в своем пространстве, не заботясь о том, какие сборки используют его работу ... то есть до тех пор, пока он не сломает свою сборку, которую поймает сервер сборки, который автоматически отправит его, разработчика приложения (и меня) электронное письмо. NICE (IMHO) – markshancock

+0

именно то, что я говорил для вас, чтобы сделать ... –

+0

Спасибо Keith, получить синтаксис, чтобы заставить это работать, было намного больше усилий, чем я ожидал, поэтому я хотел показать фактическое решение. – markshancock

0

учитывая его скорее всего лишь небольшое подмножество вещей, которые нужно разобрать, на самом деле, он не должен разобрать, но, вероятно, просто сделать несколько текстовых манипуляций/поиск заменяет это не должно слишком сложно. Кроме того, вы можете использовать C++. NET, чтобы обернуть вещи в API, который вы можете использовать с C#.

Также вы можете посмотреть на что-то вроде «SWIG»

http://www.swig.org/

+0

«C++. NET». Вы имеете в виду C++/CLI. –

+0

. Я не хочу обновлять FPGA, чтобы потребовать изменения кода (в худшем случае построить обновление). – markshancock

+0

не будет, если это не изменится? –

Смежные вопросы