CANopen开启PDO定时发送后心跳帧时间错误,PDO迟迟不发送,CANopen时间轴错乱
CANopen的例子中,一种使用很多也很简单的方式是用一个1ms定时器中断,然后用全局变量重写sertimer和getElapsedTime函数,然后中断服务函数中加入timerForCan
//Set the next alarm //
void setTimer(TIMEVAL value)
{NextTime=(TimeCNT+value)%TIMER_MAX_COUNT;
}// Get the elapsed time since the last occured alarm //
TIMEVAL getElapsedTime(void)
{int ret=0;ret = TimeCNT> last_time_set ? TimeCNT - last_time_set : TimeCNT + TIMER_MAX_COUNT - last_time_set;last_time_set = TimeCNT;return ret;
}
但是这种方式存在一个致命问题,这种方式计算的时间,在只有心跳帧的时候是没问题的,加入PDO定时发送,就会混乱,例如1s心跳帧300msPDO定时,出现的现象是1s心跳帧保留,在1s心跳帧之后300ms会多出一个心跳帧,而PDO定时发送迟迟不出现!!!!!!,这种情况下应改为last_time_set = TimeCNT;放在timerForCan之前!!!!
```c
//Set the next alarm //
void setTimer(TIMEVAL value)
{NextTime=(TimeCNT+value)%TIMER_MAX_COUNT;
}// Get the elapsed time since the last occured alarm //
TIMEVAL getElapsedTime(void)
{int ret=0;ret = TimeCNT> last_time_set ? TimeCNT - last_time_set : TimeCNT + TIMER_MAX_COUNT - last_time_set;//last_time_set = TimeCNT;罪魁祸首return ret;
}
另外还要开一个1毫秒的定时器,每1毫秒调用一下下面这个函数。
void timerForCan(void)
{TimeCNT++;if (TimeCNT>=TIMER_MAX_COUNT){TimeCNT=0;}if (TimeCNT==NextTime){TimeDispatch();}
}
//1ms中断服务函数
void TIM7_IRQHandler(void)
{if(TIM7->SR&0X0001)//中断{}TIM7->SR&=~(1<<0);//清除中断标志位 last_time_set = TimeCNT;timerForCan();
}
CANopen开启PDO定时发送后心跳帧时间错误,PDO迟迟不发送,CANopen时间轴错乱相关推荐
- http sxyk.cdn_Discuz x3 开启cdn和https后链接修改教程
Discuz x3 开启cdn和https后链接修改教程 开启支持https主要需要修改一下几个地方 1. .查找修改文件discuz_application.PHP :source/class/di ...
- 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法...
这部份的工作,以前花的时间太少. 希望能产生一定的作用. http://www.nigesb.com/discuz-cc-attacker-defence.html http://bbs.zb7.co ...
- kafka集群部署成功后,创建生产者往指定主题里面发送消息时出错
问题描述:kafka集群部署成功后,创建生产者往指定主题里面发送消息时出错,如下所示: 解决方法:在kafka的server.properties配置文件中需要打开listenners配置行,不要使用 ...
- android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...
先说明一下粘包的概念: 发送时是两个单独的包.两次发送,但接收时两个包连在一起被一次接收到. 在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了. ...
- Outlook发送后,收到的邮件都是纯文本格式
不知道哪国语言的网址 疑似官方文档的解决方法,[排错]Outlook中,HTML邮件发送后变成了纯文本格式 https://social.technet.microsoft.com/Forums/he ...
- VOS中开启媒体转发功能后,计算几种常用编码所需占用的带宽量
VOS中开启媒体转发功能后,计算几种常用编码所需占用的带宽量 计算方法如下: 带宽 = 包长度 × 每秒包数 = 包长度 × (1 / 打包周期) =(Ethernet 头 + IP 头 + UDP ...
- git开启两步认证后导致clone项目时报错
gitlab开启两步认证后导致clone项目时报错 报错信息 remote: HTTP Basic: Access denied remote: You must use a personal acc ...
- java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
- mq发送消息到两个服务器问题,RocketMQ消息发送常见错误与解决方案
本文将结合本身使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题.解决问题.web 一.No route info of this topic 没法找到路由信息,其 ...
最新文章
- jq常用过滤器_Jquery过滤器
- CentOS 7安装GNOME图形界面并设置默认启动
- 论文推荐 | 2018中国卫星导航年会论文集
- OO Design之SOLID原则
- DevCon.exe (DevCon Command Line Utility)
- 王思聪花了100万的组装的电脑,网速到底有多快?
- golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
- 17-05-25模拟赛
- 【HDU - 3038】How Many Answers Are Wrong 【带权并查集 - 向量偏移】
- NodeMCU(ESP8266)按键中断实现单击-双击-长按功能
- eclipse运行java快捷键,eclipse常用快捷键
- 如何对接VOLVO EDI系统?
- 搜狗站长html标签验证,悦然建站分享:搜狗站长平台使用教程之添加网站
- SAP license key developer access key
- 《黑白团团队》第九次团队作业:Beta冲刺第一天
- 爱签:如何在线签订电子合同
- matlab 积分函数曲线,matlab积分函数
- chrome无法访问商店,打不开网页怎么办,五步轻松解决
- (将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。
- tcp端对端 ip点对点