2015-08-18 3 views
1

Были ли какие-либо разработчики замечены несогласованностью в результатах вызовов памяти на функции библиотеки VeriFone в svc_swi.h для диапазона Evo?
У нас есть старый код, который отлично подходит для Verix/VerixV. Но для новой единицы (они имеют очень много больше памяти, чем предшественник HW) эти результаты появились в нашем мониторинге: -Доступ к памяти для звонков в библиотеку VeriFone

Всего RAM: 65536k Всего Вспышка: 131072k Доступно Оперативная память: 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; 
} 
+0

Держите нас в курсе того, что вы найдете - мне любопытно узнать, я сам ... – David

ответ

1

Я не уверен, но я догадку - В Verix и VerixV терминалов (например, 3740/3750 и 510/570), там был и флэшИRAM, и вы указали, какой «диск» вам нужен, указав I: или F: перед вашим именем файла. В 520 (и я подозреваю, что другие терминалы eVo, но я не уверен), нет (энергонезависимой) ОЗУ, и даже если вы укажете I:, вы все равно сохраняете память FLASH.

Если вы посмотрите на документацию для dir_get_sizes, вы заметите, что то, что записано в версии Verix V, отличается от того, что записано в eVo. Основное различие, что действительно выделяется для меня это примечание:

I: и F: оба на флэш-Nand, член «Свободна» из в результате STRUCT fs_sizes говорит общее (I: + F :) доступно NAND флэш-память в момент вызова функции.

Это все хорошо и мог объяснить, почему «Доступный» выше, чем «Total», тем более, что вы используете другой API, чтобы получить полный размер (я предполагаю, что SVC_RAM_SIZE и SVC_FLASH_SIZE) что может быть своего рода различием между I: и F:. Если бы это было так, то это означало бы, что вы используете примерно 81954k доступного пространства для хранения. ... За исключением одной проблемы с nagging: «Доступная оперативная память» на 4k выше, чем «Доступная вспышка», и мы ожидаем, что они будут идентичными. Это я не могу объяснить, если вы не выделяете и/или не храните кучу других вещей между вызовами ...?

Еще одно существенное различие заключается в том, что, хотя оба возвращают int, версия Verix V указывает только на то, что -1 возвращается при ошибке (подразумевая, но явно не заявляя, что 0 возвращается при успешном завершении) с errno, установленным либо ENOENT или EACCES. С другой стороны, в версии eVo указано, что возвращаемое значение - «Доступная память в байтах». Может быть интересно сравнить значение, которое возвращается с dir_get_sizes, с номером, указанным в fs.Avail.

+0

Спасибо @PhatWrat за эту полезную обратную связь. Да, вы правы, мы используем SVC_RAM_SIZE. Итак, я буду возиться и сообщить вам, буду ли я дальше. – MikeRoger

+0

Я отмечу этот полезный ответ, принятый, спасибо @PhatWrat. – MikeRoger

+0

Hi @PhatWrat, я запустил отчет памяти для сравнения, из опции меню системного режима 4> Использование памяти Результат согласуется с приведенным выше комментарием о RAM и Flash в единицах Evo. Итак, ОЗУ, сообщенная вызовом API API, должна быть получена с помощью другого вызова, чем тот, который используется для отчета о прикрепленной памяти? – MikeRoger