文档章节

Ember模块笔记——排查串口硬件流控问题

临峰不畏
 临峰不畏
发布于 2016/12/03 12:13
字数 625
阅读 48
收藏 0

#背景 Ember库在RTL8196的Linux上运行不正常。经我们的小伙伴精密地排查,问题不在硬件板子、串口驱动、EM3581固件上。因为我们自己写的串口硬件流控Demo在嵌入式Linux上是正常的。那么,问题只能定位为Ember库在处理硬件流控中,由于平台的原因导致的异常。

#正文 对于这个问题,我的首先能想到的就是Ember代码关于串口的配置部分。首先找到程序入口:

这个函数 emberAfMain()函数的参数,实际是:emberAfMain(5, "emberAfMaim -n 0 -p ttyS1")
进入该函数,在文件 protocal/zigbee_5.7/app/framework/util/af-main-host.c 文件中:

其中L519是在解析 MAIN_FUNCTION_PARAMETERS(其实就是int argc, char *[]args) 中参数的。然后再在L525对串口进行配置。
进入 emberAfMainStartCallback() 函数去看:

emberAfmainStartCallback(int *ret, int argc, char **argv)
 ` ezspProcessCommandOptions(argc, argv)
     `ezspInternalProcessCommandOptions(argc, argv, errStr)

最终是在 ezspInternalProcessCommandOptions(int argc, char *argv, char *errStr)中对参数进行解析,在 protocal/zigbee_5.7/app/ezsp-host/ash/ash-host-ui.c,代码如下:

其中我们很关心的两个参数的处理分别为:

从代码可以看出"-n" 这个参数只作为第一个参数,它调用了ashSelectHostConfig(cfg),cfg就是"-n"的参数,这里我们填的是0。
去看 ashSelectHostConfig(),定义在 protocal/zigbee_5.7/app/ezsp-host/ash/ash-host.c:

ashSelectHostConfig()的功能是选择一个配置模板。这也是为什么"-n"参数一定要排在最前面的原因了,后面的参数是对这个模板进行修改。 在L157~159,如果cfg小于ashHostConfigArray数组的长度,那就 ashHostConfig = ashHostConfigArray[cfg]
我们去看看 ashHostConfigArray数组的定义:

L95是ashHostConfigArray[0],被定义成了宏 ASH_HOST_CONFIG_DEFAULT;L97~116为ashHostConfigArray[1]
我们去看 ASH_HOST_CONFIG_DEFAULT 定义:

在L69行的值为true,即开启硬件流控。
从L87来看,ashHostConfig的默认值就是 ASH_HOST_CONFIG_DEFAULT,即开启了硬件流控的。
AshHostConfig 的定义如下:

其中L53定义了硬件流控字段rtsCts。为了查问题,我们直接去找 rtsCts的引用处,找到如下:
protocal/zigbee_5.7/app/ezsp-host/ash/ash-host-io.c
readConfig(rtsCts)其实就是个宏,它展开为:ashHostConfig.rtsCts,就是我们上面看到的设备。
我们要注意两个变量:rtsCts,flowControl,因为下面引用到了:


它设置了两个串口配置参数:tios.c_iflag, tios.c_cflag。这个是重点排查对象!!
好,通过打调试信息来区别我们Demo与Ember库之间的差异。

© 著作权归作者所有

共有 人打赏支持
临峰不畏
粉丝 215
博文 187
码字总数 98583
作品 0
深圳
架构师
私信 提问
2017.10.22 Ardupilot开发者大会会议笔记,绝对干货满满!

在国内举办的首届Ardupilot无人机开发者大会,可以说是国内无人机领域的大事情,大咖云集。Ardupilot官方开发者都来到现场,在这里要为他们的开源精神点赞。社区开发者们都很nice,现场会有很...

msq19895070
2017/12/13
0
0
和ESP8266 Arduino谈场恋爱 02 这神奇的程序烧写

版权声明:本文为twowinter原创文章,请联系微信公众号twowinter,未经博主允许不得转载。 https://blog.csdn.net/iotisan/article/details/84928341 前言 开发环境搭起来了,接着这篇笔记就...

iotisan
12/09
0
0
如何用ESP8266/8285进行透传(六)

本文章主要真对的是深圳四博智联科技有限公司的AT 固件的模组进行的个人总结。拿到模块后请确定模块里面的固件在进行如下操作 准备工作 准备一个深圳四博智联科技有限公司的ESP-F WIFI 模组—...

qq_37843007
04/09
0
0
【Python入门】 使用 pip 安装 pySerial 串口通讯模块

pySerial封装了对串口的访问。 特性 在支持的平台上有统一的接口。 通过python属性访问串口设置。 支持不同的字节大小、停止位、校验位和流控设置。 可以有或者没有接收超时。 类似文件的API...

微wx笑
2016/11/15
0
0
如何用ESP8266/8285进行透传(八)

本文章主要真对的是深圳四博智联科技有限公司的AT 固件的模组进行的个人总结。拿到模块后请确定模块里面的固件在进行如下操作 准备工作 准备一个深圳四博智联科技有限公司的ESP-F WIFI 模组—...

qq_37843007
04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
27分钟前
1
0
Java开发Swing实战JFrame和JTabbedPane容器的用法详细解析

概述: 项目是一个桌面程序,涉及标签和按钮组件、布局管理器组件、面板组件、列表框和下拉框组件等组件,以及Swing事件处理机制。 下面先从最基础的界面开始。 /** * @author: lishuai * @...

金铭鼎IT教育
32分钟前
9
0
flask 之旅

环境 为了正确地跑起来,你的应用需要依赖许多不同的软件。 就算是再怎么否认这一点的人,也无法否认至少需要依赖Flask本身。 你的应用的运行环境,在当你想要让它跑起来时,是至关重要的。 ...

hblt-j
32分钟前
6
0
easyui的上传文件

记录一下自己亲手操刀easyui的心得:不用不知道,一用就问题多,网上查资料,有用的真的太少了 ——————————————————正文 FileBox,还是不错的讲真,至少我去自己写就gaga了...

anlve
34分钟前
4
0
如何做好SQLite 使用质量检测,让事故消灭在摇篮里

本文由云+社区发表 SQLite 在移动端开发中广泛使用,其使用质量直接影响到产品的体验。 常见的 SQLite 质量监控一般都是依赖上线后反馈的机制,比如耗时监控或者用户反馈。这种方式问题是: ...

腾讯云加社区
36分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部