是否有任何开发人员发现在 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:
来指定您想要的“驱动器”。在 520(我怀疑其他 eVo 终端,但我不确定)中没有(非 volatile )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.
这一切都很好,可以解释为什么“可用”高于“总计”,特别是因为您使用不同的 API 来获取总大小(我假设 SVC_RAM_SIZE 和SVC_FLASH_SIZE) 这可能在 I:
和 F:
之间做出某种区分。如果是这种情况,则意味着您仅使用了大约 81954k 的可用存储空间。 ...除了一个棘手的问题:“可用 RAM”比“可用闪存”高 4k,我们希望它们是相同的。除非您在调用之间分配和/或存储一堆其他东西,否则我无法解释...?
另一个显着差异是,虽然两者都返回 int
,但 Verix V 版本仅指示失败时返回 -1(暗示但未明确说明成功时返回 0 ) 将 errno 设置为 ENOENT
或 EACCES
。另一方面,eVo 版本指出返回值是“可用内存字节数”。比较从 dir_get_sizes
返回的值与在 fs.Avail
中设置的值可能很有趣。
关于c - 对 VeriFone 库的内存可用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32074084/