ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash

prehistory

Aia nā mīkini kūʻai o kā mākou hoʻolālā ponoʻī. I loko o ka Raspberry Pi a me kekahi mau uwea ma kahi papa ʻokoʻa. Hoʻopili ʻia kahi mea ʻae kālā, kahi ʻae bila, kahi pahu panakō ... Hoʻomalu ʻia nā mea a pau e kahi papahana kākau ponoʻī. Ua kākau ʻia ka mōʻaukala hana holoʻokoʻa i kahi log ma kahi flash drive (MicroSD), a laila e hoʻouna ʻia ma o ka Pūnaewele (e hoʻohana ana i kahi modem USB) i ke kikowaena, kahi i mālama ʻia i loko o kahi waihona. Hoʻokomo ʻia ka ʻike kūʻai aku ma 1c, aia kekahi pūnaewele maʻalahi no ka nānā ʻana, etc.

ʻO ia hoʻi, he mea koʻikoʻi ka puke pai - no ka helu helu (loaʻa, kūʻai, etc.), ka nānā ʻana (nā ʻano hemahema a me nā kūlana force majeure); ʻO kēia, ʻōlelo paha kekahi, ʻo nā ʻike āpau a mākou e pili ana i kēia mīkini.

pilikia

Hōʻike nā Flash drive iā lākou iho he mau mea hilinaʻi ʻole. Hāʻule lākou me ka maʻamau enviable. Ke alakaʻi nei kēia i nā mīkini ʻelua a (inā no kekahi kumu ʻaʻole hiki ke hoʻoili ʻia ka log ma ka pūnaewele) i ka nalowale ʻikepili.

ʻAʻole kēia ka ʻike mua o ka hoʻohana ʻana i nā flash drive, ma mua o kēia aia kahi papahana ʻoi aku ma mua o hoʻokahi haneli mau mea, kahi i mālama ʻia ai ka magazine ma nā USB flash drive, aia kekahi mau pilikia me ka hilinaʻi, i kekahi manawa ka helu o ka poʻe i hāʻule i loko. hoʻokahi mahina i loko o nā kakini. Ua hoʻāʻo mākou i nā flash drive ʻē aʻe, me nā mea hōʻailona me ka hoʻomanaʻo SLC, a ʻoi aku ka hilinaʻi o kekahi mau hiʻohiʻona ma mua o nā mea ʻē aʻe, akā ʻo ka hoʻololi ʻana i nā flash drive ʻaʻole i hoʻopau i ka pilikia.

E hoʻomaikaʻi mai! Heluhelu lōʻihi! Inā ʻaʻole ʻoe hoihoi i ka "no ke aha", akā i ka "pehea", hiki iā ʻoe ke hele pololei I ka hopena ʻatikala.

olelo hooholo

ʻO ka mea mua i hiki mai i ka noʻonoʻo: haʻalele iā MicroSD, hoʻokomo, no ka laʻana, kahi SSD, a kāʻei mai ia mea. Hiki i ka manaʻo, akā, ʻoi aku ke kumukūʻai, a ʻaʻole hilinaʻi nui (ua hoʻohui ʻia kahi adapter USB-SATA; ʻaʻole paipai ʻia nā helu helu no nā SSD kālā).

ʻAʻole like ke ʻano o ka USB HDD i kahi hopena hoihoi.

No laila, ua hele mai mākou i kēia koho: haʻalele i ka booting mai MicroSD, akā e hoʻohana iā lākou i ke ʻano heluhelu wale nō, a mālama i ka log hana (a me nā ʻike ʻē aʻe i kahi ʻāpana o ka lako - helu serial, sensor calibrations, etc.) ma kahi ʻē aʻe. .

Ua aʻo ʻia ke kumuhana o ka FS heluhelu wale nō no nā raspberry i loko a i waho, ʻaʻole wau e noho i nā kikoʻī hoʻokō ma kēia ʻatikala. (akā inā he hoihoi, e kākau paha wau i kahi ʻatikala liʻiliʻi e pili ana i kēia kumuhana). ʻO ka mea wale nō aʻu e makemake ai e hoʻomaopopo, ʻo ia mai ka ʻike pilikino a mai nā loiloi o ka poʻe i hoʻokō mua iā ia, aia kahi waiwai i ka hilinaʻi. ʻAe, ʻaʻole hiki ke hoʻopau loa i nā haki, akā hiki ke hōʻemi nui i ko lākou alapine. A ke hoʻohui nei nā kāleka, kahi e maʻalahi ai ka hoʻololi ʻana i nā limahana lawelawe.

Pūnaehana

ʻAʻohe kānalua e pili ana i ke koho ʻana o ke ʻano hoʻomanaʻo - NOR Flash.
Nā hoʻopaʻapaʻa:

  • pili maʻalahi (ʻo ka pinepine ka pahi SPI, kahi āu i ʻike ai i ka hoʻohana ʻana, no laila ʻaʻole ʻike ʻia nā pilikia hardware);
  • kumukūʻai ʻakaʻaka;
  • ka protocol hana maʻamau (ʻo ka hoʻokō ʻana i loko o ka kernel Linux, inā makemake ʻoe, hiki iā ʻoe ke lawe i kahi ʻaoʻao ʻekolu, aia pū kekahi, a i ʻole kākau i kāu ponoʻī, ʻoi aku ka maʻalahi o nā mea āpau);
  • pono a me ka waiwai:
    mai kahi ʻikepili maʻamau: mālama ʻia ka ʻikepili no 20 mau makahiki, 100000 holoi holoi no kēlā me kēia poloka;
    mai nā kumu ʻaoʻao ʻekolu: BER haʻahaʻa haʻahaʻa, ʻaʻohe pono no nā code hoʻoponopono hewa (Ke manaʻo nei kekahi mau hana i ka ECC no NOR, akā ʻo ka mea maʻamau ke manaʻo nei lākou ʻo MLC NOR; hiki nō kēia).

E koho kākou i nā koi no ka leo a me ka waiwai.

Makemake au e mālama ʻia ka ʻikepili no kekahi mau lā. Pono kēia i ka hihia o nā pilikia kamaʻilio, ʻaʻole nalowale ka mōʻaukala kūʻai. E nānā mākou i nā lā 5, i kēia manawa (ʻoiai e noʻonoʻo ana i nā hopena pule a me nā lā hoʻomaha) hiki ke hoʻoholo i ka pilikia.

ʻOhi mākou i kēia manawa ma kahi o 100kb o nā lāʻau i kēlā me kēia lā (3-4 tausani mau helu), akā e ulu mālie kēia helu - ke hoʻonui nei ka kikoʻī, hoʻohui ʻia nā hanana hou. Eia kekahi, i kekahi manawa aia nā pahū (hoʻomaka kekahi sensor i ka spamming me nā hopena maikaʻi ʻole, no ka laʻana). E helu mākou no 10 tausani mau moʻolelo 100 bytes i kēlā me kēia - megabytes i kēlā me kēia lā.

Ma ka huina, puka mai ka 5MB o ka ʻikepili maʻemaʻe (pili maikaʻi). ʻOi aku iā lākou (manaʻo koʻikoʻi) 1MB o ka ʻikepili lawelawe.

ʻO ia hoʻi, pono mākou i kahi chip 8MB inā ʻaʻole mākou e hoʻohana i ka compression, a i ʻole 4MB inā mākou e hoʻohana. He helu maoli no kēia ʻano hoʻomanaʻo.

E pili ana i ke kumuwaiwai: inā mākou e hoʻolālā e kākau hou ʻia ka hoʻomanaʻo holoʻokoʻa ma mua o hoʻokahi manawa i kēlā me kēia 5 mau lā, a laila ma luna o 10 mau makahiki o ka lawelawe ʻana e loaʻa iā mākou ka liʻiliʻi ma mua o hoʻokahi tausani.
E hoʻomanaʻo wau iā ʻoe ua hoʻohiki ka mea hana i hoʻokahi haneli tausani.

He wahi liʻiliʻi e pili ana iā NOR vs NAND

I kēia lā, ʻoiaʻiʻo, ʻoi aku ka kaulana o ka hoʻomanaʻo NAND, akā ʻaʻole wau e hoʻohana ia no kēia papahana: NAND, ʻaʻole like me NOR, pono e hoʻohana i ka hoʻohana ʻana i nā code hoʻoponopono hewa, kahi papa o nā poloka maikaʻi ʻole, etc., a me nā wāwae o ʻOi aku ka nui o nā pahu NAND.

ʻO nā hemahema o NOR ka:

  • liʻiliʻi liʻiliʻi (a, no laila, ke kumu kūʻai kiʻekiʻe no ka megabyte);
  • ka wikiwiki kamaʻilio haʻahaʻa (ma muli o ka hoʻohana ʻana i kahi interface serial, maʻamau SPI a i ʻole I2C);
  • holoi lohi (ma muli o ka nui o ka poloka, lawe ʻia mai kahi hapa o ke kekona a i kekahi mau kekona).

Me he mea lā ʻaʻohe mea koʻikoʻi no mākou, no laila ke hoʻomau nei mākou.

Inā hoihoi nā kikoʻī, ua koho ʻia ka microcircuit ma25df321a (akā naʻe, he mea nui ʻole kēia, aia ka nui o nā analogues ma ka mākeke i kūpono i ka pinout a me ka ʻōnaehana kauoha; ʻoiai inā makemake mākou e hoʻokomo i kahi microcircuit mai kahi mea hana ʻē aʻe a / a i ʻole ka nui ʻē aʻe, e hana nā mea āpau me ka hoʻololi ʻole i ka code).

Ke hoʻohana nei au i ka mea hoʻokele i kūkulu ʻia i loko o ka kernel Linux; ma Raspberry, mahalo i ke kākoʻo o ka lāʻau overlay, maʻalahi loa nā mea āpau - pono ʻoe e kau i ka overlay i hui ʻia i /boot/overlays a hoʻololi iki i /boot/config.txt.

