是否有任何开发人员看到了对VeriFone库函数的内存调用结果与svc_swi.h的Evo范围不一致?
我们的旧代码似乎适合Verix/VerixV。但是对于一个较新的单元(这些单元的内存比以前的HW大得多),这些结果出现在我们的监测中:
内存总数: 65536k总闪存: 131072k可用RAM: 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;
}发布于 2015-08-18 16:44:22
我不确定,但我会冒险猜测--在Verix和VerixV终端(如3740/3750和510/570)中,有闪存和内存,您在文件名之前指示I:或F:来指定您想要的“驱动器”。在520中(我怀疑其他eVo终端,但我不确定)没有(非易失性的) RAM,所以即使您指定了I:,您仍然在存储到闪存。
如果您查看dir_get_sizes的文档,您将注意到,在Verix V版本中写入的内容与在eVo版本中编写的文档不同。在我看来,真正突出的主要区别是:
I:和F:都在Nand闪存上,生成的结构fs_sizes的“效用”成员在函数调用时告诉总可用NAND内存(I:+ F:)。
这一切都很好,并且可以解释为什么“可用”高于“总计”,特别是因为您使用不同的API来获得总大小(我假设是SVC_RAM_SIZE和SVC_FLASH_SIZE),这可能对I:和F:有某种区别。如果是这样的话,那就意味着您只使用了大约81954k的可用存储空间。...Except的一个困扰问题:“可用内存”比“可用闪存”高4k,我们希望它们是相同的。除非你在调用之间分配和/或存储其他东西,否则我无法解释.?
另一个重要的区别是,虽然两者都返回一个int,但Verix版本只表明-1是在失败时返回的(这意味着,但没有明确声明0是在成功时返回的),而errno设置为ENOENT或EACCES。另一方面,eVo版本声明返回值是“可用内存(以字节为单位)”。比较从dir_get_sizes返回的值和在fs.Avail中返回的值可能很有趣。
https://stackoverflow.com/questions/32074084
复制相似问题