对 VeriFone 库的内存可用调用

Memory available calls to VeriFone library

是否有任何开发人员在 svc_swi.h 的 Evo 系列中看到内存调用 VeriFone 库函数的结果不一致?
我们的旧代码似乎适合 Verix/VerixV。但是对于较新的单元(它们的内存比以前的硬件大得多)这些结果出现在我们的监控中:-

Total RAM: 65536k Total Flash: 131072k Available RAM: 114654k Available Flash: 114650k

自从我们将 Evo 添加到我们的马厩以来,获取这些统计数据的代码没有改变。

long GetFileSysAvail(const char *drive) const
{
    fs_size fs;

    fs.Avail = 0;
#ifdef __arm
    (void)dir_get_sizes(drive, &fs);
#else
    dir_get_sizes((char *)drive, &fs);
#endif

    return fs.Avail;
}

我不确定,但我敢猜测——在 Verix 和 VerixV 终端(例如 3740/3750 和 510/570)中,Flash AND RAM 并且您通过在之前指示 I:F: 指定了您想要的 "drive"你的文件名。在 520(我怀疑其他 eVo 终端,但我不确定)中没有(非易失性)RAM,因此即使您指定 I:,您仍然存储到闪存中。

如果您查看 dir_get_sizes 的文档,您会注意到 Verix V 版本中的内容与 eVo 中的内容不同.对我来说真正突出的主要区别是注释:

I: and F: are both on the Nand flash, the “Avail” member of the resulting struct fs_sizes tells the total (I: + F:) available NAND flash memory at the time the function is called.

一切都很好,可以解释为什么 "Available" 高于 "Total",尤其是因为您使用的是不同的 API 以获得总大小(我假设 SVC_RAM_SIZE 和 SVC_FLASH_SIZE),这可能在 I:F: 之间做出某种区分。如果是这种情况,则意味着您仅使用了大约 81954k 的可用存储 space。 ...除了一个烦人的问题:"Available RAM" 比 "Available Flash" 高 4k,我们希望它们是相同的。我无法解释,除非你在调用之间分配 and/or 存储一堆其他东西......?

另一个重要的区别是,虽然 return 和 int,但 Verix V 版本仅表示 -1 在失败时 returned(暗示,但不是明确说明 0 在成功时被 return 编辑),errno 设置为 ENOENTEACCES。另一方面,eVo 版本声明 return 值为 "The available memory in bytes." 将 return 从 dir_get_sizes 编辑的值与中设置的值进行比较可能会很有趣fs.Avail.