当使用NI工具创建FPGA位文件时,LabView会生成一个C .h文件,其中包含与FPGA应用程序通信的信息,例如签名(const)和寄存器地址(作为枚举)。
挑战在于我的应用程序是用C#编写的,我需要访问这些寄存器地址。
我能想到的唯一选择是:
必须有更好的方法!!!
示例.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 :(得分:0)
鉴于它可能只是你需要解析的一小部分东西,事实上,它不需要解析,但可能只是做一些文本操作/搜索替换。这不应该太难。此外,您可以使用C ++ .NET将内容包装到可以从C#中使用的API中。
你也可以想看看'SWIG'
之类的东西答案 1 :(得分:0)
我通过向包含.h文件的解决方案添加C ++ / CLI项目并通过托管静态方法公开信息来解决了这个问题。
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,
};
};