[转帖]什么是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版装没有任何问题,如果我使用一个表达式:
dpVersion = 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);
}
发表时间:2014年8月20日10:32:48