从NiFpga.h了解NiFpga_ReadU64(...)函数

时间:2019-06-24 18:20:28

标签: c++ fpga

[background]/// NiFpga_ReadU64()函数是从NiFpga.h标头提供的,并提供了一些文档,我想在别人的帮助下更好地理解它。我在代替第二个参数的函数调用中遇到了这个问题。 foo(arg1, NiFpga_ReadU64(*sessionPtr1, ControlU64, &scans)) 其中ContorolU64实际上是在其他地方定义为type_em的

typedef enum
{
    //ControlU64 = 0x8... some sort of an address
} NiFpga_Session1_ControlU64;`

从文档中了解到,函数NiFpga_ReadU64()从当前打开的会话的指定指标(或控制)参数中读取(也作为参数传递)并读取一个值。该函数的返回值为NiFpga_Status类型。 ///[background]

我的问题与return statement ? x : y;的执行有关。 因为NiFpga_readU64是在我们的位文件中初始化的函数指针,所以语句return NiFpga_readU64 ? x : y将始终返回x,因为NiFpga_readU64已被初始化。因此,首先,我想检查一下我的逻辑在将函数指针NiFpga_readU64评估为 true / false语句时是否正确。其次,我真正困惑的地方是x语句:NiFpga_readU64(session, indicator, value)。我在这里迷路了,因为NiFpga_readU64是一个函数指针,并且提供的唯一文档是在结构定义中,该结构声明中指出NiFpgaDll_ReadU64,因此我可以想象它正在引用某个函数DLL-其他地方的ReadU64函数并评估其作用,但是我不了解它如何实际评估它以及它对任何硬件进行了哪些更改。

/**
 * Represents the resulting status of a function call through its return value.
 * 0 is success, negative values are errors, and positive values are warnings.
 */
typedef int32_t NiFpga_Status;

//NiFpga_readU64 value is part of a struct:

/**
 * A NULL-terminated array of all entry point functions.
 */
static const struct
{
   const char* const name;
   NiFpga_FunctionPointer* const address;
} NiFpga_functions[] =
{
    //...
    {"NiFpgaDll_ReadU64", (NiFpga_FunctionPointer*) &NiFpga_readU64},
    {NULL, NULL}
};

//NiFpga_ReadU64()
/**
 * Reads an unsigned 64-bit integer value from a given indicator or control.
 *
 * @param session handle to a currently open session
 * @param indicator indicator or control from which to read
 * @param value outputs the value that was read
 * @return result of the call
 */
static NiFpga_Status (NiFpga_CCall *NiFpga_readU64)(
                             NiFpga_Session session,
                             uint32_t       indicator,
                             uint64_t*      value) = NULL;

NiFpga_Status NiFpga_ReadU64(NiFpga_Session session,
                             uint32_t       indicator,
                             uint64_t*      value)
{
   return NiFpga_readU64
        ? NiFpga_readU64(session, indicator, value) //confused about this line
        : NiFpga_Status_ResourceNotInitialized;
}     

正如我所说,我希望函数始终执行NiFpga_readU64(会话,指标,值),但是我不确定这样做是什么。 (调用此函数的功能基本上是要获取此新值,以便它可以将某个变量设置为此值,对于我来说,此函数的整个目标应该是返回值部分或至少使用它来更新在内存中的某个位置注册。)

让我知道这是否比原始帖子更好。谢谢。

0 个答案:

没有答案