预留128k文件空间c语言,【求助】请教ATMEGA128高64k空间如何正确读取使用

#if BL_USE_PAGE_VERIFY == ENABLE

/***********************************************************

*   函数说明:  页面校验函数                               *

*   输入:      源页面缓冲区,目标地址                     *

*   输出:      校验是否成功                               *

*   调用函数:  无                                         *

***********************************************************/

BOOL Bootloader_Flash_Page_Verify

(

BYTE *pchDataBuffer,

#if BL_USE_EXTEND_ADDRESS_SPACE == ENABLE

UINT32 dwAddress

#else

UINT16 wAddress

#endif

)

{

UINT16 wCounter = FLASH_PAGE_SIZE;

UINT8 chDataA;

UINT8 chDataB;

#if BL_USE_EXTEND_ADDRESS_SPACE == ENABLE

UINT8 TRAMPZ = RAMPZ;

#endif

if (pchDataBuffer == NULL)

{

//! have nothing to do with...

return FALSE;

}

#if BL_USE_EXTEND_ADDRESS_SPACE == ENABLE

RAMPZ = dwAddress >> 16;

#endif

//! load the address to z register

asm("movw r30,r18");

//! load the buffer address to x register

asm("movw r26,r16");

#if BL_USE_EXTEND_ADDRESS_SPACE == ENABLE

if (RAMPZ)

{

while(wCounter--)

{

//! load a byte from flash (addressed by z register)

asm("elpm r0,z+");

//! employ a temporary variable chDataA

asm("mov %chDataA,r0");

//! load a byte from sram (addressed by x register)

asm("ld r0,x+");

//! employ a temporary variable chDataB

asm("mov %chDataB,r0");

//! checking...

if (chDataA != chDataB)

{

RAMPZ = TRAMPZ;

return FALSE;

}

WDR();

}

}

else

{

while(wCounter--)

{

//! load a byte from flash (addressed by z register)

asm("lpm r0,z+");

//! employ a temporary variable chDataA

asm("mov %chDataA,r0");

//! load a byte from sram (addressed by x register)

asm("ld r0,x+");

//! employ a temporary variable chDataB

asm("mov %chDataB,r0");

//! checking...

if (chDataA != chDataB)

{

RAMPZ = TRAMPZ;

return FALSE;

}

WDR();

}

}

RAMPZ = TRAMPZ;

#else

while(wCounter--)

{

//! load a byte from flash (addressed by z register)

asm("lpm r0,z+");

//! employ a temporary variable chDataA

asm("mov %chDataA,r0");

//! load a byte from sram (addressed by x register)

asm("ld r0,x+");

//! employ a temporary variable chDataB

asm("mov %chDataB,r0");

//! checking...

if (chDataA != chDataB)

{

return FALSE;

}

}

#endif

return TRUE;

}

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值