laʻana faila dts

ʻO kaʻoiaʻiʻo, ʻaʻole maopopo iaʻu ua kākau ʻia me ka hewa ʻole, akā hana ia.

/*
 * Device tree overlay for at25 at spi0.1
 */

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709"; 

    /* disable spi-dev for spi0.1 */
    fragment@0 {
        target = <&spi0>;
        __overlay__ {
            status = "okay";
            spidev@1{
                status = "disabled";
            };
        };
    };

    /* the spi config of the at25 */
    fragment@1 {
        target = <&spi0>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            flash: m25p80@1 {
                    compatible = "atmel,at25df321a";
                    reg = <1>;
                    spi-max-frequency = <50000000>;

                    /* default to false:
                    m25p,fast-read ;
                    */
            };
        };
    };

    __overrides__ {
        spimaxfrequency = <&flash>,"spi-max-frequency:0";
        fastread = <&flash>,"m25p,fast-read?";
    };
};

A me kekahi laina ma config.txt

dtoverlay=at25:spimaxfrequency=50000000

E haʻalele wau i ka wehewehe ʻana o ka hoʻopili ʻana i ka chip i ka Raspberry Pi. Ma kekahi ʻaoʻao, ʻaʻole wau he loea i ka uila, ma ka ʻaoʻao ʻē aʻe, ʻo nā mea āpau ma aneʻi he banal noʻu: ʻo ka microcircuit he 8 mau wāwae wale nō, kahi e pono ai mākou i ka lepo, ka mana, SPI (CS, SI, SO, SCK ); ua like nā pae me ka Raspberry Pi, ʻaʻohe mea e koi ʻia ai - e hoʻopili wale i nā pine 6 i hōʻike ʻia.

Ka hoʻokumu ʻana i ka pilikia

E like me ka mea maʻamau, ke hele nei ka ʻōlelo pilikia ma nā ʻano he nui, a i koʻu manaʻo ʻo ia ka manawa no ka mea aʻe. No laila, e ho'ōki kākou, e hui pū i nā mea i kākau mua ʻia, a e wehewehe i nā kikoʻī i koe i ka malu.

No laila, ua hoʻoholo mākou e mālama ʻia ka log ma SPI NOR Flash.

He aha ka NOR Flash no ka poʻe ʻike ʻole?

He hoʻomanaʻo non-volatile kēia e hiki ai iā ʻoe ke hana i ʻekolu hana:

  1. Heluhelu:
    ʻO ka heluhelu maʻamau: hoʻouna mākou i ka helu wahi a heluhelu i nā bytes e like me kā mākou makemake;
  2. Mōʻaukala:
    ʻO ke kākau ʻana iā NOR flash e like me ka mea maʻamau, akā hoʻokahi mea ʻokoʻa: hiki iā ʻoe ke hoʻololi i ka 1 a i ka 0 wale nō, akā ʻaʻole ia. No ka laʻana, inā loaʻa iā mākou ka 0x55 i loko o kahi kelepona hoʻomanaʻo, a laila ma hope o ke kākau ʻana iā 0x0f iā ia, e mālama ʻia ʻo 0x05 ma laila. (e nānā i ka papa ma lalo iho nei);
  3. Holoi:
    ʻOiaʻiʻo, pono mākou e hiki ke hana i ka hana ʻē aʻe - hoʻololi i ka 0 i ka 1, ʻo ia ke ʻano o ka hana holoi. ʻAʻole e like me nā mea mua ʻelua, ʻaʻole ia e hana me nā bytes, akā me nā poloka (ʻo ka hapa liʻiliʻi o ka holoi ʻana i ka chip i koho ʻia ʻo 4kb). Holoi ka holoi ʻana i ka poloka holoʻokoʻa a ʻo ia wale nō ke ala e hoʻololi ai i ka 0 i ka 1. No laila, i ka wā e hana ai me ka hoʻomanaʻo flash, pono pinepine ʻoe e hoʻohālikelike i nā hale ʻikepili i ka palena o ka poloka holoi.
    Hoʻopaʻa ʻia ma NOR Flash:

ʻIkepili binary

Kau
01010101

Hoʻopaʻa ʻia
00001111

Ua lilo
00000101

Hōʻike ka log ponoi i ke kaʻina o nā moʻolelo o ka lōʻihi like ʻole. ʻO ka lōʻihi maʻamau o kahi moʻolelo ma kahi o 30 bytes (ʻoiai nā moʻolelo he mau kilobytes ka lōʻihi i kekahi manawa). I kēia hihia, hana mākou me lākou ma ke ʻano he hoʻonohonoho paita, akā, inā makemake ʻoe, hoʻohana ʻia ʻo CBOR i loko o nā moʻolelo.

Ma waho aʻe o ka log, pono mākou e mālama i kekahi ʻike "hoʻonohonoho", i hoʻonui ʻia a ʻaʻole hoʻi: kahi ID mea hana, calibrations sensor, kahi hae "hoʻopau ʻia no ka manawa pōkole", etc.
ʻO kēia ʻike he pūʻulu o nā moʻolelo waiwai kī, mālama pū ʻia ma CBOR. ʻAʻole i loaʻa iā mākou ka nui o kēia ʻike (he mau kilobytes ka nui loa), a ua hoʻonui pinepine ʻia.
Ma ka mea e pili ana e kapa mākou i ka pōʻaiapili.

Inā mākou e hoʻomanaʻo i kahi i hoʻomaka ai kēia ʻatikala, he mea nui ia e hōʻoia i ka mālama ʻana i ka ʻikepili hilinaʻi a, inā hiki, e hoʻomau i ka hana ʻoiai inā hiki ʻole nā ​​lako lako / palaho ʻikepili.

He aha nā kumu pilikia e hiki ke noʻonoʻo ʻia?

  • Hoʻopau ka mana i ka wā kākau/holoi. ʻO kēia mai ka māhele o "ʻaʻohe mea hoʻopunipuni e kū'ē i ka crowbar."
    ʻIkepili mai kūkā kamaʻilio ma stackexchange: ke pio ka mana i ka wā e hana ana me ka uila, holoi ʻelua (hoʻonoho ʻia i ka 1) a kākau (hoʻonoho ʻia i 0) alakaʻi i kahi ʻano ʻike ʻole: hiki ke kākau ʻia nā ʻikepili, kākau hapa (e ʻōlelo, ua hoʻololi mākou i 10 bytes/80 bits , ʻaʻole naʻe i hiki ke kākau ʻia he 45 bits wale nō), hiki nō hoʻi i kekahi o nā bits ma kahi kūlana "waena" (hiki i ka heluhelu ke hoʻopuka i ka 0 a me 1);
  • Nā hewa i ka hoʻomanaʻo flash ponoʻī.
    ʻO BER, ʻoiai haʻahaʻa loa, ʻaʻole hiki ke like me ka ʻole;
  • Nā hewa kaʻa kaʻa
    ʻAʻole pale ʻia ka ʻikepili i hoʻouna ʻia ma o SPI ma kekahi ʻano; hiki ke loaʻa nā hewa bit hoʻokahi a me nā hewa hoʻonohonoho - nalowale a hoʻokomo paha i nā bits (e alakaʻi ana i ka distortion data nui);
  • Nā hewa ʻē aʻe
    Nā hewa i loko o ke code, Raspberry glitches, interference alien...

Ua hoʻokumu wau i nā koi, ʻo ka hoʻokō ʻana, i koʻu manaʻo, pono e hōʻoia i ka hilinaʻi:

  • Pono e komo koke nā moʻolelo i ka hoʻomanaʻo flash, ʻaʻole manaʻo ʻia nā kākau lohi; - inā he hewa, pono e ʻike ʻia a hoʻoponopono ʻia i ka wā hiki loa; - pono ka ʻōnaehana, inā hiki, e hoʻōla mai nā hewa.
    (he laʻana mai ke ola "pehea e pono ʻole ai", aʻu i manaʻo ai ua hālāwai nā mea a pau: ma hope o ka hoʻomaka hou ʻana o ka ulia pōpilikia, "haʻihaʻi" ka ʻōnaehana faila a ʻaʻole hoʻomaka ka ʻōnaehana hana)

Manaʻo, hoʻokokoke, noʻonoʻo

I koʻu hoʻomaka ʻana e noʻonoʻo e pili ana i kēia pilikia, nui nā manaʻo i lele mai i koʻu poʻo, no ka laʻana:

  • hoʻohana i ka hōʻemi ʻikepili;
  • e hoʻohana i nā ʻōnaehana ʻikepili akamai, no ka laʻana, e mālama kaʻawale i nā poʻo moʻolelo mai nā moʻolelo iā lākou iho, no laila inā he hewa i kekahi moʻolelo, hiki iā ʻoe ke heluhelu i ke koena me ka pilikia ʻole;
  • e hoʻohana i nā māla bit e hoʻomalu i ka pau ʻana o ka hoʻopaʻa ʻana i ka wā e pio ai ka mana;
  • mālama i nā helu helu no nā mea a pau;
  • e hoʻohana i kekahi ʻano coding pale leo.

Ua hoʻohana ʻia kekahi o kēia mau manaʻo, a ua hoʻoholo ʻia kekahi e haʻalele. E hele kāua i ka hoʻonohonoho.

Ka hoʻopiʻiʻikepili

ʻO nā hanana ponoʻī a mākou e hoʻopaʻa ai i loko o ka puke pai he ʻano like a hiki ke hana hou ʻia ("hoʻolei i kahi ʻāpana 5 ruble", "pehi i ke pihi no ka hāʻawi ʻana i ka loli", ...). No laila, ʻoi aku ka maikaʻi o ke kaomi ʻana.

