一種基於EEPROM儲存結構的微型資料庫

2021-10-22 04:53:02 字數 3581 閱讀 4192

dbs(database)是一種基於eeprom儲存結構的微型資料庫,此資料庫的設計目的是解決資料儲存過程中發生異常而導致系統發生嚴重錯誤。使用乙個結構體陣列資料結構實現資料儲存、資料管理、資料應用。

1. 構建資料庫

2. 初始化兩段位址,將資料迴圈逐個寫入資料庫

3. a段資料自校驗,b段資料校驗

當a/b兩段資料校驗都成功,則返回成功標誌

當a/b兩段資料校驗都失敗,則返回失敗標誌

當a段資料校驗成功,b段資料校驗失敗,則使用a段資料覆蓋b段資料

當b段資料校驗成功,a段資料校驗失敗,則使用b段資料覆蓋a段資料

typedef struct

dbs_table_item

;

volatile dbs_table_item dbs_par_format=

,,,,

,,}

volatile dbs_table_item dbs_par_format=

} dbs_par_memory[dbs_par_format[dbs_par_pk_isinit]

.offset]

=0x5a

; data =

crc_cal

((uint8_t *

)(dbs_par_memory +2)

, dbs_par_memsize -2)

; dbs_par_memory[0]

=(uint8_t)

(data &

0xff);

dbs_par_memory[1]

=(uint8_t)

((data >>8)

&0xff);

for(counter =

0; counter < dbs_par_memsize; counter++)}

for(counter =

0; counter < dbs_par_memsize; counter++

) data =

crc_cal

((uint8_t *

)(dbs_par_memory +2)

, dbs_par_memsize -2)

;if((

(uint8_t)

(data &

0xff

)== dbs_par_memory[0]

)&&((uint8_t)

((data >>8)

&0xff

)== dbs_par_memory[1]

))else

for(counter =

0; counter < dbs_par_memsize; counter++

) data =

crc_cal

((uint8_t *

)(dbs_par_memory +2)

, dbs_par_memsize -2)

;if((

(uint8_t)

(data &

0xff

)== dbs_par_memory[0]

)&&((uint8_t)

((data >>8)

&0xff

)== dbs_par_memory[1]

))elseif(

(temp0 ==1)

&&(temp1 ==1)

)elseif(

(temp0 !=1)

&&(temp1 !=1)

)elseif(

(temp0 ==1)

&&(temp1 !=1)

)for

(counter =

0; counter < dbs_par_memsize; counter++

)return1;

}elseif(

(temp0 !=1)

&&(temp1 ==1)

)for

(counter =

0; counter < dbs_par_memsize; counter++

)return1;

}}

uint32_t dbs_setparvalue

(uint32_t pk, uint8_t *data, uint32_t length)

if(dbs_par_format[pk]

.lock ==1)

if(dbs_par_format[pk]

.permission ==

0x20)if

(dbs_par_format[pk]

.length < length)

/* 寫入資料 */

if(length ==0)

}else

if(dbs_par_format[pk]

.length > length)

} temp =

crc_cal

((uint8_t *

)(dbs_par_memory +2)

, dbs_par_memsize -2)

; dbs_par_memory[0]

=(uint8_t)

(temp &

0xff);

dbs_par_memory[1]

=(uint8_t)

((temp >>8)

&0xff);

epm_wrtiedata

(dbs_par_amemstart +0,

(uint8_t)

(temp &

0xff))

;epm_wrtiedata

(dbs_par_amemstart +1,

(uint8_t)

((temp >>8)

&0xff))

;epm_wrtiedata

(dbs_par_bmemstart +0,

(uint8_t)

(temp &

0xff))

;epm_wrtiedata

(dbs_par_bmemstart +1,

(uint8_t)

((temp >>8)

&0xff))

;return1;

}

uint32_t dbs_getparvalue

(uint32_t pk,

int8u

*data, uint32_t *length)

if(dbs_par_format[pk]

.lock ==1)

if(dbs_par_format[pk]

.permission ==

0x30

)*length = dbs_par_format[pk]

.length;

for(counter =

0; counter < dbs_par_format[pk]

.length; counter++

)return1;

}

一種Handle結構

最近看到了這樣一篇部落格,感覺寫的很好。尤其是它其中敘述的這種基於事件的模型。我也是照貓畫虎的寫了個示例程式,不知道對不對我斗膽描述一下這個結構 1.定義乙個介面,定義需要提供的服務。2.定義乙個抽象類 或者普通的類 實現上述介面,實現介面的所有服務,實現內容都為空的。3.接下來,使用者可以根據自己...

一種基於星型結構的系統架構設計

隨著企業發展,傳統的中心化,大平台的軟體系統設計越來越難以滿足現實要求。對於位於決策中心的集團總公司來說,制定管理規則,收集核心資料當然是it系統的主要功能。對於一線業務部門來說,他們也需要在總公司所制定規則基礎上相應的進行擴充套件以滿足其自身實際的需要。另外,無論是集團總公司還是一線業務部門,隨著...

一種基於有序序列mapjoin的方法

在解決資料傾斜問題時,我們經常會採用一種方式 mapjoin,按照hive的實現,mapjoin是將其中一張表在map的過程中載入到記憶體中,但是如果在join的表中,最小的表的資料量也不小的情況下。我們該怎麼辦呢?其中一種解決的方式是 將兩張表需要實現排序 直接用hadoop解決 如下,兩張表都是...