是否有任何开发人员发现svc_swi.h中针对Evo范围的VeriFone库函数的内存调用结果不一致?
我们有旧的代码,似乎对Verix / VerixV来说很好。但对于一个较新的单元(这些单元的内存比前一代硬件大得多),这些结果出现在我们的监控中: -
总RAM:65536k总闪存:131072k可用 内存:114654k可用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;
}
答案 0 :(得分:1)
我不确定,但我猜测 - 在Verix和VerixV终端(例如3740/3750和510/570)中,有两个 Flash AND RAM 并且您指定了哪个"驱动器"您希望在文件名前指明I:
或F:
。在520(我怀疑其他eVo终端,但我不确定)没有(非易失性)RAM,所以即使你指定I:
,你仍然存储到FLASH存储器。 / p>
如果您查看dir_get_sizes
的文档,您会注意到Verix V
版本中的内容与eVo
中的内容不同。对我来说真正突出的主要区别是:
我:和F:都在Nand flash上,是“Avail”的成员 结果struct fs_sizes告诉可用NAND的总(I:+ F :) 调用函数时的闪存。
这一切都很好,可以解释为什么"可用"高于" Total",特别是因为你使用不同的API来获得总大小(我假设SVC_RAM_SIZE和SVC_FLASH_SIZE)可能会在{{1}之间做出某种区分}和I:
。如果是这种情况,则意味着您正在使用大约81954k的可用存储空间。 ......除了一个唠叨问题:"可用RAM"高于"可用闪存"高出4倍。我们希望它们是相同的。除非你在电话之间分配和/或存储大量其他东西,否则我无法解释......?
另一个显着的区别是,虽然两者都返回F:
,但Verix V版本仅指示在失败时返回-1(暗示,但未明确说明成功时返回0),并且errno设置为int
或ENOENT
。另一方面,eVo版本声明返回值是"可用内存,以字节为单位。"将EACCES
返回的值与dir_get_sizes
中设置的值进行比较可能会很有趣。