System.ArgumentOutOfRangeException: 索引和長(zhǎng)度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本專(zhuān)利技術(shù)涉及計(jì)算機(jī),尤其涉及一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法及裝置。
技術(shù)介紹
1、在軟件系統(tǒng)的運(yùn)行過(guò)程中,不可避免地會(huì)存在一些bug,解決bug最常用的方法就是通過(guò)分析系統(tǒng)運(yùn)行過(guò)程中記錄的日志來(lái)定位問(wèn)題。但是在一些小型的mcu系統(tǒng)中,通常資源受限,需要以最小的硬件成本及最高的運(yùn)算效率來(lái)實(shí)現(xiàn)所需的功能,無(wú)法使用一些現(xiàn)成復(fù)雜的文件系統(tǒng)來(lái)快速高效地存儲(chǔ)日志文本。
2、目前最常用的日志文本存儲(chǔ)方法就是將日志內(nèi)容寫(xiě)入文件,但該方式要求系統(tǒng)必須要掛載文件系統(tǒng),這對(duì)于小型mcu系統(tǒng)來(lái)說(shuō),會(huì)額外占用一定的系統(tǒng)及硬件資源。而且,由于文件系統(tǒng)的特性,日志內(nèi)容在寫(xiě)入文件時(shí)通常是以緩存的方式寫(xiě)在ram中,當(dāng)ram中的內(nèi)容達(dá)到一定的量時(shí)才會(huì)真正寫(xiě)入到flash中,這會(huì)導(dǎo)致日志無(wú)法及時(shí)寫(xiě)到flash中,當(dāng)系統(tǒng)掉電或意外復(fù)位時(shí),很可能會(huì)丟失最近一段時(shí)間的日志。
3、但是,如果要實(shí)現(xiàn)每次寫(xiě)入日志內(nèi)容都能及時(shí)寫(xiě)入到flash,則每次寫(xiě)入都需要刷新或保存文件系統(tǒng),這樣會(huì)導(dǎo)致每寫(xiě)入一次日志(幾十字節(jié)),文件系統(tǒng)的底層邏輯就會(huì)擦除并寫(xiě)入多個(gè)扇區(qū),降低flash壽命。同時(shí)擦除扇區(qū)耗時(shí)非常大,通常擦除一個(gè)扇區(qū)需要幾十到100毫秒時(shí)間,影響系統(tǒng)性能和實(shí)時(shí)性。
4、cn113986842a公開(kāi)了一種實(shí)時(shí)數(shù)據(jù)庫(kù)日志滾動(dòng)存儲(chǔ)的方法,包括設(shè)置存檔文件滾動(dòng)參數(shù);運(yùn)用存檔文件滾動(dòng)參數(shù);設(shè)置日志文件滾動(dòng)參數(shù);設(shè)置日志管理機(jī)制。存檔文件所在磁盤(pán)的可用空間小于最低可用磁盤(pán)空間時(shí),則存檔文件滾動(dòng)存儲(chǔ);當(dāng)存檔文件所在磁盤(pán)的使用率達(dá)到磁盤(pán)最大
5、本專(zhuān)利技術(shù)需要解決的技術(shù)問(wèn)題是:如何提高日志文本存儲(chǔ)的效率,避免影響mcu系統(tǒng)性能和實(shí)時(shí)性,以及提高flash的壽命。
技術(shù)實(shí)現(xiàn)思路
1、本專(zhuān)利技術(shù)的主要目的是提供一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,通過(guò)設(shè)置索引區(qū)和日志文本區(qū),能夠通過(guò)索引信息直接讀取日志文本,提高日志文本的存儲(chǔ)以及讀取效率。而且通過(guò)此方式,減少flash的擦除次數(shù),提高flash的壽命。同時(shí),還提供了一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)裝置。
2、為實(shí)現(xiàn)上述目的,本申請(qǐng)所采用的技術(shù)方案:
3、一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,包括以下步驟:
4、步驟1:對(duì)日志文本存儲(chǔ)區(qū)域劃分為索引區(qū)和日志文本區(qū);所述索引區(qū)和日志文本區(qū)分別包含多個(gè)扇區(qū);所述索引區(qū)用于存儲(chǔ)日志文本的索引信息以便能夠找到日志文本所在位置;所述日志文本區(qū)用于存儲(chǔ)日志文本;所述日志文本設(shè)有起始位置和結(jié)束位置;
5、步驟2:判斷日志文本區(qū)中結(jié)束位置所在扇區(qū)的剩余空間是否滿(mǎn)足寫(xiě)入日志文本;若滿(mǎn)足,則從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本;
6、若不滿(mǎn)足,則進(jìn)行步驟3;
7、步驟3:判斷結(jié)束位置所在扇區(qū)的下一扇區(qū)是否為日志文本的起始位置所在扇區(qū);若不是;則進(jìn)行步驟4;若是,則進(jìn)行步驟5;
8、步驟4:擦除結(jié)束位置所在扇區(qū)的下一扇區(qū),從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本,更新索引信息,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū);
9、步驟5:更新起始位置和索引信息,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū);擦除結(jié)束位置所在扇區(qū)的下一扇區(qū),從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本,更新索引信息,把更新后的索引信息再次滾動(dòng)寫(xiě)入到索引區(qū)。
10、優(yōu)選地,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū)具體為:所述索引區(qū)的多個(gè)扇區(qū)均包括多個(gè)用于儲(chǔ)存索引信息的位置,更新后的索引信息寫(xiě)入到儲(chǔ)存原索引信息位置的下一位置,并清除原本的索引信息。
11、優(yōu)選地,當(dāng)索引信息滾動(dòng)寫(xiě)入完一個(gè)扇區(qū)的位置后,擦除下一扇區(qū),寫(xiě)入更新后的索引信息并清除原本的索引信息;當(dāng)索引信息寫(xiě)入到索引區(qū)的最后一個(gè)扇區(qū)后,則下次返回第一個(gè)扇區(qū)重新循環(huán)進(jìn)行寫(xiě)入。
12、優(yōu)選地,所述索引信息包括日志文本的起始位置所在的扇區(qū)號(hào)、結(jié)束位置所在的扇區(qū)號(hào)、flag、crc校驗(yàn);所述flag的值設(shè)置為不全為0x00或0xff。
13、優(yōu)選地,所述起始位置的計(jì)算方式為起始位置所在的扇區(qū)號(hào)*扇區(qū)大小;所述結(jié)束位置的計(jì)算方式為結(jié)束位置所在的扇區(qū)號(hào)*扇區(qū)大小+x;
14、其中x為最后一個(gè)非0xff值的數(shù)據(jù)所在位置。
15、優(yōu)選地,若為首次使用或重啟時(shí),則需要進(jìn)行初始化,具體為:遍歷索引區(qū)的索引信息;若索引信息通過(guò)crc校驗(yàn),則記錄該索引信息,用于下一次寫(xiě)入日志文本;若沒(méi)有索引信息通過(guò)crc校驗(yàn),則擦除索引區(qū)及日志文本區(qū),并在索引區(qū)的第一個(gè)扇區(qū)寫(xiě)入初始化索引信息。
16、優(yōu)選地,所述索引區(qū)的扇區(qū)數(shù)量*扇區(qū)大小/16大于等于日志文本區(qū)的扇區(qū)數(shù)量*2。
17、優(yōu)選地,當(dāng)需要讀取日志文本時(shí),具體操作為:若結(jié)束位置位于起始位置后,則讀取開(kāi)始位置到結(jié)束位置之間的內(nèi)容;若結(jié)束位置位于起始位置前,則需要分兩次讀取,先讀取起始位置到日志文本區(qū)結(jié)尾位置的內(nèi)容,再讀取日志文本區(qū)開(kāi)始位置到日志結(jié)束位置的內(nèi)容。
18、其中,
19、nor?flash為:一種閃存類(lèi)型,可以用于存儲(chǔ)程序代碼、固件、操作系統(tǒng)以及其他數(shù)據(jù)。具有較低的存儲(chǔ)密度和較高的成本,但具有較快的讀取速度、較低的讀取延遲和較好的隨機(jī)訪(fǎng)問(wèn)性能。
20、crc校驗(yàn)為:即循環(huán)冗余校驗(yàn),是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或電腦文件等數(shù)據(jù)產(chǎn)生簡(jiǎn)短固定位數(shù)校核碼的快速算法,主要用來(lái)檢測(cè)或校核數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯(cuò)誤。crc利用除法及余數(shù)的原理,實(shí)現(xiàn)錯(cuò)誤偵測(cè)的功能,具有原理清晰、實(shí)現(xiàn)簡(jiǎn)單等優(yōu)點(diǎn)。
21、同時(shí),還提供了一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)裝置,包括如下單元:
22、分區(qū)單元:用于對(duì)日志文本存儲(chǔ)區(qū)域劃分為索引區(qū)和日志文本區(qū);
23、第一判斷單元:判斷日志文本區(qū)中結(jié)束位置所在扇區(qū)的剩余空間是否滿(mǎn)足寫(xiě)入日志文本;若滿(mǎn)足,則從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本;
24、第二判斷單元:判斷結(jié)束位置所在扇區(qū)的下一扇區(qū)是否為日志文本起始位置所在扇區(qū);
25、第一寫(xiě)入單元:擦除結(jié)束位置所在扇區(qū)的下一扇區(qū),從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本,更新索引信息,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū);
26、第二寫(xiě)入單元:更新起始位置和索引信息,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū);擦除結(jié)束位置所在扇區(qū)的下一扇區(qū),從上一次的結(jié)束位置的下一位置開(kāi)始寫(xiě)入日志文本,更新索引信息,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū)。
27、優(yōu)選地,還包括讀取單元;所述讀取單元本文檔來(lái)自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū)具體為:所述索引區(qū)的多個(gè)扇區(qū)均包括多個(gè)用于儲(chǔ)存索引信息的位置,更新后的索引信息寫(xiě)入到儲(chǔ)存原索引信息位置的下一位置,并清除原本的索引信息。
3.根據(jù)權(quán)利要求2所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,當(dāng)索引信息滾動(dòng)寫(xiě)入完一個(gè)扇區(qū)的位置后,擦除下一扇區(qū),寫(xiě)入更新后的索引信息并清除原本的索引信息;當(dāng)索引信息寫(xiě)入到索引區(qū)的最后一個(gè)扇區(qū)后,則下次返回第一個(gè)扇區(qū)重新循環(huán)進(jìn)行寫(xiě)入。
4.根據(jù)權(quán)利要求1所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,所述索引信息包括日志文本的起始位置所在的扇區(qū)號(hào)、結(jié)束位置所在的扇區(qū)號(hào)、FLAG、CRC校驗(yàn);所述FLAG的值設(shè)置為不全為0x00或0xFF。
5.根據(jù)權(quán)利要求4所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,所述起始位置的計(jì)算方式為起始位置所在的扇區(qū)號(hào)*扇
6.根據(jù)權(quán)利要求1所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,若為首次使用或重啟時(shí),則需要進(jìn)行初始化,具體為:遍歷索引區(qū)的索引信息;若索引信息通過(guò)CRC校驗(yàn),則記錄該索引信息,用于下一次寫(xiě)入日志文本;若沒(méi)有索引信息通過(guò)CRC校驗(yàn),則擦除索引區(qū)及日志文本區(qū),并在索引區(qū)的第一個(gè)扇區(qū)寫(xiě)入初始化索引信息。
7.根據(jù)權(quán)利要求1所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,所述索引區(qū)的扇區(qū)數(shù)量*扇區(qū)大小/16大于等于日志文本區(qū)的扇區(qū)數(shù)量*2。
8.根據(jù)權(quán)利要求1所述的基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,當(dāng)需要讀取日志文本時(shí),具體操作為:若結(jié)束位置位于起始位置后,則讀取開(kāi)始位置到結(jié)束位置之間的內(nèi)容;若結(jié)束位置位于起始位置前,則需要分兩次讀取,先讀取起始位置到日志文本區(qū)結(jié)尾位置的內(nèi)容,再讀取日志文本區(qū)開(kāi)始位置到日志結(jié)束位置的內(nèi)容。
9.一種基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)裝置,其特征在于,包括如下單元:
10.根據(jù)權(quán)利要求9所述的一種基于NOR?Flash的日志文本滾動(dòng)存儲(chǔ)裝置,其特征在于,還包括讀取單元;所述讀取單元用于讀取日志文本。
...【技術(shù)特征摘要】
1.一種基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,把更新后的索引信息滾動(dòng)寫(xiě)入到索引區(qū)具體為:所述索引區(qū)的多個(gè)扇區(qū)均包括多個(gè)用于儲(chǔ)存索引信息的位置,更新后的索引信息寫(xiě)入到儲(chǔ)存原索引信息位置的下一位置,并清除原本的索引信息。
3.根據(jù)權(quán)利要求2所述的基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,當(dāng)索引信息滾動(dòng)寫(xiě)入完一個(gè)扇區(qū)的位置后,擦除下一扇區(qū),寫(xiě)入更新后的索引信息并清除原本的索引信息;當(dāng)索引信息寫(xiě)入到索引區(qū)的最后一個(gè)扇區(qū)后,則下次返回第一個(gè)扇區(qū)重新循環(huán)進(jìn)行寫(xiě)入。
4.根據(jù)權(quán)利要求1所述的基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,所述索引信息包括日志文本的起始位置所在的扇區(qū)號(hào)、結(jié)束位置所在的扇區(qū)號(hào)、flag、crc校驗(yàn);所述flag的值設(shè)置為不全為0x00或0xff。
5.根據(jù)權(quán)利要求4所述的基于nor?flash的日志文本滾動(dòng)存儲(chǔ)方法,其特征在于,所述起始位置的計(jì)算方式為起始位置所在的扇區(qū)號(hào)*扇區(qū)大小;所述結(jié)束位置的計(jì)算方式為結(jié)束位置所在的扇區(qū)號(hào)*扇區(qū)大小+x;<...
【專(zhuān)利技術(shù)屬性】
技術(shù)研發(fā)人員:陳龍遠(yuǎn),陳小軍,黃章良,陶洋,
申請(qǐng)(專(zhuān)利權(quán))人:廣州魯邦通物聯(lián)網(wǎng)科技股份有限公司,
類(lèi)型:發(fā)明
國(guó)別省市:
還沒(méi)有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。