[发明专利]一种基于多线程定时器读取CAN数据方法及系统在审
申请号: | 201911149285.4 | 申请日: | 2019-11-21 |
公开(公告)号: | CN111124621A | 公开(公告)日: | 2020-05-08 |
发明(设计)人: | 蔡明志;崔熠凡;于金铃 | 申请(专利权)人: | 南京桐润新能源有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F9/448;G06F13/38 |
代理公司: | 南京泰普专利代理事务所(普通合伙) 32360 | 代理人: | 张磊 |
地址: | 211100 江苏省*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 多线程 定时器 读取 can 数据 方法 系统 | ||
1.一种基于多线程定时器读取CAN数据方法,其特征是包括以下步骤:
步骤1、创建CAN数据对象,设计CAN数据属性、CAN方法,在构造函数中引用多线程高精度定时器,设置定时器时间、指定委托事件和运行状态;
步骤2、定时时间到达后关闭定时器执行委托事件,获取CAN接收数据缓存区的数据长度;
步骤3、在主窗体中声明委托方法实现多线程下操作控件;
步骤4、主窗体定时器到达后关闭定时器,调用委托方法,在委托方法中判断哈希表元素个数是否满足要求。
2.根据权利要求1所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤1进一步包括:
步骤1-1、开启定时器,指定定时时常和超时回调函数,将不同时常的定时器散列在时间轮的对应槽中,每个槽中的定时器以双向链式存储,在运行到某个槽时,遍历链表一次,检查是否有到达时间的计时器,如检测到到达时间的定时器则删除结点;
步骤1-2、根据定时器的参数生成TimerNode节点,当定时器的时长大于
P[0]=t_exp%R0
其中,
式中,T_NOW表示定时器当前所在时刻,T_START表示定时器管理算法开始的时刻,T_SLOT表示定时器的时隙即时间片长度,P[0]表示第0级时间轮上的第0号槽,P[1]表示第1级时间轮上的第1号槽,P[2]表示第2级时间轮上的第2号槽,P[3]表示第3级时间轮上的第3号槽,interval表示定时器的定时时长,R0、R1、R2、R3分别表示第0级、第1级、第2级、第3级的槽数;
其中,;
步骤1-3、引入基于高速缓存的时间轮改进算法,由一个主线程和
3.根据权利要求2所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤1-3进一步包括:
步骤1-3a、对于上下文树中的每个节点,利用存储与节点内部的数据计算出估计概率:
式中,由无记忆信息源产生,表示队列中0的个数,表示队列中1的个数;
步骤1-3b、采用ZR估算法降低信息源的参数冗余度:
式中,各符号含义同上;
步骤1-3c、计算信息源的参数冗余度:
式中,各符号含义同上。
4.根据权利要求2所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤2进一步包括:
在非托管模式下,在内存中开辟与缓存区的数据相等的空间;使用指针把缓存区的数据复制到内存中并清空CAN缓存区;把内存中数据插入链表中并释放内存;获取列表中对应数据类型帧数,按照数据帧数循环读取每帧数据,按照通讯规则解析每个数据对应一个哈希值,存在哈希表内。
5.根据权利要求1所述的一种基于多线程定时器读取CAN数据方法,其特征在于,所述步骤3进一步包括:
主窗体下引用多线程高精度定时器;设置定时器时间、运行状态;使用.NET框架在异步线程下完成一次异步调用,.NET框架将异步请求队列加入线程池,以线程池内的线程处理异步请求,当所有的线程都处于忙碌状态,则使用新的异步调用置于等待队列,直到线程池产生新的可用线程。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京桐润新能源有限公司,未经南京桐润新能源有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911149285.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:基于深度学习的黄色培育钻石品级分类系统
- 下一篇:一种化学镀铜废水处理方法