文档章节

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

临峰不畏
 临峰不畏
发布于 2016/12/03 12:13
字数 625
阅读 43
收藏 0
点赞 0
评论 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库之间的差异。

© 著作权归作者所有

共有 人打赏支持
临峰不畏
粉丝 211
博文 183
码字总数 96576
作品 0
深圳
技术主管
2017.10.22 Ardupilot开发者大会会议笔记,绝对干货满满!

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

msq19895070 ⋅ 2017/12/13 ⋅ 0

如何用ESP8266/8285进行透传(六)

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

qq_37843007 ⋅ 04/09 ⋅ 0

[Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

3D相关开发 [direct-X] 1、direct-X最小框架 [OpenGL] 1、环境搭建及最小系统 [OpenGL] 2、企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [51单片机] 1602液晶显示控制代码 [51单片机] 1...

史迪奇2号 ⋅ 2017/08/01 ⋅ 0

手把手教你智能硬件开发(四) 蓝牙传输

第4节 蓝牙传输 智能硬件基本上都需要和手机相连,然后让手机控制这些硬件的工作。相连的方式不外乎以下三种, 数据线有线连接,通过一根数据线把智能硬件和手机连接起来。采用这种方式,需要...

anddlecn ⋅ 2016/09/07 ⋅ 0

DSP学习笔记——基于TMS320F28335

《手把手教你学DSP》 一、初识DSP1.DSP的主要特点: (1)数字信号处理的特点 数字信号处理把许多经典的理论体系作为自己的基础,同时又使自己成为许多新兴学科与技术的理论基础。 数字信号处...

djdn426611 ⋅ 01/04 ⋅ 0

如何用ESP8266/8285进行透传(八)

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

qq_37843007 ⋅ 04/09 ⋅ 0

Hass硬件开发软件化——Hardware As A Service硬件变成API(第二届阿里云API大事参赛感悟)

阿里云API大赛加深了对API的认识 和API的第一次亲密接触,应该是在2000年左右的时候。那会还在上大二,刚开始编程不久,当时还是用VB在写程序,想要在打开文件的对话框里增加一个预览功能,费...

ddwei ⋅ 04/13 ⋅ 0

OSChina 技术周刊第十六期 —— 每周技术精粹

每周技术抢先看,总有你想要的! 移动开发 【博客】[Android] AS 中 Gradle 配置运行浅析 服务端开发/管理 【软件】安全的即时聊天系统 Tox 【软件】HTTP 代理服务 gopee 【软件】流媒体平台...

OSC编辑部 ⋅ 2015/01/04 ⋅ 1

【Python入门】 使用 pip 安装 pySerial 串口通讯模块

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

微wx笑 ⋅ 2016/11/15 ⋅ 0

[自娱自乐] 3、超声波测距模块DIY笔记(三)

前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射...

史迪奇2号 ⋅ 2017/08/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部