导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[转帖]什么是readFlashDataPage(x)函数的[liufengzhong]

 *第36337篇: [转帖]什么是readFlashDataPage(x)函数的正确的值?它是页码或地址吗?

  
楼 主:liufengzhong 2014年8月20日10:32
 [转帖]什么是readFlashDataPage(x)函数的正确的值?它是页码或地址吗?
嗨, 
我要让我的引导加载程序读取地址0x40000闪存数据

并且,由于其值负载对应的版本。所以,我有自定义的加载器的下面的代码:

extern void* readFlashDataPage(unsigned int addr);


unsigned int dpVersion;
unsigned int imgAddr;

void init(void)
{
    unsigned int* page = (unsigned int*)readFlashDataPage(0x40000); 
    
    dpVersion = (page[0] == 0x00000002) ? 1 : 2;     
}
 
int checkCandidateImageVersion( int version )
{
    return dpVersion == version;
}
 
void recordCandidateImage( int version, unsigned int address )
{
    imgAddr = address;
}
 
unsigned int reportSelectedImage(void)
{
  return imgAddr;
}

但似乎并不奏效,版本1总是装载。
我想,我把不正确的地址为readFlashDataPage()函数,
但我试图用0x40000和1024(block number),都是一样的。
有任何想法?

PS>  我把00000002值偏移0x40000到flash,我也试图恢复
位在比较条件:
         dpVersion = (page[0] == 0x40000000) ? 1 : 2;  
第1版装没有任何问题,如果我使用一个表达式:
         dpVe​​rsion = 1; 

回答:

我的从源代码的理解是页号(见下文)。注意在添加dataPartitionBase的!

int fl_readDataPage(unsigned n, unsigned char dst[])
{
    unsigned address;
    if( n >  = fl_getNumDataPages() ) { return( 1 ); }
      address = fl_getDataPartitionBase() + n * fl_getPageSize();
    return fl_readPage(address, dst);
}



>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:[转帖]在源代码内有没有一种方法来确定工具版本?

[下一篇主题]:[转帖]什么时候我们在XC使用汇编指令?