MTK优美代码赏析3

MTK优美代码赏析3:nvram存储和读取部分的分析liumian215 发表于 2010-9-11 19:50:00

MTK提供的NVRAM存取方式有两种,一种读取单条数据,一种是读取结构数据.

读取单条数据的比较常见,在mtk代码中随处可以找到例子,主要的接口函数是ReadValue和WriteValue,

函数中nDataType参数对应的是

1 typedef enum /* Pixtel Defined enum */

2 { 3 DS_BYTE = 1, 4 DS_SHORT = 2, 5 DS_DOUBLE = 8 6 } DATASIZE; /* Enum for caching purposes */ 一般我的应用中,DS_BYTE 类型我们对应U8来使用,DS_SHORT对应U16,DS_DOUBLE 对应U64,(double的操作可以参考THEME_MANAGER_MAX_THEME_ID) 可根据数据的需求来用不同的类型,参数nDataItemId定义在custom_mmi_default_value.h中,对应不同类型分别放于BYTEDATA,SHORTDATA,DOUBLEDATA中. 实际工作中我们最常用这种方法存储程序的开关,一般我们会使用DS_BYTE 类型来存储,实则用U8来存储一个0/1的数据太浪费了,所以我们一般要充分利用U8中的每个位,程序上在读出数据后进行位操作即可得到自己想要得数据,存储前的时候也要进行相应位操作后才能进行存储.比如我前面设计的呼吸灯的功能,对于不同情况下的呼吸需要存储开关,速度和效果,我根据数据特征将U8分成三个部分来分别存储,即AABBCCCC,AA开关,BB速度,CCCC效果,将开关设置两位是为了避免nvram存储值为0,不便于对nvram初始值进行判断. 1 //开关 2 typedef enum 3 { 4 SWITCH_NULL,//增加该项使nvram存储值不为0 5 SWITCH_ON, 6 SWITCH_OFF, 7 8 //add item befor this 9 RF_UTPLUS_SWITCH_END 10 }utplus_rf_breath_switch; 11 //从nvram中获取初始化值 12 void utplus_rf_breath_init_nvram_value(void) 13 { 14 U8 data = 0; 15 U8 i; 16 S16 error; 17 for(i=0;imsg_id >= MSG_ID_NVRAM_CODE_BEGIN) && (ilm_ptr->msg_id <= MSG_ID_NVRAM_CODE_END)) 25 { 26 27 if (ilm_ptr->msg_id == MSG_ID_NVRAM_STARTUP_REQ) 28 { 29 nvram_startup_handler(ilm_ptr); 30 } 31 else if (ilm_ptr->msg_id == MSG_ID_NVRAM_RESET_REQ) 32 { 33 nvram_reset_handler(ilm_ptr); 34 } 35 else if (ilm_ptr->msg_id == MSG_ID_NVRAM_READ_REQ) 36 { 37 nvram_read_handler(ilm_ptr); 38 } 39 else if (ilm_ptr->msg_id == MSG_ID_NVRAM_WRITE_REQ) 40 { 41 nvram_write_handler(ilm_ptr); 42 } 43 else if (ilm_ptr->msg_id == MSG_ID_NVRAM_WRITE_IMEI_REQ) 44 { 45 nvram_write_imei_handler(ilm_ptr); 46 } 47 else if (ilm_ptr->msg_id == MSG_ID_NVRAM_SET_LOCK_REQ) 48 { 49 nvram_set_lock_handler(ilm_ptr); 50 } 51 } 52 #ifdef TST_HANDLER 53 else 54 { 55 /* not nvram defined message */ 56 if (ilm_ptr->msg_id == MSG_ID_TST_INJECT_STRING) 57 { 58 nvram_tst_handler(ilm_ptr); 59 } 60 } 61 #endif /* TST_HANDLER */ 62 63 } 64 } /* end of module main function */ 主要处理的是 : startup,reset,read,write,write_imei,set_lock 在这里对imei的单独处理可能跟他的NVRAM_ATTR_WRITEPROTECT属性有关吧. 作者:张素丰,转载请注明出处:http://www.cnblogs.com/zhangsufeng/archive/2010/09/11/1824100.html 因为dotNet出身的我从读书时就喜欢写点技术类的文章,多贴在博客园,习惯了在那里写,然后贴在52rd里面,不好意思。 这只是表面的分析,深入的研究需要更多的能力,我现在还比较欠缺,渴望和大家多交流,我QQ号是275000205。 20100912 0:22补充: 今日研究了下电话本的nvram存储,不惑,得一高人点拨,发现在记录里还有一个重要的特性: LID_BIT VER_LID(NVRAM_EF_WPSS_FILENAME_LID) nvram_wpss_filename_struct *NVRAM_EF_WPSS_FILENAME_TOTAL { }; 用来将LID和结构体关联,而且我们找LID所用的结构可以快速的通过这个找到。 本文来自:我爱研发网(52RD.com) - R&D大本营详细出处:http://www.52rd.com/Blog/Detail_RD.Blog_liumian215_24899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值