放進去演算法
測試成功
進一步的比較即將開始!在v5.0完成吧!
#include "hwhaxi.h"
#include "chipflash.h"
#define gramdataflag_cnt_add 0x0807e000//僅僅利用前面的u32標識雜湊表大小
#define gramdataflag_flash_add 0x0807e800//全部儲存資料的雜湊值
#define gramdata_flash_add 0x0807f000//全部儲存資料
static grampage_t dt, dtfg;
static chipflash_t *c = &chipflash;
//static
uint8_t commonbuf[2048];
static uint8_t *phaxibuf = commonbuf;//公共資源 還需要加鎖 目前沒有 是分時復用
void g_print(char *name,gramdataflag_t* a,uint16_t len)
//擦掉一頁 必須是明確的起始位址
void gram_clear(uint32_t readaddr)
void gram_write( uint32_t addr,uint8_t* pbuffer, uint16_t numbyte)
void show_grampagedataflag_t(grampage_t *p)
void show_grampagedata_t(grampage_t *p)
void gram_data_init(void)
//完成'4'-->4 『a』-->10
unsigned char mystrtobyte(unsigned char ddata)
//"1234"--->0x12,0x34
char mystrstobytes(void* strings,char len,void* bytes)
return j;
}//清除
void gram_clear(void)
//寫入魔術
void gram_write_totocnt(uint32_t localcnt)
uint32_t gram_read_totocnt(void)
//寫入資料
//先把2048全部讀出來-在格式化flash-在修改2048中部分資料再次寫入
//id標識中的第幾個結構體
void gram_write_data(uint32_t id,gramdata_t *gdatat)
void gram_write_dataflag(uint32_t id,gramdataflag_t *gdataflagt)
void gram_pagewrite(void)
/*折半查詢
準備乙個陣列 排好序的*/
直接找陣列:
int iterbisearch_u16(uint16_t data, const uint16_t x, int beg, int last)
else if (x < data[mid])
else if (x > data[mid])
return -1;
} 陣列擴大為結構體:
int iterbisearch_t(gramdataflag_t *data, const uint32_t x, int beg, int last)
else if (x < adata)
else if (x > adata)
return -1;
}//排序
void myswap( gramdataflag_t *x, gramdataflag_t *y )
void myquicksort(gramdataflag_t *a,int left,int right)
int iterbisearch_ti(const uint32_t x, int beg, int last)
else if (x < adata)
else if (x > adata)
return -1;
}//查詢
int isoneofgups( const uint16_t x,uint16_t n)
//查詢
//傳入引數 乙個陣列 目前len是寫死的11 而內部flash的位址沒有傳參 也是寫死的
char isoneof(uint8_t *indata,uint8_t len)
//開始挨個比較
gramdataflag_t every_flag;
gramdataflag_t machbank[5];
uint8_t machcnt=0;
for( i=0;i大把雜湊頁整理好
gram_dataflag_sort();
//演算法查詢
gupflag = haxi.haxifun(gupbyte,11);
printf("[gupflag=%04x]\r\n",gupflag);
int id= isoneofgups(gupflag,gram_read_totocnt());
if(id>0)
printf("ok--%d[此時雜湊值已經命中 可以進一步比較]\r\n",id);
else
printf("fail\r\n");
}
#ifndef hwhaxi_h
#define hwhaxi_h
#include "gunit.h"
//操作的資料結構
typedef struct
gramdata_t;
typedef struct
gramdataflag_t;
/*//其實全部都是巨集定義
typedef struct
grampagedata_t;
typedef struct
grampagedataflag_t;
*/typedef struct
node;
uint8_t nodesize;
uint32_t nodecnt;
uint32_t pageadd;
uint16_t pagesize;
}grampage_t;
//可以優化的雜湊函式
typedef uint16_t (*haxi_func)(uint8_t *data, uint16_t leng) ;
typedef struct
haximap_t;
extern haximap_t haxi;
extern void haximap_test(void);
#endif
硬雜湊表的輪子V5 0 完成全部邏輯
include hwhaxi.h include chipflash.h define gramdataflag cnt add 0x0807e000 僅僅利用前面的u32標識雜湊表大小 define gramdataflag flash add 0x0807e800 全部儲存資料的雜湊值 defi...
潤幹V5中設計的報表如何在V4中展現
潤幹v5與潤幹v4設計器功能大致相同,都能夠通過簡單的操作展現需要展現的資料,然而由於潤幹v4基於c s架構,而潤幹v5是基於b s架構的,要讓兩個版本所設計的潤幹報表能夠相容,相互相容使用,就需要我們對v4做一些必要的處理。首先需要做的準備工作是乙個潤幹v5最新的應用包,在應用包的資料管理選單子項...
AJAX校驗在潤幹V4填報表中的使用
ajax的好處就是非同步進行互動,讓我們感覺頁面並沒有其他的動作 重新整理 讓我們感覺頁面做的更友好了,互動性更能跟上現在的web應用。利用ajax進行校驗能夠在不重新整理頁面的情況下完成和伺服器端的互動,並根據資料的處理結果按你想要的方式對頁面作出即時更改。潤幹的填報表校驗功能,可以在使用者填報資...