1

Evo 範囲の svc_swi.h で VeriFone ライブラリ関数へのメモリ呼び出しの結果に一貫性がないことに気付いた開発者はいますか?
Verix/VerixV では問題ないと思われる古いコードがあります。しかし、新しいユニット (これらは前任者の HW よりもはるかに大きなメモリを持っています) の場合、これらの結果は私たちの監視に現れました:-

合計 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の両方があり、必要な「ドライブ」を指定しましたまたはI:ファイルF:名の前に。520 (および他の eVo ターミナルも疑わしいですが、確かではありません) には (不揮発性) RAM がないため、 を指定I:しても、まだ FLASH メモリに保存されています。

のドキュメントを見ると、バージョンに書かれている内容とバージョンに書かれている内容が異なることdir_get_sizesに気付くでしょう。私にとって本当に際立っている主な違いはメモです:Verix VeVo

I: と F: は両方とも Nand フラッシュ上にあり、結果として得られる struct fs_sizes の「Avail」メンバーは、関数が呼び出された時点で使用可能な NAND フラッシュ メモリの合計 (I: + F:) を示します。

これはすべてうまくいき、 「使用可能」が「合計」よりも高い理由を説明できます。特に、合計サイズを取得するために別の API を使用しているため (SVC_RAM_SIZE と SVC_FLASH_SIZE を想定しています)、何らかの原因である可能性があります。I:との違いF:。この場合、使用可能なストレージ スペースの約 81954k を使用していることを意味します。... 1 つの厄介な問題を除いて: 「利用可能な RAM」は「利用可能なフラッシュ」よりも 4k 高く、それらは同一であると予想されます。呼び出しの間に他の多くのものを割り当てたり保存したりしない限り、説明できません...?

もう 1 つの重要な違いは、どちらも を返すのintに対し、Verix V バージョンは失敗時に -1 が返されることを示すだけであり (成功時に 0 が返されることを暗示していますが、明示的には示していません)、errno がENOENTまたはに設定されていることEACCESです。一方、eVo バージョンでは、戻り値は「使用可能なメモリのバイト数」と記載されています。dir_get_sizesから返される値とで設定された値を比較してみると面白いかもしれませんfs.Avail

于 2015-08-18T16:44:22.377 に答える