MTK中的nvram的操作实现.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

1

文档仅供参考

NVRAM读写操作详解

在MTK中,NVRAM是作为一个独立的task来运行的。

在nvram_main.c文件中,(代码有删减,注释部分用黄色标出,便于阅读)

voidnvram_task_main(task_entry_struct*task_entry_ptr)

{

kal_get_my_task_index(&my_index);

/*nvramspecialservice*/

nvram_special_service();

while(1)

{

//从

Q

中得到消息

receive_msg_ext_q(task_info_g[task_entry_ptr->task_indx].task_ext_qid,¤t_ilm);

stack_set_active_module_id(my_index,current_ilm.dest_mod_id);

//处理消息

nvram_main(¤t_ilm);

//释放消息

free_ilm(¤t_ilm);

}

}

Nvram_main

函数,处理NVRAM

相关的消息

voidnvram_main(ilm_struct*ilm_ptr)

{

if(ilm_ptr!=NULL)

{

2

消息消息

消息

消息

if((ilm_ptr->msg_id>=MSG_ID_NVRAM_CODE_BEGIN)&&(ilm_ptr->msg_id<=

MSG_ID_NVRAM_CODE_END))

{

if(ilm_ptr->msg_id==MSG_ID_NVRAM_STARTUP_REQ)

{

/

//STARTUP

nvram_startup_handler(ilm_ptr);

}

elseif(ilm_ptr->msg_id==MSG_ID_NVRAM_RESET_REQ){

/

//RESET

nvram_reset_handler(ilm_ptr);

}

elseif(ilm_ptr->msg_id==MSG_ID_NVRAM_READ_REQ)

{

nvram_read_handler(ilm_ptr);//READ消息

}

elseif(ilm_ptr->msg_id==MSG_ID_NVRAM_WRITE_REQ){

nvram_write_handler(ilm_ptr);//WRITE消息

}

elseif(ilm_ptr->msg_id==MSG_ID_NVRAM_SET_LOCK_REQ){

nvram_set_lock_handler(ilm_ptr);//LOCK消息,比较多用在TST中

}

}

}/*endofmodulemainfunction*/

也可以看到NVRAMtask处理几个消息.

3

文档仅供参考

READ流程

NV

NV

中读取一个数据,例如读取语言设置信息:

ReadValue(NVRAM_SETTING_LANG,&data,DS_BYTE,&error);

我们需要注明,NVRAM

LID,读取数据存放的指针,数据类型,和返回错误信息的地址.

#defineReadValue(nId,pBuffer,nDataType,pError)\

ReadValueInt(nId,pBuffer,nDataType,pError,__FILE__,__LINE__)

ReadValue精简了两个参数,不需要注明文件和第多少行,方面了应用使用.看一下

ReadValue

ReadValueInt这个函数

ReadValueInt

我们来看看这个函数到底干了什么事情:

S32ReadValueInt(U8nDataItemId,void*pBuffer,U8nDataType,S16*pError,S8*fileName,

S32lineNumber)

{

switch(nDataType)

{

caseDS_BYTE:

{

//byteDataReadFlag先记住这个标志,它标志了byte的数据是否已经被读取,

所以从这里我们可以猜测,NVRAM

(记住这个假设,稍后验证)

的数据,应该不是每次都从硬件读取的,而是有缓存的

/*secondtimereading,italwasyreturnonerequestitem*/

if(byteDataReadFlag)

{

//这个注释就更加明白了

/*Dataiscachednoneedtoreadf

您可能关注的文档

文档评论(0)

聚好信息咨询 + 关注
官方认证
服务提供商

本公司能够提供如下服务:办公文档整理、试卷、文档转换。

认证主体鹤壁市淇滨区聚好信息咨询服务部
IP属地河南
统一社会信用代码/组织机构代码
92410611MA40H8BL0Q

1亿VIP精品文档

相关文档