1484|6

155

帖子

1

TA的资源

一粒金砂(高级)

 

【平头哥RVB2601创意应用开发】使用体验07 -- 基于NTP的代码追踪 [复制链接]

 

上篇的NTP使用记录已经篇幅很长了,所以将后续的代码追踪过程再记录一篇。也是出于好奇,对NTP的实现过程进行了代码分析,暂有一处不解,文中细表。

1、从lwip API开始追溯

NTP测试Demo中明显使用了lwip API,包括connectsendclose等接口。

 

image-20220415090342-1.png  

7-1 NTP Demo中的lwip接口使用

 

索性尝试从send接口开始追溯,通过CDK中按住“Ctrl键”左键点击send标识符,成功跳转到坑点。

 

image-20220415090342-2.png  

7-2 IDE帮着做得跳转不准确

 

接着,试着全文件搜索send(”,加一个左圆括号去除单独出现send的情况。可是只能搜到一个结果,那么依据经验判断send并不是定义的函数原型,可能是宏定义。

 

image-20220415090342-3.png  

image-20220415090342-4.png  

7-3 进行全文件字符串搜索

 

带着宏定义的判断继续搜索#define send”,怕默认搜索路径不全面,手动添加了整个pack目录,结果搜了个寂寞。

 

image-20220415090342-5.png  

image-20220415090342-6.png  

7-4 #define send关键字检索无结果

 

于是,改为搜索connect接口。超链接跳转一下就到了乍一看很靠谱的位置。

 

image-20220415090342-7.png  

7-5 connect关键字检索结果

 

看到这些宏的编译条件,于是做了一个判断,通过在board_yoc_init()中添加printf语句,使得启动时输出这个条件宏“LWIP_COMPAT_SOCKETS”的值。

 

void board_yoc_init()
{
    board_init();
	event_service_init(NULL); //initialize event service for network events
    console_init(CONSOLE_UART_IDX, 115200, 128);
    ulog_init();
    aos_set_log_level(AOS_LL_DEBUG);    
    LOGI(TAG, "Build:%s,%s\n",__DATE__, __TIME__);
	
	printf("-----> LWIP_COMPAT_SOCKETS: %d <-----\n", LWIP_COMPAT_SOCKETS);
	
    /* load partition & init kv function */
	aita_InitKV();
	
	/* set cycle timer for polling job */
	aita_InitTimer();
	
	/* initialize wifi network */
	aita_InitNetwork();

    board_cli_init();
}

image-20220415090342-8.png  

7-6 条件宏值为2

 

image-20220415090342-9.png  

7-7 符合条件的代码有更大惊喜

 

2、从List文件开始追溯

符合这个条件编译的宏定义中,send却是另外标识符的宏替代。上述过程说得简单,其实搞起来也花了两个多小时,于是决定改变思路——转看编译生成的List文件。

 

image-20220415090342-10.png  

image-20220415090342-11.png  

image-20220415090342-12.png  

image-20220415090342-13.png  

image-20220415090342-14.png  

image-20220415090342-15.png  

image-20220415090342-16.png  

7-8 追溯结果

 

实际的追溯结果是预料到的,因为NTP的实现就是修改了w800_api.c中的bug,唯一不解的是w800的接口是如何映射到lwip协议栈的。

追踪<send>位置的c代码,发现是sal_send()函数的定义代码。接着再搜索sal_send,最大惊喜来了!

 

image-20220415090342-17.png  

image-20220415090342-18.png  

image-20220415090342-19.png  

7-9 再追溯结果

 

这个惊喜直接让我放弃了,难道是C语法了解还不足吗?send怎么也成了sal_send的替代了,还是这里的宏要反着去理解?要是有明白的朋友,恳请帮我指出吧!

此篇到此结束,后面准备进行NTPRTC的初始化。

最新回复

接了任务吹了一下牛,这板子的外设资源太紧张了。唉!   详情 回复 发表于 2022-4-16 11:17
 
 
 

回复
举报

6318

帖子

9

TA的资源

版主

 
分析代码辛苦了。我去发了工单,也按工单的操作了,还是没有解产,后面从我的服务返回时间解决了。希望你把这个问题反馈给阿里,看他们有什么更好的修改。

点评

反应过了,发给我一个文档,是修改ntp bug的。感觉还是有坑。  详情 回复 发表于 2022-4-15 23:35
 
 
 

回复

707

帖子

0

TA的资源

纯净的硅(高级)

 

分析的很仔细.

 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

 
lugl4313820 发表于 2022-4-15 15:27 分析代码辛苦了。我去发了工单,也按工单的操作了,还是没有解产,后面从我的服务返回时间解决了。希望你把 ...

反应过了,发给我一个文档,是修改ntp bug的。感觉还是有坑。

点评

还没休息呀,看来这个板子实在折磨人呀。  详情 回复 发表于 2022-4-15 23:43
 
 
 

回复

6318

帖子

9

TA的资源

版主

 
sonicfirr 发表于 2022-4-15 23:35 反应过了,发给我一个文档,是修改ntp bug的。感觉还是有坑。

楼主这么晚还在努力更新,给一个大大的赞

点评

说来好笑,AliOS最早出过一块开发板STM32L476的,昨天在闲鱼上看到有人出,底下一堆人跟帖骂板子的——主要是骂开发环境。 看来这是个历史问题了。  详情 回复 发表于 2022-4-16 09:50
 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

 
lugl4313820 发表于 2022-4-15 23:43 还没休息呀,看来这个板子实在折磨人呀。

说来好笑,AliOS最早出过一块开发板STM32L476的,昨天在闲鱼上看到有人出,底下一堆人跟帖骂板子的——主要是骂开发环境。

看来这是个历史问题了。

点评

接了任务吹了一下牛,这板子的外设资源太紧张了。唉!  详情 回复 发表于 2022-4-16 11:17
 
 
 

回复

6318

帖子

9

TA的资源

版主

 
sonicfirr 发表于 2022-4-16 09:50 说来好笑,AliOS最早出过一块开发板STM32L476的,昨天在闲鱼上看到有人出,底下一堆人跟帖骂板子的&mdash ...

接了任务吹了一下牛,这板子的外设资源太紧张了。唉!

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表