当前位置: 首页 > news >正文

网站定制合同和模版的区别wordpress主菜单导航插件

网站定制合同和模版的区别,wordpress主菜单导航插件,wordpress安装系统,电子商务网站建设分析目录 1.问题现象 2.数据流分析 ​​​​3.代码分析 3.1 AllocDAQ 3.2 AllocOdt 3.3 AllocOdtEntry 4.根因分析及解决方法 4.1 根因分析 4.2 解决方案 1.问题现象 在手撸XCP代码时, DAQ的实现是一大头痛的事情。最初单周期实现还好一点,特别是…

目录

1.问题现象

2.数据流分析

​​​​3.代码分析

3.1 AllocDAQ

3.2 AllocOdt

3.3 AllocOdtEntry  

4.根因分析及解决方法

4.1 根因分析

4.2 解决方案


1.问题现象

        在手撸XCP代码时, DAQ的实现是一大头痛的事情。最初单周期实现还好一点,特别是当出现了多周期的情况时,就出现了如下现象。

         解释一下i:

        为了测试XCP协议栈,我的算法为:Mea#i = Cal#i (i = 0-20)。

        当我选择所有观测量均通过10ms的周期进行上传时,数据显示没问题,即Mea10[0-9] = 10,Mea11[0-9] = 11;但是当我以1ms周期观测 Mea10,10ms周期观测Mea11,出问题了;如上图所示,本来应该都为11的,但是显示了一些我看不懂的数值。

        首先想到的是Slave拿数据拿错了,为什么会拿错呢?那肯定是ODT描述的element对应地址有问题。所以我们先来看看数据流,有图有真相。

2.数据流分析

       当有两个daqlist的时候,CANape在动态配置时顺序如下:AllocDAQ(分配2个daqlist)、AllocOdt(给两个daqlist分配好odt)、AllocOdtEntry(给2个daqlist的odt分配好entry),并不是之前我理解的每一个daqlist分配好odt和entry之后再处理另一个daq,具体看如下log截图:

        分配完毕之后再设置daq指针,往该地址里写相应的测量量的数据;如下

​​​​3.代码分析

       既然是ODT地址问题,那我们就从DAQ变量分配的地址开始查起来;我们根据XCP标准推荐的DAQ配置时序开始:

        从AllocDaq、ODT、ODT Entry开始查起来

3.1 AllocDAQ

       上位机通过指令(0xD5)告诉ECU现在需要分配两个Daq List:

        这里会给DAQ分配一个buffer,如下:

       调试发现分配了两个DaqList,这里没问题;

3.2 AllocOdt

        通过分配ODT(D4),数据流如下:

        这部分具体代码如下: 

代码行数

作用

831

odtCount表示这个DAQlist有多少条odt(可以想成多少条报文),所以就是DAQ列表的大小

834/5

给PID赋值,同时给下一个DAQlist的首个ODT的PID赋值

837

将xcp_dyndaqodt[pos]的首地址赋给当前daq的odt

839

在动态daqbuffer的Odt位置加1;

840-844

给odt分配odtcount

845

给当前daq分配状态

846

给daq配置时序分配处于odt配置状态

       完成之后配置结果如下:

        这里发现第一个odt和第二个odt的地址不止8个字节(一帧报文),这里可能有点问题;

         0x70003fe8对应的是动态daqbuffer的首地址:

        找到该地址看里面的数据如下:

        发现数据存放并不是连续的,而是直接跳了24个字节;怀疑这里应该存在问题:看代码中,只是对Xcp_DynDaqOdtPos进行了加1,但是从log来看的话,

        应该是给daq0分配了6个odt,然后再给daq1分配了3个odt;如果只对位置进行加1的话,也就是Xcp_DynDaqOdt[pos+1]的地址为当前daq的odt的下一个odt的首地址;那么第二次给daq1给配3个odt的时候,使用的地址就为[pos+1]的地址;这样就把daq0的第二个odt给覆盖了;

        但是还是没能找到在代码什么位置给赋值,在allocodtentry函数里给Xcp_DynDaqOdt里写数据(每一条分配一个地址),包括地址和entrysize:

        很明显这里面只有6个odt(正确应是9个),第二个odt里面放的地址是70004018,如下:

      正常情况下,第二个odt里应该放置的Xcp_DynDaqBuffer[1]的地址;也印证了之前odt被覆盖的猜想。

