当前位置: 首页 > news >正文

做一元购物网站互联网行业前景

做一元购物网站,互联网行业前景,西班牙网站后缀,wordpress网站缓存安装一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持#xff0c;但Z20K1xx芯片不含EEPROM。然而#xff0c;闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行#…一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持但Z20K1xx芯片不含EEPROM。然而闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行同时在另一个数组上执行代码。      二、存储原理 EEPROM仿真包含两个或多个扇区每个扇区都包含一组闪存扇区。只有一个扇区被选为活动块。存储在活动扇区中的记录列表用于访问数据。每条记录都有一个ID用来区别于其他记录。记录是一组变量。数据记录的长度是可变的。 记录按顺序编入活动扇区。为了更新记录软件将新版本的记录写入活动扇区中下一个可用的位置。当读取记录时软件检索具有匹配ID的最近写入的记录。当活动扇区没有足够的空间容纳新记录时软件将活动扇区内的所有有效记录复制到其他EE扇区之一。这个新扇区成为活动扇区之前的活动扇区失效。由于旧记录在交换期间被清除新的活动扇区应该有空间用于记录更新。交换后新记录将被写入新的活动扇区。 后续会详细描述这一交换原理。 三、内存组成 下图为扇区的内存组成列表图包含扇区记录数据存储区。 1.扇区 每个扇区包含一个扇区报头它包括以下部分 sectorlD:扇区标识。每当有一个新的扇区这个数字就增加1变得活跃。它从1开始。sectorlD最大的部门是活跃的部门。sectorstart address:扇区起始地址扇区大小:扇区的大小以字节为单位。 checksum:扇区id、扇区起始地址和扇区大小字段之和。 sector valid flag:扇区的有效标志如果等于一个特殊的值则表示该扇区有效 sector invalid flag:扇区的无效标志如果等于特殊值则表示该扇区为失效。 2.记录 每条记录包含一个记录头它包括以下部分: recordlD:记录的标识。data address:记录的数据地址record size:记录大小(以字节为单位)。check sum:recordID、数据地址和记录大小字段之和。record valid flag:记录的有效标志如果它等于一个特殊值则该记录是有效的。 record invalid flag:记录的无效标志如果它等于一个特殊值则该记录无效。 四、扇区交换 前面提到过存储的原理实际就是活动扇区的交换实际上扇区的交换就是在活动扇区满足以下这三点时 ①当活动扇区没有足够的空间来写入新记录时 ②当在EE初始化期间检测到无效记录头时(可选)。 ③当最后一个记录头无效时。 把所有的有效记录从一个活动扇区复制到另一个扇区下图举例了三个扇区的交换  初始时Sector0是活动扇区 第一次交换后Sector0变为“invalid”Sector1变为活动扇区。 第二次交换后Sector1变为“invalid”Sector2变为活动扇区。 再了解了存储结构和交换原理后我们就可以理解代码并写一段demo例子了。  五、代码编程 1.结构体初始化 static uint32_t cacheTable[EE_CACHE_RECORD_NUM]; static EE_cache_t cacheConf {cacheTable, /* cache 起始地址 */EE_CACHE_RECORD_NUM /* cache 缓存大小 */ };/* 扇区0配置 */ static const EE_SectorConfig_t sectorConf0 {EE_SECTOR_0_ADDR, /* 起始地址 */EE_SECTOR_SIZE, /* 大小 */ };/* 扇区1配置 */ static const EE_SectorConfig_t sectorConf1 {EE_SECTOR_1_ADDR, /* 起始地址 */EE_SECTOR_SIZE, /* 大小 */ };/* 扇区2配置 */ static const EE_SectorConfig_t sectorConf2 {EE_SECTOR_2_ADDR, /* 起始地址 */EE_SECTOR_SIZE, /* 大小 */ };/* 扇区配置数组 */ static const EE_SectorConfig_t* sectorConfig[EE_SECTOR_NUM] {sectorConf0,sectorConf1, sectorConf2, };/* EEPROM配置 */ EE_Config_t eeConf {.sectorNum EE_SECTOR_NUM, /* 扇区数量 */.sectors sectorConfig, /* 扇区配置 */.cacheEn ENABLE, /* cache 使能 */.cTable cacheConf, /* cache 结构体 */.busyFlag RESET,.maxRecordId EE_MAX_RECORD_ID, /* 最大记录ID */ }; 2.系统初始化 static void system_init(void) { WDOG_Config_t wdogCfg {.winEnable DISABLE,.wait DISABLE,.stop DISABLE,.debug DISABLE,.windowValue 0,.timeoutValue 9600,.clkSource WDOG_LPO_CLOCK,.testMode WDOG_TST_NORMAL, };CLK_SetClkDivider(CLK_CORE, CLK_DIV_1);CLK_SetClkDivider(CLK_BUS, CLK_DIV_1);CLK_SetClkDivider(CLK_SLOW, CLK_DIV_8);if(ERR WDOG_Init(wdogCfg)){ErrorTrap();}if(ERR WDOG_Enable()){ErrorTrap();} } 3.初始化EEPROM EEPROM仿真初始化最多尝试三次错误处理判断 while ((i 3U) (ret ! EE_OK)) {ret EE_Init(eeConf, ENABLE, CallBack);i; } if(ret ! EE_OK) {ErrorTrap(); } 4.写入数据到EEPROM 写入数据到EEPROM每个记录的ID从0到最大记录IDEE_MAX_RECORD_ID数据大小从1字节到缓冲区大小BUFFER_SIZE验证写入的数据确保读取的数据与写入的数据一致。  for(id 0U; id eeConf.maxRecordId; id){size id 1U;if(size BUFFER_SIZE){size BUFFER_SIZE;}/* Init buffer*/for (i 0; i size; i){buffer[i] (uint8_t)(i id);}ret EE_WriteRecord(eeConf,id, size, buffer,0, CallBack);if(ret ! EE_OK){/* if writing fails, re-initialize and try again */ret EE_Init(eeConf, ENABLE, CallBack);if(ret ! EE_OK){ErrorTrap();}else{ret EE_WriteRecord(eeConf,id, size, buffer, 0, CallBack);if(ret ! EE_OK){/* still error after reinitialization */ErrorTrap();}} }for (i 0; i BUFFER_SIZE; i){buffer[i] 0U;}ret EE_ReadRecord(eeConf,id,size,buffer,readOutSize,CallBack);if(ret ! EE_OK){ErrorTrap();}else{if(size ! readOutSize){ErrorTrap();}for(i 0; i readOutSize; i){if(buffer[i] ! i id){ErrorTrap();}}}} 5.验证写入的数据 验证写入的数据确保读取的数据与写入的数据一致。 ret EE_DeleteRecord(eeConf,EE_TEST_RECORD_ID,CallBack);if(ret ! EE_OK){ErrorTrap();}for(i 0; i BUFFER_SIZE; i){buffer[i] 0;}size BUFFER_SIZE;ret EE_ReadRecord(eeConf,EE_TEST_RECORD_ID,size,buffer,readOutSize, 6.验证删除操作 if(ret ! EE_ERROR_DATA_NOT_FOUND){ErrorTrap();}while(true){CallBack();} 7.回调函数与错误处理函数 void CallBack(void); static void ErrorTrap(void);void CallBack(void) {WDOG_Refresh(); }static void ErrorTrap(void) {while(true){CallBack();} }
http://www.hkea.cn/news/14479466/

