串口在线升级ISP例程,验证地址函数求解答 | 已理解
各位大神,求解答一下,历程中 iap.c中的一个验证地址的函数BOOL iap_check_addr(DWORD addr)
{
addr &= 0x1ffff;
return ((addr < 0x10000) ||
(addr >= (0x10000 + LDR_SIZE)));
}
返回0值表示地址合法。
下面向flash写数据的时候使用了这个函数
BOOL iap_write_byte(DWORD addr, BYTE dat)
{
if (!iap_check_addr(addr))
return 0;
IAP_CMD = 2;
IAP_ADDRE = BYTE2(addr) & 0x01;
IAP_ADDRH = BYTE1(addr);
IAP_ADDRL = BYTE0(addr);
IAP_DATA = dat;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
_nop_();
_nop_();
_nop_();
return (iap_read_byte(addr) == dat);
}地址符合,按照例程,会直接退出吧,不明白。
求各位大神,解答。
国芯人工智能 发表于 2025-7-10 16:08
各位开发者,您好。关于您提到的 iapcheckaddr 函数及其实现逻辑,以下是对该函数的详细解析与说明:
一、 ...
if (!iapcheckaddr(addr)) return 0;
这个if语句在iapcheckaddr(addr)=0的时候,不是要执行return 0这个语句吗?
从我们哪下载的例程,请给出链接,我们安排研发去看下,再解答 zhe! 发表于 2025-7-10 17:00
if (!iapcheckaddr(addr)) return 0;
这个if语句在iapcheckaddr(addr)=0的时候,不是要执行return 0这个 ...
上传下完整工程,上下文也描述完整些,比如给addr代入什么值?
只看当iapcheckaddr(addr)为0时iap_write_byte确实直接return0没毛病 神农鼎 发表于 2025-7-10 18:58
从我们哪下载的例程,请给出链接,我们安排研发去看下,再解答
链接是这个 https://stcai.com/zxsj
ercircle 发表于 2025-7-10 20:48
上传下完整工程,上下文也描述完整些,比如给addr代入什么值?
只看当iapcheckaddr(addr)为0时iap_write_ ...
下载的压缩包
zhe! 发表于 2025-7-11 08:53
下载的压缩包
“返回0值表示地址合法。”
这里理解错了,返回true(1)才表示合法的!
BOOL iap_check_addr(DWORD addr)
这个函数返回1值表示地址合法。
ercircle 发表于 2025-7-11 08:58
“返回0值表示地址合法。”
这里理解错了,返回true(1)才表示合法的!
明白了。(addr < 0x10000) || (addr >= (0x10000 + LDR_SIZE))是判断地址在非ISP代码区。
感谢。 乘风飞扬 发表于 2025-7-11 09:14
BOOL iap_check_addr(DWORD addr)
这个函数返回1值表示地址合法。
感谢,现在再看就明白了。
页:
[1]
2