He mea liʻiliʻi ka compression overhead (ʻoi aku ka ikaika o kā mākou kaʻina hana, ʻoiai ʻo ka Pi mua i hoʻokahi kumu me ka alapine o 700 MHz, ʻo nā hiʻohiʻona o kēia manawa he mau cores me ke alapine o kahi gigahertz), haʻahaʻa ke kumukūʻai me ka waiho ʻana (he nui. megabytes i kēlā me kēia kekona), liʻiliʻi ka nui o nā moʻolelo. Ma keʻano laulā, inā loaʻa ka hopena i ka hana, e maikaʻi wale nō. (ʻaʻole koʻikoʻi, ʻōlelo wale nō). Eia kekahi, ʻaʻole mākou i hoʻopili maoli, akā Linux maʻamau - no laila ʻaʻole pono ka hoʻokō ʻana i ka hoʻoikaika nui (ua lawa ka hoʻopili wale ʻana i ka waihona a hoʻohana i kekahi mau hana mai ia mea).

Ua lawe ʻia kahi ʻāpana o ka log mai kahi mea hana (1.7 MB, 70 tausani mau mea komo) a nānā mua ʻia no ka compressibility me ka hoʻohana ʻana i ka gzip, lz4, lzop, bzip2, xz, zstd i loaʻa ma ka kamepiula.

  • Ua hōʻike ʻo gzip, xz, zstd i nā hopena like (40Kb).
    Pīhoihoi au i ka hōʻike ʻana o ka xz maʻamau iā ia iho ma ka pae o gzip a i ʻole zstd;
  • ʻO lzip me nā hoʻonohonoho paʻamau i hāʻawi i nā hopena maikaʻi aʻe;
  • Ua hōʻike ʻo lz4 a me lzop i nā hopena maikaʻi ʻole (150Kb);
  • Ua hōʻike ʻo bzip2 i kahi hopena maikaʻi loa (18Kb).

No laila, hoʻopili maikaʻi ʻia ka ʻikepili.
No laila (inā ʻaʻole mākou e ʻike i nā hemahema make) e hoʻoemi ʻia! No ka mea hiki ke hoʻopili ʻia nā ʻikepili hou aʻe ma ka pahu flash like.

E noʻonoʻo kākou i nā hemahema.

ʻO ka pilikia mua: ua ʻae mua mākou e hele koke kēlā me kēia moʻolelo i ka uila. ʻO ka maʻamau, ʻohi ka waihona waihona i ka ʻikepili mai ke kahawai hoʻokomo a hiki i ka hoʻoholo ʻana ʻo ia ka manawa e kākau ai i ka hopena pule. Pono mākou e loaʻa koke i kahi poloka o ka ʻikepili i hoʻopaʻa ʻia a mālama i loko o ka hoʻomanaʻo non-volatile.

ʻIke wau i ʻekolu ala:

  1. E kaomi i kēlā me kēia moʻolelo me ka hoʻohana ʻana i ka puke wehewehe ʻōlelo ma kahi o nā algorithm i kūkākūkā ʻia ma luna.
    He koho hana holoʻokoʻa, akā ʻaʻole wau makemake. No ka hōʻoia ʻana i kahi pae kūpono a ʻoi aku ka maikaʻi o ka hoʻopiʻi ʻana, pono e "hoʻopili ʻia" ka puke wehewehe'ōlelo i nā ʻikepili kikoʻī; ʻo kēlā me kēia hoʻololi e alakaʻi i ka pae hoʻopiʻi e hāʻule i ka pōʻino. ʻAe, hiki ke hoʻoholo ʻia ka pilikia ma ka hana ʻana i kahi mana hou o ka puke wehewehe ʻōlelo, akā he poʻo poʻo kēia - pono mākou e mālama i nā mana āpau o ka puke wehewehe. i kēlā me kēia hoʻokomo pono mākou e hōʻike me ka mana o ka puke wehewehe ʻōlelo i hoʻopaʻa ʻia ...
  2. E kaomi i kēlā me kēia moʻolelo me ka hoʻohana ʻana i nā algorithms "classical", akā kūʻokoʻa i nā mea ʻē aʻe.
    ʻAʻole i hoʻolālā ʻia nā algorithm compression e noʻonoʻo ʻia e hana me nā moʻolelo o kēia nui (he ʻumi o nā bytes), e maopopo ana ka emi o ka compression ratio ma mua o 1 (ʻo ia hoʻi, e hoʻonui i ka nui o ka ʻikepili ma mua o ka hoʻopili ʻana);
  3. E hana i ka FLUSH ma hope o kēlā me kēia hoʻopaʻa ʻana.
    Nui nā hale waihona puke paʻi i kākoʻo iā FLUSH. He kauoha kēia (a i ʻole kahi ʻāpana i ke kaʻina hana hoʻoemi), ma ka loaʻa ʻana o ka waihona i hoʻokumu i kahi kahawai i hoʻopaʻa ʻia i hiki ke hoʻohana ʻia e hoʻihoʻi. nā mea a pau ʻikepili i hoʻopaʻa ʻole ʻia i loaʻa mua. ʻO ia ʻano analogue sync i nā ʻōnaehana faila a i ʻole commit ma sql.
    ʻO ka mea nui, ʻo ia ka hiki ke hoʻohana i ka puke wehewehe ʻōlelo i hōʻiliʻili ʻia a ʻaʻole e ʻeha nui ka lākiō hoʻopiʻi e like me ka mana o mua.

Manaʻo wau ua maopopo iaʻu ua koho wau i ke kolu o ka koho, e nānā hou aku kākou.

Loaʻa ʻatikala maikaʻi loa e pili ana iā FLUSH ma zlib.

Ua hana au i kahi ho'āʻo kuli e pili ana i ka ʻatikala, lawe i 70 tausani mau helu log mai kahi mea maoli, me ka nui o ka ʻaoʻao o 60Kb (e hoʻi mākou i ka nui o ka ʻaoʻao ma hope) loaa:

ʻIkepili mua
Hoʻopiʻi gzip -9 (ʻaʻohe FLUSH)
zlib me Z_PARTIAL_FLUSH
zlib me Z_SYNC_FLUSH

Volume, KB
1692
40
352
604

I ka nānā mua ʻana, ʻoi aku ke kiʻekiʻe o ke kumukūʻai i hāʻawi ʻia e FLUSH, akā ʻo ka ʻoiaʻiʻo he liʻiliʻi kā mākou koho - ʻaʻole paha e hoʻopaʻa i nā mea āpau, a i ʻole e kaomi (a maikaʻi loa) me FLUSH. ʻAʻole pono mākou e poina iā mākou he 70 tausani mau moʻolelo, ʻo ka redundancy i hoʻokomo ʻia e Z_PARTIAL_FLUSH he 4-5 paita wale nō i kēlā me kēia moʻolelo. A ua hoʻololi ʻia ka pākuʻi koʻikoʻi ma kahi o 5: 1, ʻoi aku ia ma mua o kahi hopena maikaʻi loa.

Hiki paha ke kahaha, akā ʻo Z_SYNC_FLUSH kahi ala ʻoi aku ka maikaʻi o ka hana FLUSH

I ka hoʻohana ʻana iā Z_SYNC_FLUSH, ʻo nā 4 bytes hope loa o kēlā me kēia komo ʻana he 0x00, 0x00, 0xff, 0xff. A inā ʻike mākou iā lākou, ʻaʻole pono mākou e mālama iā lākou, no laila ʻo 324Kb wale nō ka nui hope.

He wehewehe ka ʻatikala aʻu i hoʻopili ai:

Hoʻopili ʻia kahi poloka 0 ʻano hou me nā mea ʻole.

ʻO kahi ʻano 0 poloka me nā mea ʻokoʻa he:

  • ke poʻomanaʻo poloka ʻekolu-bit;
  • 0 a hiki i ka 7 bits like me ka zero, no ka hoʻokō ʻana i ka alignment byte;
  • ke kaʻina ʻehā-byte 00 00 FF FF.

E like me kāu e ʻike maʻalahi ai, ma ka poloka hope ma mua o kēia mau 4 bytes aia mai 3 a 10 zero bits. Eia naʻe, ua hōʻike ʻia ka hoʻomaʻamaʻa ʻana aia ma kahi o 10 zero bits.

ʻIke ʻia ʻo ia mau poloka pōkole o ka ʻikepili maʻamau (mau?) Hoʻopili ʻia me ka hoʻohana ʻana i kahi poloka o ke ʻano 1 (paʻa paʻa), pono e hoʻopau me 7 zero bits, e hāʻawi ana i ka huina o 10-17 i hoʻopaʻa ʻia ʻo zero bits (a ʻo ke koena e ʻaʻole i ʻole me ka hiki ke 50%).

No laila, ma ka ʻikepili hoʻāʻo, ma 100% o nā hihia aia hoʻokahi zero byte ma mua o 0x00, 0x00, 0xff, 0xff, a ma kahi o ka hapakolu o nā hihia aia ʻelua ʻole bytes. (ʻO ka ʻoiaʻiʻo paha ke hoʻohana nei au i ka CBOR binary, a i ka wā e hoʻohana ai i ka kikokikona JSON, ʻoi aku ka maʻamau o nā poloka o ke ʻano 2 - dynamic block, kēlā me kēia, nā poloka me ka ʻole o nā bytes hou ma mua o 0x00, 0x00, 0xff, 0xff e ʻike ʻia).

I ka huina, me ka hoʻohana ʻana i ka ʻikepili hoʻāʻo i loaʻa, hiki ke hoʻokomo ʻia i lalo o 250Kb o ka ʻikepili i hoʻopili ʻia.

Hiki iā ʻoe ke hoʻopakele i nā mea hou aʻe ma ka juggling bits: no ka mea, i kēia manawa ke nānā ʻole nei mākou i ka hiki ʻana mai o kekahi mau ʻāpana zero ma ka hope o ka poloka, ʻaʻole loli kekahi mau ʻāpana i ka hoʻomaka o ka poloka...
Akā, ua hoʻoholo wau i ka manaʻo ikaika e hoʻōki, inā ʻaʻole i kēia manawa hiki iaʻu ke hoʻopau i ka hoʻomohala ʻana i kaʻu waihona ponoʻī.