相关文章:

  • 收录快网站公司网站做的比较好
  • 胶州企业网站建设玉环市建设规划局网站
  • 国外ps素材网站WordPress文章不让搜索
  • 模板网站哪家好做医疗护具网站
  • 长沙市规划建设局网站辽宁省兴城做网站的
  • 广州市网站建设企业网络营销4c策略是什么
  • 如何自己编写网站黑龙江省建设厅的网站首页
  • 网站建设 答辩记录多媒体应用设计师好考吗
  • js网站页面效果网站建设和编程的区别
  • 国内ui网站有哪些深圳公司免费网站建设怎么样
  • iis html网站怎么查看一个网站是谁做的
  • 网站模板带有sql后台下载泡沫制品技术支持东莞网站建设
  • 怎么看网站开发的技术做ctf的网站有哪些
  • 重庆网络建站wordpress设置文章期限
  • 网站运营设计发帖子最好的几个网站
  • 网站变成手机网站百度云搜索引擎入口官方
  • 金科科技 做网站母婴会所 网站源码
  • 深圳网站制作公司讯息无锡市规划建设局网站
  • 网站收缩引擎入口益阳做网站公司
  • 受欢迎的网站建设教程wordpress step2 500
  • 电子商务网站建设理解东方市住房和城乡建设局网站
  • 织梦模板网站源码网站做支付宝支付需要哪些资料
  • 做商城网站那个好万网域名管理平台
  • 湖州市建设中心网站网站容易被百度收录
  • 资阳市网站seo做家教网站挣钱吗
  • 东莞浩智网站建设哪家好免费asp网站空间
  • 自建网站服务器多媒体在网站开发的分析
  • 网站前台开发教程条件查询 php网站源码
  • 免费查看招标信息的网站相城专业的网站建设
  • 温州网站推广外包男鞋 东莞网站建设