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时间轴错乱相关推荐

  1. http sxyk.cdn_Discuz x3 开启cdn和https后链接修改教程

    Discuz x3 开启cdn和https后链接修改教程 开启支持https主要需要修改一下几个地方 1. .查找修改文件discuz_application.PHP :source/class/di ...

  2. 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法...

    这部份的工作,以前花的时间太少. 希望能产生一定的作用. http://www.nigesb.com/discuz-cc-attacker-defence.html http://bbs.zb7.co ...

  3. kafka集群部署成功后,创建生产者往指定主题里面发送消息时出错

    问题描述:kafka集群部署成功后,创建生产者往指定主题里面发送消息时出错,如下所示: 解决方法:在kafka的server.properties配置文件中需要打开listenners配置行,不要使用 ...

  4. android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...

    先说明一下粘包的概念: 发送时是两个单独的包.两次发送,但接收时两个包连在一起被一次接收到. 在以前 WinCE 下 Socket 编程,确实也要处理粘包的问题,没想到在 Android 下也遇到了. ...

  5. Outlook发送后,收到的邮件都是纯文本格式

    不知道哪国语言的网址 疑似官方文档的解决方法,[排错]Outlook中,HTML邮件发送后变成了纯文本格式 https://social.technet.microsoft.com/Forums/he ...

  6. VOS中开启媒体转发功能后,计算几种常用编码所需占用的带宽量

    VOS中开启媒体转发功能后,计算几种常用编码所需占用的带宽量 计算方法如下: 带宽 = 包长度 × 每秒包数 = 包长度 × (1 / 打包周期) =(Ethernet 头 + IP 头 + UDP ...

  7. git开启两步认证后导致clone项目时报错

    gitlab开启两步认证后导致clone项目时报错 报错信息 remote: HTTP Basic: Access denied remote: You must use a personal acc ...

  8. java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...

  9. mq发送消息到两个服务器问题,RocketMQ消息发送常见错误与解决方案

    本文将结合本身使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题.解决问题.web 一.No route info of this topic 没法找到路由信息,其 ...

最新文章

  1. jq常用过滤器_Jquery过滤器
  2. CentOS 7安装GNOME图形界面并设置默认启动
  3. 论文推荐 | 2018中国卫星导航年会论文集
  4. OO Design之SOLID原则
  5. DevCon.exe (DevCon Command Line Utility)
  6. 王思聪花了100万的组装的电脑,网速到底有多快?
  7. golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
  8. 17-05-25模拟赛
  9. 【HDU - 3038】How Many Answers Are Wrong 【带权并查集 - 向量偏移】
  10. NodeMCU(ESP8266)按键中断实现单击-双击-长按功能
  11. eclipse运行java快捷键,eclipse常用快捷键
  12. 如何对接VOLVO EDI系统?
  13. 搜狗站长html标签验证,悦然建站分享:搜狗站长平台使用教程之添加网站
  14. SAP license key developer access key
  15. 《黑白团团队》第九次团队作业:Beta冲刺第一天
  16. 爱签:如何在线签订电子合同
  17. matlab 积分函数曲线,matlab积分函数
  18. chrome无法访问商店,打不开网页怎么办,五步轻松解决
  19. (将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。
  20. tcp端对端 ip点对点

热门文章

  1. PXE高效率批量网络装机
  2. Python 大作业 网易云歌单数据分析及可视化(参考多位博主文章)
  3. iPad必备学习应用推荐
  4. 看了这篇你肯定瘦 全身上下想瘦哪就瘦哪 - 健康程序员,至尚生活!
  5. 问卷与量表数据分析(SPSS+AMOS)学习笔记(三) : 数据分析工具,三线表的制作
  6. 使用jquery将毫秒格式时间转为年月日格式
  7. 管理者怎么提升讲话能力
  8. 热血篮球维修服务器是怎么回事,新浪《热血篮球》1月15日停服维护及更新公告...
  9. 【TP5源码】获取项目的根目录
  10. vsftpd配置笔记