I ka huina, mai kaʻu ʻikepili hoʻāʻo i loaʻa iaʻu he 3-4 bytes no ke kākau ʻana, ua ʻoi aku ka nui o ka hoʻopili ʻana ma mua o 6:1. E ʻoiaʻiʻo wau: ʻAʻole wau i manaʻo i kēlā hopena; i koʻu manaʻo, ʻoi aku ka maikaʻi ma mua o 2: 1 he hopena e hōʻoiaʻiʻo ai i ka hoʻohana ʻana i ka hoʻoemi.

Maikaʻi nā mea a pau, akā ʻo zlib (deflate) he mea kahiko, kūpono a me kahi algorithm compression compression kahiko. ʻO ka ʻoiaʻiʻo ʻo ka 32Kb hope loa o ka kahawai data uncompressed i hoʻohana ʻia ma ke ʻano he puke wehewehe ʻōlelo i kēia lā (ʻo ia hoʻi, inā ʻano like kekahi poloka data me ka mea i loko o ke kahawai hoʻokomo 40Kb i hala, a laila e hoʻomaka e hoʻopaʻa hou ʻia. a ʻaʻole e kuhikuhi i kahi hanana mua). I nā waihona waihona o kēia wā, ua ana pinepine ʻia ka nui o ka puke wehewehe ʻōlelo ma nā megabytes ma mua o nā kilobytes.

No laila, hoʻomau mākou i kā mākou noiʻi liʻiliʻi o nā waihona.

Ma hope aʻe ua hoʻāʻo mākou i ka bzip2 (e hoʻomanaʻo, me ka ʻole o FLUSH ua hōʻike ia i kahi pākuʻi koʻikoʻi maikaʻi ma kahi o 100: 1). ʻO ka mea pōʻino, ua hana maikaʻi ʻole ia me FLUSH; ua ʻoi aku ka nui o ka ʻikepili i hoʻopili ʻia ma mua o ka ʻikepili i hoʻopaʻa ʻole ʻia.

ʻO koʻu mau manaʻo e pili ana i nā kumu o ka hemahema

Hāʻawi ʻo Libbz2 i hoʻokahi wale nō koho flush, me he mea lā e hoʻomaʻemaʻe i ka puke wehewehe ʻōlelo (e like me Z_FULL_FLUSH ma zlib); ʻaʻohe kamaʻilio e pili ana i ka hoʻopiʻi kūpono ma hope o kēia.

A ʻo ka mea hope loa i hoʻāʻo ʻia ʻo zstd. Ma muli o nā ʻāpana, hoʻopaʻa ia ma ka pae o gzip, akā ʻoi aku ka wikiwiki, a ʻoi aku ka maikaʻi ma mua o gzip.

Auē, me FLUSH ʻaʻole i hana maikaʻi loa: ʻo ka nui o ka ʻikepili i hoʻopili ʻia ma kahi o 700Kb.

Я i ninau aku ai ma ka ʻaoʻao github o ka papahana, loaʻa iaʻu kahi pane e helu ai ʻoe i ka 10 bytes o ka ʻikepili lawelawe no kēlā me kēia poloka o ka ʻikepili i hoʻopili ʻia, kahi kokoke i nā hopena i loaʻa; ʻaʻohe ala e hopu ai i ka deflate.

Ua hoʻoholo wau e kū i kēia manawa i kaʻu mau hoʻokolohua me nā waihona waihona (e hoʻomanaʻo wau iā ʻoe ʻaʻole i hōʻike ʻo xz, lzip, lzo, lz4 iā lākou iho ma ka pae hoʻāʻo ʻole me FLUSH, a ʻaʻole wau i noʻonoʻo i nā algorithms compression exotic).

E hoʻi kāua i nā pilikia mālama waihona.

ʻO ka lua (e like me kā lākou e ʻōlelo nei ma ke ʻano, ʻaʻole i ka waiwai) ka pilikia ʻo ka ʻikepili i hoʻopili ʻia he kahawai hoʻokahi, kahi e loaʻa mau ai nā kuhikuhi i nā ʻāpana mua. No laila, inā e pōʻino kahi ʻāpana o ka ʻikepili i hoʻopaʻa ʻia, ʻaʻole wale mākou e nalowale i ka poloka pili o ka ʻikepili i hoʻopaʻa ʻole ʻia, akā ʻo nā mea a pau ma hope.

Aia kahi ala e hoʻoponopono ai i kēia pilikia:

  1. E pale i ka pilikia mai ka hiki ʻana mai - hoʻohui i ka redundancy i ka ʻikepili i hoʻopili ʻia, e ʻae iā ʻoe e ʻike a hoʻoponopono i nā hewa; e kamaʻilio mākou no kēia ma hope;
  2. E ho'ēmi i nā hopena inā loaʻa kahi pilikia
    Ua ʻōlelo mua mākou e hiki iā ʻoe ke hoʻopaʻa i kēlā me kēia poloka data ma ke kūʻokoʻa, a e nalowale ka pilikia iā ia iho (ʻo ka pōʻino i ka ʻikepili o kahi poloka e alakaʻi i ka nalowale o ka ʻikepili no kēia poloka wale nō). Eia nō naʻe, he hihia koʻikoʻi kēia e hiki ʻole ai ka hoʻoemi ʻikepili. ʻO ka ʻaoʻao ʻē aʻe: e hoʻohana i ka 4MB āpau o kā mākou chip ma ke ʻano he waihona hoʻokahi, e hāʻawi iā mākou i ka hoʻopiʻi maikaʻi loa, akā nā hopena pōʻino i ka hihia o ka palaho data.
    ʻAe, pono ke kuʻikahi ma ke ʻano o ka hilinaʻi. Akā, pono mākou e hoʻomanaʻo e hoʻomohala nei mākou i kahi ʻano waihona waihona no ka hoʻomanaʻo non-volatile me ka BER haʻahaʻa haʻahaʻa a me kahi manawa mālama ʻikepili i haʻi ʻia o 20 mau makahiki.

I ka wā o nā hoʻokolohua, ua ʻike au e hoʻomaka ana nā poho i ʻike ʻia ma ka pae hoʻopiʻi ma nā poloka o ka ʻikepili i hoʻopaʻa ʻia ma lalo o 10 KB ka nui.
Ua ʻōlelo ʻia ma mua e pili ana ka hoʻomanaʻo i hoʻohana ʻia; ʻAʻole wau i ʻike i ke kumu e hoʻohana ʻole ʻia ai ka leka "hoʻokahi ʻaoʻao - hoʻokahi poloka o ka ʻikepili i hoʻopili ʻia".

ʻO ia hoʻi, ʻo 16Kb ka nui o ka ʻaoʻao kūpono (me kahi mālama no ka ʻike lawelawe). Eia nō naʻe, ʻo ia ʻano ʻaoʻao liʻiliʻi e kau i nā palena nui i ka nui o ka moʻolelo.

ʻOiai ʻaʻole wau i manaʻo i nā moʻolelo i ʻoi aku ka nui ma mua o kekahi mau kilobytes ma ke ʻano i hoʻopaʻa ʻia, ua hoʻoholo wau e hoʻohana i nā ʻaoʻao 32Kb (no ka huina o 128 mau ʻaoʻao no kēlā me kēia chip).

Hōʻuluʻulu:

  • Mālama mākou i ka ʻikepili i hoʻopaʻa ʻia me ka zlib (deflate);
  • No kēlā me kēia komo ʻana, hoʻonoho mākou iā Z_SYNC_FLUSH;
  • No kēlā me kēia moʻolelo i hoʻopaʻa ʻia, ʻoki mākou i nā bytes (e laʻa, 0x00, 0x00, 0xff, 0xff); ma ke poʻomanaʻo e hōʻike mākou i ka nui o nā bytes a mākou i ʻoki ai;
  • Mālama mākou i nā ʻikepili ma nā ʻaoʻao 32Kb; aia hoʻokahi kahawai o ka ʻikepili i hoʻopaʻa ʻia i loko o ka ʻaoʻao; Ma kēlā me kēia ʻaoʻao mākou e hoʻomaka hou i ke kaomi.

A, ma mua o ka hoʻopau ʻana me ka hoʻopaʻa ʻana, makemake wau e huki i kou manaʻo i ka ʻoiaʻiʻo he liʻiliʻi wale nā ​​​​bytes o ka ʻikepili i hoʻopaʻa ʻia i kēlā me kēia moʻolelo, no laila he mea nui loa ʻaʻole e hoʻonui i ka ʻike lawelawe, helu ʻia kēlā me kēia byte ma aneʻi.

Ka mālama ʻana i nā poʻo ʻikepili

No ka mea, loaʻa iā mākou nā moʻolelo o ka lōʻihi like ʻole, pono mākou e hoʻoholo i ke kau ʻana/palena o nā moʻolelo.

ʻIke wau i ʻekolu ala:

  1. Hoʻopaʻa ʻia nā moʻolelo a pau i loko o kahi kahawai mau, ʻo ka mua he poʻomanaʻo moʻolelo i loaʻa ka lōʻihi, a laila ka moʻolelo ponoʻī.
    Ma kēia hoʻohālike, hiki i nā poʻomanaʻo a me nā ʻikepili ke hoʻololi i ka lōʻihi.
    ʻO ka mea nui, loaʻa iā mākou kahi papa inoa pili i hoʻohana ʻia i nā manawa āpau;
  2. Mālama ʻia nā poʻo a me nā moʻolelo ponoʻī ma nā kahawai ʻokoʻa.
    Ma ka hoʻohana ʻana i nā poʻomanaʻo o ka lōʻihi mau, hōʻoia mākou ʻaʻole pili ka pōʻino i kekahi poʻo i nā poʻo ʻē aʻe.
    Hoʻohana ʻia kahi ala like, no ka laʻana, i nā ʻōnaehana faila he nui;
  3. Hoʻopaʻa ʻia nā moʻolelo i kahi kahawai mau, hoʻoholo ʻia ka palena o ka moʻolelo e kekahi māka (kahi ʻano / ʻano o nā huaʻōlelo i pāpā ʻia i loko o nā poloka ʻikepili). Inā loaʻa kahi māka i loko o ka moʻolelo, a laila hoʻololi mākou iā ia me kahi kaʻina (e pakele iā ia).
    Hoʻohana ʻia kahi ala like, no ka laʻana, i ka protocol PPP.

