ISA真慢
计划没有变化快,周一计划的任务几乎没怎么做,时间完全交给了一个BUG;
最近大家在做新主板的功能,同事说DeviceNet不通,尽管我对DeviceNet一点不懂,不过好歹之前测过CAN模块在新主板上的功能,于是负责起了这个bug;
电脑连上CAN分析仪,包都看不到,上哪通去?搞硬件的同时出差了,没人懂连线的方法,算了,自己试吧;反复接线,终于接通了,在我这的环境,改了改代码,能够看到数据包了;
同事拿过去一看,依然不行,然后问我怎么改的代码,我跟她一起看的时候,注意到我们的代码里的波特率居然跟标准的不一样??什么?这。。。改成一样的,拿到同事环境,果然那边也通了;问了下上面,说是跟具体硬件有关,以前是故意这样写的;
连上DeviceNet模块吧,一试,不通啊!!同事说把发送周期调大一点吧,改之,果然,通了;
好吧!这是为什么??难道是别的线程的优先级太高了,抢占了当前发送线程??于是我把相关的3个线程绑定到一个CPU上,而且只有他们3个线程;他们的优先级也规划好;启动,依然不通;
打日志吧;看到错误是发送缓冲区已满;还是怀疑优先级影响了调度,于是将填充队列线程的优先级降低,不受其他线程影响;启动,依然不通;但是这个填充线程还是调用了,证明,两个更高优先级的线程主动放弃了CPU;
于是在库写函数的前后加日志,以确定是否写入卡住了;果然,经过一些拍之后,就会出现一次卡主的情况,这时候写线程进入睡眠,于是填充数据线程又开始向队列放数据,放着放着就满了;
确认是底层问题,还是考虑,是否应用层线程优先级比系统中断高,抢了系统中断的情况,于是将应用成的中断优先级都改低,最高不超过系统中断;启动之,依然不通;
好了,这回可以安心查驱动代码了;
从库函数一路过去,是通过ioctl陷入内核的,于是打了各种日志;
在dmesg中发现驱动的发送队列果然被填满了,于是进入了睡眠,证实了之前猜测的情况;
看驱动代码,思路是当第一个包过来之后,就会开启一个标记,有这个标记则靠中断来驱动发送,即每次中断过来都会发送数据;于是考虑是否是中断问题?
在中断的入口处打印时间,果然,发现中断的触发时间很长,甚至接近1ms才有一次中断触发,两次写数据之间甚至隔了几十ms,这不扯呢么?
周六又过来查了一天,觉得作为软件人员,我已经尽力了,周一跟上面汇报一下,联合其他人一起确认下;可能我需要一个懂中断的硬件人员,帮我测测中断频率什么的;
未完待续…
续…
isa就是这么慢…
ISA真慢的更多相关文章
- 读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型
1. 何为public继承的”is-a”关系 在C++面向对象准则中最重要的准则是:public继承意味着“is-a”.记住这个准则. 如果你实现一个类D(derived)public继承自类B(ba ...
- 位域-isa指针
一.isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bi ...
- 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密
下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...
- geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)
目录 前言 实现过程 总结 一.前言 上一篇文章介绍了如何使用Geotrellis渲染单波段的栅格数据,已然很是头疼,这几天不懈努力之后工作又进了一步,整清楚了如何使用Geotrelli ...
- [转]Fiddler抓取Android真机上的HTTPS包
此篇文章转载自:http://blog.csdn.net/roland_sun/article/details/30078353 工作中经常会需要对一些app进行抓包, 但是每次默认都是只抓http请 ...
- 【Data Cluster】真机环境下MySQL数据库集群搭建
真机环境下MySQL-Cluster搭建文档 摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...
- 在真机调试 iOS 应用:理解 Certificates, Identifiers & Profiles
No matching provisioning profiles found. No matching code signing identity found. Your account alrea ...
- Is-A,Has-A,Use-A(转载)
原文地址:http://blog.csdn.net/loveyou128144/article/details/4749576 而Is-A,Has-A,Use-A则是用来描述类与类之间关系的.简单的说 ...
- iOS开发:创建真机调试证书及描述文件
iOS开发:创建真机调试证书及描述文件 关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架 ...
随机推荐
- springboot 打包发布(war包)
版本关系: 软件名称 版本号 软件名称 版本号 spring boot 2.x jdk 1.8 tomcat 9.x springboot中的pom.xml文件 打包:右键点击项目,选择如下图: 填写 ...
- Linux命令——column
参考:Viewing Linux output in columns 功能 column命令把他的输入格式化多列显示.输入可以是文件,也可以是标准输入. 列优先,从左到右 显示的时候首先填满最左列,然 ...
- JAVA设计模式之单例模式(单件模式)—Singleton Pattern
1.什么是单例模式? <Head First 设计模式>中给出如下定义:确保一个类只有一个实例,并提供一个全局访问点. 关键词:唯一实例对象. 2.单例模式的实现方式: 2.1 懒汉式 对 ...
- TAITherm — 专业热管理工具
TAITherm 是美国ThermoAnalytics 公司开发的专业三维热仿真分析工具RadTherm 的升级产品,在继承RadTherm特征的基础上,开发了新型高效求解器Multigrid Sol ...
- Maven配置环境变量
Windows: 1:新建系统M2_HOME变量,并把安装maven路径拷贝上去 2:配置path变量,并把maven路径拷贝上去,这次的maven路径到bin 3:测试maven环境是否配置 ...
- k8s的etcd
etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单:安装配置简单, ...
- python+request 常用基础学习笔记
1.pycharm,避免控制台输出的json内容中文出现乱码. #注:乱码为Unicode格式:\u6d4b\u8bd5.加入如下代码后正确返回中文:测试 get_result = r.json() ...
- 我们什么时候应该在C程序中使用指针?
回答: 传递大型结构喜欢服务器请求或响应数据包. 实现链表和二叉树. 使用GPIO或硬件寄存器. 从函数中获取地址或更新值(通过引用调用) 创建动态数组. 使用函数指针创建回调函数. 注意:除此之外, ...
- 是什么是FBC CBV
- FBV url - 函数 - CBV url - view
- 修改DEDE文章标题长度,解决DEDE文章标题显示不全
在用dede调用列表标题出来的时候,会发现标题文字字数显示不完全,那是因为dede默认标题出来长度是30个字符,为了让标题显示完整,要做以下修改! 进入后台–系统–系统设置–系统基本参数–其他选项–文 ...