找回密码
 立即注册
查看: 247|回复: 10

串口在线升级ISP例程,验证地址函数求解答 | 已理解

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-10 16:03:44 | 显示全部楼层 |阅读模式
各位大神,求解答一下,历程中 iap.c中的一个验证地址的函数

  1. BOOL iap_check_addr(DWORD addr)
  2. {
  3.     addr &= 0x1ffff;
  4.    
  5.     return ((addr < 0x10000) ||
  6.             (addr >= (0x10000 + LDR_SIZE)));
  7. }
复制代码
返回0值表示地址合法。

下面向flash写数据的时候使用了这个函数
  1. BOOL iap_write_byte(DWORD addr, BYTE dat)
  2. {
  3.     if (!iap_check_addr(addr))
  4.         return 0;
  5.     IAP_CMD = 2;
  6.     IAP_ADDRE = BYTE2(addr) & 0x01;
  7.     IAP_ADDRH = BYTE1(addr);
  8.     IAP_ADDRL = BYTE0(addr);
  9.     IAP_DATA = dat;
  10.     IAP_TRIG = 0x5a;
  11.     IAP_TRIG = 0xa5;
  12.     _nop_();
  13.     _nop_();
  14.     _nop_();
  15.     _nop_();
  16.     return (iap_read_byte(addr) == dat);
  17. }
复制代码
地址符合,按照例程,会直接退出吧,不明白。
求各位大神,解答。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-10 17:00:24 | 显示全部楼层
国芯人*** 发表于 2025-7-10 16:08
各位开发者,您好。关于您提到的 iapcheckaddr 函数及其实现逻辑,以下是对该函数的详细解析与说明:

一、 ...

if (!iapcheckaddr(addr)) return 0;
这个if语句在iapcheckaddr(addr)=0的时候,不是要执行return 0这个语句吗?

点评

上传下完整工程,上下文也描述完整些,比如给addr代入什么值? 只看当iapcheckaddr(addr)为0时iap_write_byte确实直接return0没毛病  详情 回复 发表于 2025-7-10 20:48
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2025-7-10 18:58:39 | 显示全部楼层
从我们哪下载的例程,请给出链接,我们安排研发去看下,再解答
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 2025-7-10 20:48:05 | 显示全部楼层
zh*** 发表于 2025-7-10 17:00
if (!iapcheckaddr(addr)) return 0;
这个if语句在iapcheckaddr(addr)=0的时候,不是要执行return 0这个 ...

上传下完整工程,上下文也描述完整些,比如给addr代入什么值?
只看当iapcheckaddr(addr)为0时iap_write_byte确实直接return0没毛病
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-11 08:52:06 | 显示全部楼层
神*** 发表于 2025-7-10 18:58
从我们哪下载的例程,请给出链接,我们安排研发去看下,再解答

链接是这个    https://stcai.com/zxsj

程序包下载地址

程序包下载地址

程序文件

程序文件
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-11 08:53:29 | 显示全部楼层
erci*** 发表于 2025-7-10 20:48
上传下完整工程,上下文也描述完整些,比如给addr代入什么值?
只看当iapcheckaddr(addr)为0时iap_write_ ...

下载的压缩包

STC-official-user-UART-ISP-bootloader-demo-STC32G12K128-series.zip

716.47 KB, 下载次数: 4

点评

“返回0值表示地址合法。” 这里理解错了,返回true(1)才表示合法的!  详情 回复 发表于 2025-7-11 08:58
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2983

回帖

6363

积分

荣誉版主

无情的代码机器

积分
6363
发表于 2025-7-11 08:58:25 | 显示全部楼层

“返回0值表示地址合法。”

这里理解错了,返回true(1)才表示合法的!
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 2025-7-11 09:14:45 | 显示全部楼层
BOOL iap_check_addr(DWORD addr)
这个函数返回1值表示地址合法。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-11 09:34:05 | 显示全部楼层
erci*** 发表于 2025-7-11 08:58
“返回0值表示地址合法。”

这里理解错了,返回true(1)才表示合法的!

明白了。(addr < 0x10000) || (addr >= (0x10000 + LDR_SIZE))是判断地址在非ISP代码区。
感谢。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-11 08:53:29
已绑定手机

1

主题

6

回帖

31

积分

新手上路

积分
31
发表于 2025-7-11 09:34:40 | 显示全部楼层
乘风*** 发表于 2025-7-11 09:14
BOOL iap_check_addr(DWORD addr)
这个函数返回1值表示地址合法。

感谢,现在再看就明白了。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 04:13 , Processed in 0.127250 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表