E hōʻike wau.

Kōkua 1:
ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash
Maʻalahi loa nā mea a pau ma aneʻi: ʻike i ka lōʻihi o ka moʻolelo, hiki iā mākou ke helu i ka helu o ke poʻo aʻe. No laila, neʻe mākou i nā poʻomanaʻo a hiki i ka wā e hālāwai ai mākou i kahi wahi i hoʻopiha ʻia me 0xff (wahi manuahi) a i ʻole ka hopena o ka ʻaoʻao.

Kōkua 2:
ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash
Ma muli o ka lōʻihi o ka moʻolelo, ʻaʻole hiki iā mākou ke ʻōlelo mua i ka nui o nā moʻolelo (a no laila nā poʻo) e pono ai mākou i kēlā me kēia ʻaoʻao. Hiki iā ʻoe ke hoʻolaha i nā poʻomanaʻo a me nā ʻikepili iā lākou iho ma nā ʻaoʻao like ʻole, akā makemake wau i kahi ala ʻē aʻe: kau mākou i nā poʻo a me nā ʻikepili ma ka ʻaoʻao hoʻokahi, akā ʻo nā poʻo (o ka nui mau) mai ka hoʻomaka ʻana o ka ʻaoʻao, a me ka ʻikepili (o ka lōʻihi loli) mai ka hopena. Ke "hui" lākou (ʻaʻole lawa kahi kaʻawale no kahi komo hou), manaʻo mākou ua pau kēia ʻaoʻao.

Kōkua 3:
ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash
ʻAʻole pono e mālama i ka lōʻihi a i ʻole nā ​​​​ʻike ʻē aʻe e pili ana i kahi o ka ʻikepili ma ke poʻo; ua lawa nā māka e hōʻike ana i nā palena o nā moʻolelo. Eia naʻe, pono e hoʻoponopono ʻia ka ʻikepili i ke kākau/heluhelu.
E hoʻohana wau i ka 0xff ma ke ʻano he marker (e hoʻopiha i ka ʻaoʻao ma hope o ka holoi ʻana), no laila ʻaʻole e mālama ʻia ka wahi manuahi e like me ka ʻikepili.

Papa hoʻohālikelike:

Kō koho 1
Kō koho 2
Kō koho 3

Hoʻomanawanui hewa
-
+
+

Hoʻolaha
+
-
+

Paʻakikī hoʻokō
*
**
**

Loaʻa i ka koho 1 kahi kīnā make: inā i pohō kekahi o nā poʻomanaʻo, e luku ʻia ke kaulahao hope a pau. ʻO nā koho i koe e ʻae iā ʻoe e hoʻihoʻi i kekahi mau ʻikepili i ka wā o ka pōʻino nui.
Akā, eia ka mea kūpono e hoʻomanaʻo ua hoʻoholo mākou e mālama i ka ʻikepili ma kahi ʻano i hoʻopili ʻia, a no laila e nalowale mākou i nā ʻikepili āpau ma ka ʻaoʻao ma hope o kahi moʻolelo "haʻihaʻi", no laila ʻoiai aia kahi hapa i ka papaʻaina, ʻaʻole mākou e hana. e noonoo.

ʻoluʻolu:

  • i ka koho mua, pono mākou e mālama i ka lōʻihi wale nō ma ke poʻo, inā mākou e hoʻohana i nā helu helu-lōʻihi, a laila ma ka hapanui o nā hihia hiki iā mākou ke loaʻa me hoʻokahi byte;
  • i ka lua o ka koho pono mākou e mālama i ka helu hoʻomaka a me ka lōʻihi; he nui mau ka mooolelo, manao au he 4 paita no ka mooolelo (XNUMX bytes no ka offset, a elua paita no ka loa);
  • ʻo ke kolu o ka koho wale nō e pono ai i hoʻokahi mea e hōʻike ai i ka hoʻomaka ʻana o ka hoʻopaʻa ʻana, a me ka hoʻopaʻa ʻana iā ia iho e hoʻonui ʻia e 1-2% ma muli o ka pale. Ma keʻano laulā, e pili ana i ka parity me ka koho mua.

I ka hoʻomaka ʻana, ua noʻonoʻo wau i ka koho ʻelua ma ke ʻano nui (a ua kākau pū i ka hoʻokō). Ua haʻalele wau iā ia i koʻu hoʻoholo hope ʻana e hoʻohana i ka compression.

Malia paha i kekahi lā e hoʻohana mau wau i kahi koho like. No ka laʻana, inā pono wau e pili i ka mālama ʻana i ka ʻikepili no kahi moku e holo ana ma waena o ka Honua a me Mars, e loaʻa nā koi ʻokoʻa loa no ka hilinaʻi, cosmic radiation, ...

ʻO ke kolu o ka koho: Ua hāʻawi au iā ia i ʻelua mau hōkū no ka paʻakikī o ka hoʻokō ʻana no ka mea ʻaʻole wau makemake i ka hoʻopili ʻana me ka pale, hoʻololi i ka lōʻihi o ke kaʻina hana, etc. ʻAe, ʻae paha wau, akā pono wau e kākau i ke code - no ke aha e koi ai iā ʻoe iho e hana i kahi mea āu e makemake ʻole ai.

Hōʻuluʻulu: Koho mākou i ka koho waiho ʻana ma ke ʻano o nā kaulahao "header me ka lōʻihi - ʻikepili o ka lōʻihi loli" ma muli o ka pono a me ka maʻalahi o ka hoʻokō.

Ke hoʻohana nei i nā kahua Bit e nānā i ka holomua o nā hana kākau

ʻAʻole wau e hoʻomanaʻo i kahi i loaʻa ai iaʻu ka manaʻo, akā ua like ia me kēia:
No kēlā me kēia hoʻokomo, hoʻokaʻawale mākou i kekahi mau ʻāpana e mālama i nā hae.
E like me kā mākou i ʻōlelo ai ma mua, ma hope o ka holoi ʻana, ua hoʻopiha ʻia nā ʻāpana āpau me 1s, a hiki iā mākou ke hoʻololi i ka 1 i ka 0, akā ʻaʻole i ka hope. No laila "ʻaʻole i hoʻonohonoho ka hae" hoʻohana mākou i ka 1, no ka "ua hoʻonohonoho ʻia ka hae" hoʻohana mākou i ka 0.

Eia ke ʻano o ka hoʻokomo ʻana i kahi moʻolelo lōʻihi i ka uila:

  1. E hoʻonoho i ka hae "ua hoʻomaka ka hoʻopaʻa leo lōʻihi";
  2. E hoʻopaʻa i ka lōʻihi;
  3. E hoʻonoho i ka hae "ua hoʻomaka ka hoʻopaʻa ʻikepili";
  4. Hoʻopaʻa mākou i ka ʻikepili;
  5. E hoʻonoho i ka hae "hoʻopau ʻia".

Eia hou, e loaʻa iā mākou kahi hae "hewa", no ka huina o nā hae 4 bit.

I kēia hihia, loaʻa iā mākou ʻelua mau mokuʻāina paʻa "1111" - ʻaʻole i hoʻomaka ka hoʻopaʻa ʻana a "1000" - ua kūleʻa ka hoʻopaʻa ʻana; i ka wā e hoʻopau ʻole ʻia ka hana hoʻopaʻa ʻana, e loaʻa iā mākou nā mokuʻāina waena, a laila hiki iā mākou ke ʻike a hana.

He mea hoihoi ka hoʻokokoke ʻana, akā pale wale ia i ka pau ʻana o ka mana a me nā hemahema like ʻole, ʻoiaʻiʻo, he mea nui kēia, akā mamao loa kēia mai ke kumu wale nō (a i ʻole ke kumu nui) no nā hemahema.

Hōʻuluʻulu: E neʻe kāua i ka ʻimi ʻana i kahi hopena maikaʻi.

Nā helu helu

Hiki i nā Checksums ke hōʻoia (me ke kūpono kūpono) ke heluhelu pololei nei mākou i ka mea i kākau ʻia. A, ʻaʻole e like me nā māla bit i kūkākūkā ʻia ma luna, hana mau lākou.

Inā mākou e noʻonoʻo i ka papa inoa o nā kumu kumu o nā pilikia a mākou i kūkākūkā ai ma luna, a laila hiki i ka checksum ke ʻike i kahi hewa me ka ʻole o kona kumu. (koe wale nō paha, no nā malihini ʻino - hiki iā lākou ke hana i ka checksum pū kekahi).

No laila, inā ʻo kā mākou pahuhopu e hōʻoia i ka paʻa o ka ʻikepili, he manaʻo maikaʻi loa nā checksums.

ʻO ke koho o ka algorithm no ka helu ʻana i ka checksum ʻaʻole i hāpai i kekahi nīnau - CRC. Ma kekahi ʻaoʻao, hiki i nā waiwai makemakika ke hopu i kekahi mau ʻano hewa 100%; ma ka ʻaoʻao ʻē aʻe, ma ka ʻikepili random e hōʻike pinepine ana kēia algorithm i ka nui o ka hui ʻana ʻaʻole i ʻoi aku ka nui ma mua o ka palena theoretical. ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash. ʻAʻole paha ʻo ia ka algorithm wikiwiki loa, ʻaʻole hoʻi ʻo ia ka mea liʻiliʻi loa e pili ana i ka helu o nā hui ʻana, akā he ʻano koʻikoʻi koʻikoʻi ia: i nā hoʻāʻo aʻu i hālāwai ai, ʻaʻohe kumu i hāʻule ʻole. ʻO ke kūpaʻa ka mea nui i kēia hihia.