3.3 AllocOdtEntry  

        上位机通过指令ODT ENTRY(D3)分配Entry,这里就是给每一帧数据分配几个数据,还是接着上面的,第一帧可上传7个字节的数据,那么如果每个数据的大小均为4个字节,就只能上传1个数据加上下一个数据的前三个字节,因此ODTENTRY为2;那么第二帧接着上面的就可以上传第一帧未传完的剩余一个字节(1byte)、第三个数据(4byte)以及第四个数据的前两个字节(2byte),所以第二帧的ODTENTRY为3;以此类推。数据流如下:

     调试结果如下:

       ODTEntry里面包含了entry的地址(需要上传数据的地址)、长度等,且ODTentry本身的地址是动态daqbuffer里的地址,即是说我们是通过将数据放到动态daqbuffer里,然后再上传。

4.根因分析及解决方法

4.1 根因分析

        DAQ上传的具体线路:

        首先,在AllocOdt这条指令下,将Xcp_DynOdtBuffer的地址赋给DAQ[x].odt[y];

        然后在AllocOdtEntry,将Xcp_DynDaqBuffer地址赋给OdtEntry;

        最后在writeDaq里将变量的地址写到给OdtEntry(Xcp_DynDaqBuffer)里,即在Xcp_DynDaqBuffer里存放实际测量量的地址、DynOdtBuffer存放的是odtentry的地址。

        由于在alloctOdt时覆盖了DAQ0的第2-4个ODT,所以会出现如下现象:

       并没有一一对应。

4.2 解决方案

        那么修改代码如下:

数据显示正常:

        哭了,注释一行代码,调试了一周。 还是当时设计时没有理清思路,给自己埋下了大坑。

http://www.15wanjia.com/news/190273.html

相关文章:

  • 智慧团建网站登录平台pc端行业电子商务网站建设
  • 响应式企业网站什么网站可以做设计赚钱
  • 赣州网站建设多少钱wordpress首页显示链接
  • 黑龙江能建公司官网北京门窗优化
  • 中粮网站是哪个公司做的网站建设公司信息
  • 专注七星彩网站开发wordpress全屏首页
  • 厦门专业做网站 厦门做网站的公司 厦门做服饰网站保险网站有哪些保险网站
  • 呼和浩特网站开发 千投常州住房和城乡建设局网站首页
  • 邯郸做网站优化做个购物商城网站多长时间
  • 教育网站设计一个完整的策划案范文
  • 什么是空壳网站蒙古文门户网站建设督导
  • 互助网站开发哪个网站可以做代码题目
  • 义乌网站建设微信开发宁波seo的公司联系方式
  • 网站建设应用后台怎么进入自己网站主机地址
  • 如何查看网站是否被做跳转友情网站制作
  • 福州医社保增减员在什么网站做阿里云建站百度收录吗
  • 网站开发电脑配置要求wordpress zw
  • 做新闻类网站需要什么资质家谱网站源码下载
  • 网站优化 h几 更易被抓制作表格的软件app
  • 设计新颖的网站建设备案网站用户名是什么
  • 嘉兴网站排名优化湘潭seo培训
  • 网站设计制作发展趋势广东网站设计网站
  • 外贸网站推广方案湖南常德今天最新消息
  • 合肥网站建设新手合肥建设网站的公司
  • 网站建设与网络编辑心得体会河南网络洛阳网站建设河南网站建设
  • 域名和主机有了怎么做网站网站建设可以经营吗
  • 川畅咨询 网站建设经常使用( )对网页的布局进行控制
  • 自助建网站系统看电影佛山搭建建网站哪家好
  • 市住房城乡建设网站网站建设费 科研 类
  • 群晖做网站网站开发语言net