1

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

总 RAM:65536k 总闪存:131072k 可用 RAM:114654k 可用闪存: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;
}
4

1 回答 1

1

我不确定,但我会冒险猜测——在 Verix 和 VerixV 终端(例如 3740/3750 和 510/570)中,既有闪存也有 RAM,并且您指定了您想要的“驱动器”指示或在您的文件名之前。在 520 中(我怀疑其他 eVo 终端,但我不确定)没有(非易失性)RAM,因此即使您指定,您仍然存储到闪存中。 I:F:I:

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

I: 和 F: 都在 Nand 闪存上,结果结构 fs_sizes 的“Avail”成员告诉函数调用时可用的 NAND 闪存总数 (I: + F:)。

这一切都很好,可以解释为什么“可用”高于“总”,特别是因为您使用不同的 API 来获取总大小(我假设 SVC_RAM_SIZE 和 SVC_FLASH_SIZE)这可能会产生某种I:和的区别F:。如果是这种情况,则意味着您仅使用了大约 81954k 的可用存储空间。...除了一个烦人的问题:“可用 RAM”比“可用闪存”高 4k,我们希望它们是相同的。除非您在调用之间分配和/或存储一堆其他东西,否则我无法解释......?

另一个显着的区别是,虽然两者都返回 an int,但 Verix V 版本仅指示失败时返回 -1(暗示但未明确说明成功时返回 0),而 errno 设置为ENOENTor EACCES。另一方面,eVo 版本声明返回值为“可用内存(以字节为单位)”。dir_get_sizes将返回的值与 中的集合进行比较可能会很有趣fs.Avail

于 2015-08-18T16:44:22.377 回答