Ka laʻana o kahi haʻawina volumetric: ʻāpana 1, ʻāpana 2 (nā loulou i narod.ru, kala mai).

Eia naʻe, ʻaʻole i pau ka hana o ke koho ʻana i kahi checksum; ʻO ka CRC kahi ʻohana holoʻokoʻa o nā checksums. Pono ʻoe e hoʻoholo i ka lōʻihi, a laila koho i kahi polynomial.

ʻO ke koho ʻana i ka lōʻihi checksum ʻaʻole ia he nīnau maʻalahi e like me ka mea i ʻike mua ʻia.

E hōʻike mai iaʻu:
E loaʻa iā mākou ke kuhi hewa i kēlā me kēia byte ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash a me kahi helu helu kūpono, e helu kākou i ka helu awelika o nā hewa i kēlā me kēia miliona moʻolelo:

ʻIkepili, byte
Checksum, byte
Nā hewa i ʻike ʻole ʻia
ʻIke hewa hoʻopunipuni
Ka huina hoopunipuni

1
0
1000
0
1000

1
1
4
999
1003

1
2
0
1997
1997

1
4
0
3990
3990

10
0
9955
0
9955

10
1
39
990
1029

10
2
0
1979
1979

10
4
0
3954
3954

1000
0
632305
0
632305

1000
1
2470
368
2838

1000
2
10
735
745

1000
4
0
1469
1469

He mea maʻalahi nā mea a pau - e pili ana i ka lōʻihi o ka ʻikepili i pale ʻia, koho i ka lōʻihi o ka checksum me ka liʻiliʻi o nā mea maikaʻi ʻole - a aia ka hoʻopunipuni i loko o ka ʻeke.

Eia nō naʻe, hiki mai ka pilikia me nā helu helu pōkole: ʻoiai ua maikaʻi lākou i ka ʻike ʻana i nā hewa bit hoʻokahi, hiki iā lākou me ke kūlana kiʻekiʻe loa ke ʻae i ka ʻikepili āpau i pololei. Aia kekahi ʻatikala e pili ana iā Habré e wehewehe ana pilikia ma ke ola maoli.

No laila, no ka hana ʻana i kahi pāʻani checksum ʻaneʻane hiki ʻole, pono ʻoe e hoʻohana i nā checksums he 32 bits a i ʻole ka lōʻihi. (no ka lōʻihi ma mua o 64 bits, hoʻohana maʻamau nā hana hash cryptographic).

ʻOiai ʻo kaʻu i kākau mua ai e pono mākou e mālama i ka lewa ma nā ʻano āpau, e hoʻohana mau mākou i kahi checksum 32-bit (ʻaʻole lawa nā 16 bits, ʻoi aku ka nui o ka hui ʻana ma mua o 0.01%; a me 24 mau bits, ʻoiai lākou. ʻōlelo, ʻaʻole ma ʻaneʻi a ʻaʻole hoʻi).

Hiki ke kū mai ma ʻaneʻi: ua mālama anei mākou i kēlā me kēia byte i ke koho ʻana i ka hoʻopaʻa ʻana i mea e hāʻawi ai i 4 byte i ka manawa hoʻokahi? ʻAʻole ʻoi aku ka maikaʻi ʻaʻole e kaomi a hoʻohui i kahi checksum? ʻOiaʻiʻo ʻaʻole, ʻaʻohe kaomi ʻaʻole manaʻo, ʻaʻole pono mākou i ka nānā pono.

Ke koho ʻana i kahi polynomial, ʻaʻole mākou e hana hou i ka huila, akā lawe i ka CRC-32C kaulana i kēia manawa.
ʻIke kēia code i nā hewa bit 6 ma nā ʻeke a hiki i ka 22 bytes (ʻo ia paha ka hihia maʻamau no mākou), 4 mau hewa bit ma nā ʻeke a hiki i 655 bytes (he hihia maʻamau nō hoʻi no mākou), 2 a i ʻole kekahi helu ʻokoʻa o nā hewa bit ma nā ʻeke. o kekahi loihi kupono.

Inā makemake kekahi i nā kikoʻī

ʻatikala Wikipedia e pili ana iā CRC.

Nā palena helu crc-32c maluna o Koopman pūnaewele - ʻo ia paha ka loea CRC alakaʻi ma ka honua.

В kāna ʻatikala ka mea kekahi code hoihoi, e hāʻawi ana i nā palena ʻoi aku ka maikaʻi no nā lōʻihi o ka ʻeke e pili ana iā mākou, akā ʻaʻole wau i noʻonoʻo i ka ʻokoʻa nui, a ua mākaukau wau e koho i ke code maʻamau ma mua o ka mea maʻamau a i ʻimi maikaʻi ʻia.

Eia kekahi, no ka hoʻopili ʻia ʻana o kā mākou ʻikepili, kū mai ka nīnau: pono anei mākou e helu i ka checksum o ka ʻikepili i hoʻopaʻa ʻia a i ʻole i hoʻopaʻa ʻia?

ʻO nā ʻōlelo hoʻopaʻapaʻa e pili ana i ka helu ʻana i ka checksum o ka ʻikepili i hoʻopaʻa ʻole ʻia:

  • Pono mākou e nānā i ka palekana o ka mālama ʻana i ka ʻikepili - no laila e nānā pololei mākou (ma ka manawa like, e nānā ʻia nā hewa i ka hoʻokō ʻana i ka hoʻokō / decompression, nā pōʻino i hana ʻia e ka hoʻomanaʻo haʻihaʻi, etc.);
  • ʻO ka algorithm deflate ma zlib he hoʻokō kūpono a ʻaʻole ʻaʻole hāʻule me ka ʻikepili hoʻokomo "keokeo"; Eia kekahi, hiki iā ia ke ʻike kūʻokoʻa i nā hewa i ke kahawai hoʻokomo, e hōʻemi ana i ka nui o ka hiki ke ʻike ʻole i kahi hewa (i hana i kahi hoʻokolohua me ka hoʻohuli ʻana i hoʻokahi bit i kahi moʻolelo pōkole, ʻike ʻo zlib i kahi hewa. ma kahi o ka hapakolu o nā hihia).

Nā hoʻopaʻapaʻa kūʻē i ka helu ʻana i ka checksum o ka ʻikepili i hoʻopaʻa ʻole ʻia:

  • "Hoʻopili ʻia" ʻo CRC no nā hapa liʻiliʻi e like me ke ʻano o ka hoʻomanaʻo flash (hiki i kahi hewa i loko o kahi kahawai i hoʻopili ʻia ke hoʻololi nui i ke kahawai hoʻopuka, a ma ke ʻano maʻamau, hiki iā mākou ke "hopu" i ka hui ʻana);
  • ʻAʻole makemake nui au i ka manaʻo o ka hāʻawi ʻana i ka ʻikepili i haki ʻia i ka decompressor, ʻO wai ka mea ʻikepehea kāna e hana ai.

Ma kēia papahana, ua hoʻoholo wau e haʻalele i ka hana i ʻae ʻia e mālama i kahi checksum o ka ʻikepili i hoʻopaʻa ʻole ʻia.

Hōʻuluʻulu: Hoʻohana mākou i ka CRC-32C, ke helu nei mākou i ka checksum mai ka ʻikepili i ke ʻano i kākau ʻia ai e flash (ma hope o ke kaomi ʻana).

Hoʻopiʻi

Ka hoʻohana 'ana i ka redundant coding 'aʻole, 'oiaʻiʻo, e hoopau i ka ikepili poho, nae, ka mea hiki loa (pinepine i na kauoha he nui) hoemi i ka likelihood o irrecoverable ikepili poho.

Hiki iā mākou ke hoʻohana i nā ʻano redundancy like ʻole e hoʻoponopono i nā hewa.
Hiki i nā code Hamming ke hoʻoponopono i nā hewa liʻiliʻi hoʻokahi, nā code character Reed-Solomon, nā kope he nui o ka ʻikepili i hui pū ʻia me nā checksums, a i ʻole ka hoʻopili ʻana e like me RAID-6 hiki ke kōkua i ka hoʻihoʻi ʻana i ka ʻikepili i ka wā o ka palaho nui.
I ka hoʻomaka ʻana, ua kūpaʻa wau i ka hoʻohana nui ʻana i ka hewa-kūpono coding, akā ua ʻike wau he pono mua mākou e ʻike i nā hewa a mākou e makemake ai e pale aku iā mākou iho, a laila koho i ka coding.

Ua ʻōlelo mākou ma mua e pono e hopu koke ʻia nā hewa. Ma nā wahi hea e hiki ai iā mākou ke hālāwai me nā hewa?

  1. ʻO ka hoʻopaʻa ʻole ʻana (no kekahi kumu i ka manawa o ka hoʻopaʻa ʻana ua pio ka mana, ua maloʻo ka Raspberry, ...)
    Auwe, inā loaʻa kēia hewa, ʻo nā mea a pau i koe e haʻalele i nā moʻolelo kūpono ʻole a noʻonoʻo i ka nalowale o ka ʻikepili;
  2. Kākau i nā hewa (no kekahi kumu, ʻaʻole ka mea i kākau ʻia i ka hoʻomanaʻo flash)
    Hiki iā mākou ke ʻike koke i kēlā mau hewa inā hana mākou i kahi heluhelu hoʻāʻo ma hope koke o ka hoʻopaʻa ʻana;
  3. Hoʻololi i ka ʻikepili i ka hoʻomanaʻo i ka wā e waiho ai;
  4. Heluhelu hewa
    No ka hoʻoponopono ʻana, inā ʻaʻole kūlike ka checksum, lawa ia e hana hou i ka heluhelu ʻana i nā manawa he nui.

ʻO ia hoʻi, ʻaʻole hiki ke hoʻoponopono ʻia nā hewa o ke kolu o ke ʻano (ka palaho ʻana o ka ʻikepili i ka wā mālama) me ka ʻole o ka hewa-kūpono coding. Me he mea lā ʻaʻole hiki ke loaʻa ia mau hewa.

Hōʻuluʻulu: ua hoʻoholo ʻia e haʻalele i ka coding redundant, akā inā hōʻike ka hana i ka hewa o kēia hoʻoholo, a laila e hoʻi i ka noʻonoʻo ʻana i ka pilikia (me nā ʻikepili i hōʻiliʻili ʻia e pili ana i nā hemahema, e hiki ai ke koho i ke ʻano o ka coding maikaʻi loa).

ʻO kekahi

ʻOiaʻiʻo, ʻaʻole ʻae ke ʻano o ka ʻatikala iā mākou e hōʻoia i kēlā me kēia ʻāpana i ke ʻano (a ua pau ko'u ikaika), no laila e hele pōkole wau i kekahi mau mea i hoʻopaʻa ʻole ʻia ma mua.

  • Ua hoʻoholo ʻia e hana i nā ʻaoʻao āpau i "kaulike"
    ʻO ia hoʻi, ʻaʻohe ʻaoʻao kūikawā me ka metadata, nā loina kaʻawale, a me nā mea ʻē aʻe.
    Mālama kēia i ka ʻaʻahu ʻana ma nā ʻaoʻao, ʻaʻohe wahi o ka hemahema, a makemake wau ia;
  • Pono e hāʻawi i ka hoʻololi ʻana o ka ʻano.
    He ʻino ke ʻano me ka helu ʻole o ke poʻo!
    Ua lawa ia e hoʻohui i kahi kahua me kahi helu Magic (hōʻailona) i ke poʻo ʻaoʻao, e hōʻike ana i ka mana o ka ʻano i hoʻohana ʻia. (ʻAʻole wau i manaʻo i ka hoʻomaʻamaʻa ʻana he ʻumi o lākou);
  • E hoʻohana i kahi poʻomanaʻo-lōʻihi no nā moʻolelo (he nui ka nui), e ho'āʻo ana e hana i ka lōʻihi 1 byte i ka nui o nā hihia;
  • No ka hoʻopili ʻana i ka lōʻihi o ke poʻo a me ka lōʻihi o ka ʻāpana i ʻoki ʻia o ka moʻolelo i hoʻopaʻa ʻia, e hoʻohana i nā code binary ʻokoʻa-lōʻihi.

Ua kōkua nui mīkini hana pūnaewele Nā code Huffman. I loko o nā minuke liʻiliʻi ua hiki iā mākou ke koho i nā code lōʻihi e pono ai.

ʻO ka wehewehe ʻana i ka ʻano waihona waihona

Kakau pai

Mālama ʻia nā kahua ʻoi aku ka nui ma mua o hoʻokahi paita ma ke ʻano nui-endian (kauoha byte network), ʻo ia hoʻi, kākau ʻia ʻo 0x1234 e like me 0x12, 0x34.

Ka helu helu

Hoʻokaʻawale ʻia nā hoʻomanaʻo flash āpau i nā ʻaoʻao like ka nui.

ʻO ka nui o ka ʻaoʻao maʻamau ʻo 32Kb, akā ʻaʻole ʻoi aku ma mua o 1/4 o ka nui o ka nui o ka puʻupuʻu hoʻomanaʻo (no kahi chip 4MB, loaʻa nā ʻaoʻao 128).

Mālama kēlā me kēia ʻaoʻao i ka ʻikepili me ke kūʻokoʻa o nā mea ʻē aʻe (ʻo ia hoʻi, ʻaʻole kuhikuhi ka ʻikepili ma kekahi ʻaoʻao i ka ʻikepili ma kekahi ʻaoʻao).

Ua helu ʻia nā ʻaoʻao a pau ma ke ʻano kūlohelohe (ma ke kaʻina piʻi o nā helu wahi), e hoʻomaka me ka helu 0 (hoʻomaka ka ʻaoʻao zero ma ka helu helu 0, hoʻomaka ka ʻaoʻao mua ma 32Kb, hoʻomaka ka ʻaoʻao ʻelua ma 64Kb, etc.)

Hoʻohana ʻia ka puʻupuʻu hoʻomanaʻo ma ke ʻano he cyclic buffer (ring buffer), ʻo ia hoʻi, hele ka kākau mua i ka helu ʻaoʻao 0, a laila helu 1, ..., ke hoʻopiha mākou i ka ʻaoʻao hope, hoʻomaka kahi pōʻai hou a hoʻomau ka hoʻopaʻa ʻana mai ka ʻaoʻao ʻaʻohe. .

I loko o ka ʻaoʻao

ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash
I ka hoʻomaka ʻana o ka ʻaoʻao, mālama ʻia kahi poʻomanaʻo ʻaoʻao 4-byte, a laila mālama ʻia kahi header checksum (CRC-32C), a laila mālama ʻia nā moʻolelo ma ke ʻano "header, data, checksum".

Aia ke poʻo inoa o ka ʻaoʻao (ʻōmaʻomaʻo lepo ma ke kiʻikuhi):

  • ʻelua-byte Magic Number field (he hōʻailona hoʻi o ka mana hōpili)
    no ka mana o kēia manawa o ka hōpili ua helu ʻia e like me 0xed00 ⊕ номер страницы;
  • ʻelua-byte counter “Page version” (memo rewrite cycle number).

Mālama ʻia nā mea komo ma ka ʻaoʻao ma ke ʻano i hoʻopaʻa ʻia (hoʻohana ʻia ka deflate algorithm). Hoʻopili ʻia nā moʻolelo a pau ma ka ʻaoʻao hoʻokahi i hoʻokahi pae (hoʻohana ʻia kahi puke wehewehe ʻōlelo maʻamau), a ma kēlā me kēia ʻaoʻao hou e hoʻomaka hou ana ke kaomi ʻana. ʻO ia hoʻi, no ka hoʻopau ʻana i kekahi moʻolelo, pono nā moʻolelo mua a pau mai kēia ʻaoʻao (a me kēia wale nō).

E hoʻopaʻa ʻia kēlā me kēia moʻolelo me ka hae Z_SYNC_FLUSH, a ma ka hope o ke kahawai i hoʻopaʻa ʻia he 4 bytes 0x00, 0x00, 0xff, 0xff, ma mua paha o hoʻokahi a ʻelua mau paita zero.
Hoʻolei mākou i kēia kaʻina (4, 5 a i ʻole 6 paita ka lōʻihi) i ke kākau ʻana i ka hoʻomanaʻo uila.

He 1, 2 a i ʻole 3 bytes ka waihona waihona:

  • hoʻokahi bit (T) e hōʻike ana i ke ʻano o ka moʻolelo: 0 - pōʻaiapili, 1 - log;
  • kahi māla lōʻihi (S) mai ka 1 a hiki i ka 7 bits, e wehewehe ana i ka lōʻihi o ke poʻo a me ka "huelo" pono e hoʻohui ʻia i ka moʻolelo no ka decompression;
  • lōʻihi moʻolelo (L).

S papa waiwai:

S
Ka lōʻihi o ke poʻo, bytes
Kiola ʻia ma ke kākau, byte

0
1
5 (00 00 00 ff ff)

10
1
6 (00 00 00 00 ff ff)

110
2
4 (00 00 ff ff)

1110
2
5 (00 00 00 ff ff)

11110
2
6 (00 00 00 00 ff ff)

1111100
3
4 (00 00 ff ff)

1111101
3
5 (00 00 00 ff ff)

1111110
3
6 (00 00 00 00 ff ff)

Ua hoʻāʻo wau e hōʻike, ʻaʻole maopopo iaʻu i ka maopopo ʻana o ia mea:
ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash
Hōʻike ka melemele i ke kahua T, keʻokeʻo ke kahua S, ʻōmaʻomaʻo L (ka lōʻihi o ka ʻikepili i hoʻopaʻa ʻia i loko o nā bytes), ʻulaʻula ka ʻikepili i hoʻopaʻa ʻia, ʻulaʻula nā bytes hope o ka ʻikepili i hoʻopaʻa ʻole ʻia i kākau ʻia i ka hoʻomanaʻo uila.

No laila, hiki iā mākou ke kākau i nā poʻomanaʻo moʻolelo o ka lōʻihi maʻamau (a hiki i 63+5 bytes ma ke ʻano i hoʻopili ʻia) i hoʻokahi byte.

Ma hope o kēlā me kēia moʻolelo, mālama ʻia kahi checksum CRC-32C, kahi i hoʻohana ʻia ai ka waiwai hoʻohuli o ka checksum mua ma ke ʻano he kumu mua (init).

Loaʻa i ka CRC ka waiwai o ka "lōʻihi", e hana ana kēia ʻano hana (me ka hoʻololi ʻana a i ʻole ka liʻiliʻi liʻiliʻi i ke kaʻina hana): ʻO kaʻu hoʻokō ʻana i kahi pahu apo ma NOR flash.
ʻO ia, ʻoiaʻiʻo, helu mākou i ka CRC o nā bytes mua o nā poʻo a me nā ʻikepili ma kēia ʻaoʻao.

ʻO ka hahai pono ʻana i ka checksum ke poʻo o ka moʻolelo aʻe.

Hoʻolālā ʻia ke poʻo i ke ʻano e ʻokoʻa mau ai kāna byte mua mai 0x00 a me 0xff (inā ma kahi o ka byte mua o ke poʻo e hālāwai ai mākou me 0xff, ʻo ia hoʻi he wahi i hoʻohana ʻole ʻia; 0x00 hōʻailona he hewa).

Laʻana Algorithms

Heluhelu mai ka Flash Memory

Hele mai kēlā me kēia heluhelu me ka checksum check.
Inā ʻaʻole i kūlike ka checksum, e hana hou ʻia ka heluhelu ʻana me ka manaʻolana e heluhelu i ka ʻikepili pololei.

(makemake kēia, ʻaʻole hūnā ʻo Linux i nā heluhelu mai NOR Flash, hoʻāʻo ʻia)

Kākau i ka hoʻomanaʻo uila

Hoʻopaʻa mākou i ka ʻikepili.
E heluhelu kakou.

Inā ʻaʻole kūlike ka ʻikepili heluhelu i ka ʻikepili i kākau ʻia, hoʻopiha mākou i ka wahi me nā zeros a hōʻailona i kahi hewa.

Hoʻomākaukau i kahi microcircuit hou no ka hana

No ka hoʻomaka ʻana, kākau ʻia kahi poʻomanaʻo me ka mana 1 i ka ʻaoʻao mua (a i ʻole zero).
Ma hope o kēlā, kākau ʻia ka pōʻaiapili mua i kēia ʻaoʻao (loaʻa ka UUID o ka mīkini a me nā hoʻonohonoho paʻamau).

ʻO ia, ua mākaukau ka hoʻomanaʻo flash no ka hoʻohana.

Ke hoʻouka nei i ka mīkini

I ka hoʻouka ʻana, heluhelu ʻia nā 8 bytes mua o kēlā me kēia ʻaoʻao (header + CRC), ʻaʻole nānā ʻia nā ʻaoʻao me kahi helu Magic ʻike ʻole a i ʻole CRC hewa.
Mai nā ʻaoʻao "pololei", koho ʻia nā ʻaoʻao me ka mana kiʻekiʻe loa, a lawe ʻia ka ʻaoʻao me ka helu kiʻekiʻe loa.
Heluhelu ʻia ka moʻolelo mua, ʻike ʻia ka pololei o ka CRC a me ke alo o ka hae "context". Inā maikaʻi nā mea a pau, manaʻo ʻia kēia ʻaoʻao i kēia manawa. Inā ʻaʻole, huli mākou i ka mua a loaʻa iā mākou kahi ʻaoʻao "ola".
a ma ka ʻaoʻao i loaʻa, heluhelu mākou i nā moʻolelo a pau, nā mea a mākou e hoʻohana ai me ka hae "context".
E mālama i ka puke wehewehe ʻōlelo zlib (pono ia no ka hoʻohui ʻana i kēia ʻaoʻao).

ʻO ia, ua pau ka download, hoʻihoʻi ʻia ka pōʻaiapili, hiki iā ʻoe ke hana.

Hoʻohui i kahi hoʻokomo puke moʻolelo

Hoʻopaʻa mākou i ka moʻolelo me ka puke wehewehe ʻōlelo pololei, e kuhikuhi ana iā Z_SYNC_FLUSH. ʻIke mākou inā pili ka moʻolelo i hoʻopaʻa ʻia i ka ʻaoʻao o kēia manawa.
Inā ʻaʻole kūpono (a i ʻole he mau hewa CRC ma ka ʻaoʻao), e hoʻomaka i kahi ʻaoʻao hou (e ʻike i lalo).
Kākau mākou i ka moʻolelo a me CRC. Inā loaʻa ka hewa, e hoʻomaka i kahi ʻaoʻao hou.

ʻAoʻao hou

Koho mākou i kahi ʻaoʻao manuahi me ka helu haʻahaʻa (manaʻo mākou he ʻaoʻao manuahi he ʻaoʻao me ka helu helu hewa ʻole ma ke poʻo a i ʻole me kahi ʻaoʻao i emi iho ma mua o ka mea o kēia manawa). Inā ʻaʻohe ʻaoʻao e like me ia, koho i ka ʻaoʻao me ka helu liʻiliʻi mai ka poʻe i loaʻa ka mana like me ka helu o kēia manawa.
Holoi mākou i ka ʻaoʻao i koho ʻia. Nānā mākou i nā mea me 0xff. Inā hewa kekahi mea, e lawe i ka ʻaoʻao manuahi aʻe, etc.
Kākau mākou i kahi poʻomanaʻo ma ka ʻaoʻao i holoi ʻia, ʻo ke komo mua ke kūlana o kēia manawa o ka pōʻaiapili, ʻo ka mea aʻe ʻo ke komo ʻana i ka log kākau ʻole (inā loaʻa kekahi).

Hoʻopili kūpono

I koʻu manaʻo, ua lilo ia i ʻano maikaʻi no ka mālama ʻana i nā kahawai ʻike hou aʻe a liʻiliʻi paha (ka kikokikona maʻalahi, JSON, MessagePack, CBOR, protobuf paha) ma NOR Flash.

ʻOiaʻiʻo, "hoʻopili ʻia" ka format no SLC NOR Flash.

ʻAʻole pono e hoʻohana me ka media BER kiʻekiʻe e like me NAND a i ʻole MLC NOR (ua loaʻa paha ia mea hoʻomanaʻo no ke kūʻai aku? Ua ʻike wale wau i ʻōlelo ʻia ma nā hana ma nā code hoʻoponopono).

Eia kekahi, ʻaʻole pono e hoʻohana ʻia me nā polokalamu i loaʻa iā lākou iho FTL: USB flash, SD, MicroSD, etc (no ia hoʻomanaʻo ua hana au i kahi ʻano me ka nui o ka ʻaoʻao o 512 bytes, kahi pūlima ma ka hoʻomaka o kēlā me kēia ʻaoʻao a me nā helu moʻolelo kūʻokoʻa - i kekahi manawa hiki ke hoʻihoʻi i nā ʻikepili āpau mai kahi flash drive "glitched" me ka heluhelu maʻalahi..

Ma muli o nā hana, hiki ke hoʻohana ʻia ke ʻano me ka ʻole o ka hoʻololi ʻana i nā flash drive mai 128Kbit (16Kb) a i 1Gbit (128MB). Inā makemake ʻia, hiki iā ʻoe ke hoʻohana iā ia ma nā chips nui, akā pono paha ʻoe e hoʻoponopono i ka nui o ka ʻaoʻao (Akā, eia ka nīnau no ka hiki ke hoʻokele waiwai; ʻaʻole paipai ke kumukūʻai no ka nui nui NOR Flash).

Inā ʻike kekahi i ka ʻano hoihoi a makemake e hoʻohana iā ia i kahi papahana hāmama, e kākau, e hoʻāʻo wau e ʻimi i ka manawa, e hoʻolalelale i ke code a kau iā ia ma github.

hopena

E like me kāu e ʻike ai, ma ka hopena ua maʻalahi ke ʻano a me ka luuluu.

He mea paʻakikī ke noʻonoʻo i ka ulu ʻana o koʻu manaʻo i loko o kahi ʻatikala, akā manaʻoʻiʻo mai iaʻu: i ka wā mua makemake wau e hana i kahi mea maʻalahi, hiki ʻole ke hoʻopau, hiki ke ola i kahi pahū nuklea ma kahi kokoke. Eia naʻe, ua lanakila mau ke kumu (manaʻo wau) a ua neʻe mālie nā mea nui i ka maʻalahi a me ka compactness.

Ua hewa paha au? ʻAe, maopopo. Hiki paha ke hoʻololi, no ka laʻana, ua kūʻai mākou i kahi pūʻulu o nā microcircuits haʻahaʻa haʻahaʻa. A i ʻole no kekahi kumu ʻē aʻe ʻaʻole e hoʻokō nā mea hana i nā manaʻolana hilinaʻi.

Loaʻa iaʻu kahi hoʻolālā no kēia? Manaʻo wau ma hope o ka heluhelu ʻana i ka ʻatikala ʻaʻohe kānalua ʻoe aia kahi hoʻolālā. ʻAʻole hoʻokahi wale nō.

Ma kahi palapala koʻikoʻi iki, ua hoʻomohala ʻia ka ʻano ma ke ʻano he koho hana a ma ke ʻano he "baluna hoʻāʻo".

I kēia manawa e hana maikaʻi ana nā mea a pau ma ka papaʻaina, ʻoiaʻiʻo i ka lā aʻe e kau ʻia ka hopena (kokoke) ma nā haneli o nā mea hana, e ʻike kākou i ka mea e hana nei i ka hana "kaua" (ʻoi aku ka maikaʻi, ke manaʻo nei au e ʻae ka format iā ʻoe e ʻike pono i nā hemahema; no laila hiki iā ʻoe ke hōʻiliʻili i nā helu helu piha). I loko o kekahi mau mahina e hiki ke huki i nā hopena (a inā he pōʻino ʻoe, ʻoiai ma mua).

Inā, e pili ana i nā hopena o ka hoʻohana, ʻike ʻia nā pilikia koʻikoʻi a koi ʻia nā hoʻomaikaʻi, a laila e kākau maoli wau e pili ana.

Paipalapala

ʻAʻole wau i makemake e hana i kahi papa inoa lōʻihi o nā hana i hoʻohana ʻia; ma hope o nā mea a pau, loaʻa iā Google nā ​​mea āpau.

Maʻaneʻi ua hoʻoholo wau e waiho i kahi papa inoa o nā mea i ʻike ʻia i mea hoihoi loa iaʻu, akā ua neʻe mālie lākou i loko o ka kikokikona o ka ʻatikala, a waiho ʻia kahi mea ma ka papa inoa:

  1. Mea hoʻohana infgen mai ka mea kākau zlib. Hiki ke hōʻike maopopo i nā mea o nā waihona deflate/zlib/gzip. Inā pono ʻoe e hoʻoponopono i ke ʻano o loko o ka format deflate (a i ʻole gzip), makemake nui wau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka