一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于ThreadX的提升车载终端系统稳定性的方法与流程

2022-04-02 05:52:18 来源:中国专利 TAG:

基于threadx的提升车载终端系统稳定性的方法
技术领域
1.本发明涉及车联网技术领域,尤其涉及一种基于threadx的提升车载终端系统稳定性的方法。


背景技术:

2.threadx是优秀的硬实时操作系统(rtos),适用于深嵌入式应用中,具有规模小、实时性强、可靠性高、无产品版权费、易于使用等特点,并且支持大量的处理器和soc,包括arm、powerpc、sh 4、mips、adi dsp、ti dps、nios ii等,因此广泛应用于消费电子、汽车电子、工业自动化、网络解决方案、军事与航空航天等领域中。threadx主要的特点是支持优先级继承,抢占阈值的设计,微内核设计,代码空间占用小等。
3.现有的车载终端系统大多采用裸机(前后台系统)进行任务调度和系统管理,不利于任务划分和代码编写,而且对于任务堆栈的使用情况还得自己去衡量,不利于监控堆栈的使用情况。堆栈溢出往往也是嵌入式系统出现各种莫名其妙的bug的原因之一。因此,现有的车载终端系统主要技术问题在于:应用程序对各项任务划分不明确,由此带来的资源管理松散、堆栈管理方面监控不足、程序健壮性与稳定性不足。


技术实现要素:

4.本发明的目的在于提供一种基于threadx的提升车载终端系统稳定性的方法,以解决现有的车载终端系统采用裸机带来的稳定性差的技术问题。本发明提供的诸多技术方案中的优选技术方案所能产生的诸多技术效果详见下文阐述。
5.为实现上述目的,本发明提供了以下技术方案:
6.本发明提供的一种基于threadx的提升车载终端系统稳定性的方法,所述车载终端系统包括汽车tbox以及can总线,所述汽车tbox设置有mcu,所述mcu通过threadx系统进行运行,还包括如下步骤:
7.s1、所述mcu进行初始化;
8.s2、所述mcu任务调度与执行;
9.s3、所述mcu进入休眠;
10.s4、休眠结束返回步骤s2。
11.进一步地,步骤s2包括如下步骤:
12.s21、执行主循环任务;
13.s22、处理所述can总线的接收发送任务;
14.s23、执行串口通信任务;
15.s24、执行指示灯任务;
16.s25、监控堆栈任务;
17.s26、处理空闲任务。
18.进一步地,所述主循环任务、接收发送任务、串口通信任务的调度周期均为10ms;
所述指示灯任务、堆栈任务、空闲任务的调度周期均为50ms;所述主循环任务、接收发送任务、串口通信任务、指示灯任务、堆栈任务、空闲任务的优先级别分别为:1级、2级、3级、4级、5级、6级。
19.进一步地,步骤s25包括如下步骤:
20.s251、将任务的堆栈区域全部初始化为0xaa;
21.s252、每隔1s进行一次堆栈检测;检测时,从所述堆栈的尾部往前检测,直到第一个值不等于0xaa为止;
22.s253、计算所述堆栈使用比率。
23.进一步地,所述堆栈使用比率的计算公式r为:
24.r=(stack_used-stack_start)/(stack_end-stack_start)
×
100%;
25.其中,stack_used为第一个值不等于0xaa的位置号,stack_start为所述堆栈的开始位置号,stack_end为所述堆栈的结束位置号,所述位置号均采用十六进制表示。
26.进一步地,步骤s3包括如下步骤:
27.s31、关闭所述mcu的串口;
28.s32、关闭所述can总线连接的收发器;
29.s33、关闭所述mcu的io引脚;
30.s34、禁止所述mcu的定时器运行;
31.s35、配置所述mcu的唤醒引脚;
32.s36、关闭所述mcu的外部看门狗和内部看门狗;
33.s37、进入休眠状态。
34.进一步地,基于threadx的提升车载终端系统稳定性的方法,还包括通过电源对所述汽车tbox进行休眠与唤醒,其步骤如下:
35.s51、所述汽车tbox进入深度睡眠;
36.s52、所述can总线运行、深度睡眠时间结束、所述can总线收到电源唤醒信号中是否有至少一个条件成立;如是,则执行步骤s53;否则,返回步骤s51;
37.s53、所述汽车tbox唤醒,所述can总线执行接收发送任务;
38.s54、汽车的ign是否处于off档位,且,所述can网络是否进入休眠条件;如是,执行步骤s55;否则,返回步骤s53;
39.s55、所述汽车tbox休眠;
40.s56、本次休眠距离上次唤醒的时长是否已达达预定时间;如是,返回步骤s51;否则,返回步骤s57;
41.s57、收到sms短信唤醒信号、所述can总线运行、睡眠时间结束、收到电源唤醒信号中是否有至少一个条件成立;如是,返回步骤s53;否则,返回步骤s55。
42.进一步地,所述汽车tbox处于深度睡眠状态时,输入电流为1ma,输入电压为12v;所述汽车tbox处于睡眠状态时,输入电流为3ma,输入电压为12v;所述汽车tbox处于唤醒状态时,输入电流为250ma,输入电压为12v。
43.进一步地,基于threadx的提升车载终端系统稳定性的方法,还包括对所述mcu的应用程序进行完整性检测,一次完整性检测步骤为:
44.s61、bootloader在所述应用程序启动或升级后的第一次启动时,对所述应用程序
的整个区域进行crc32值统计;
45.s62、所述mcu在所述应用程序上电或一次休眠唤醒后,进行一次完整性检测;
46.s63、所述mcu计算的crc32与所述bootloader计算的crc32是否一致;如是,执行步骤s64;否则,执行步骤s65;
47.s64、应用程序完整;
48.s65、做故障处理。
49.进一步地,步骤s61和s62中,完整性校验的具体步骤为:
50.在所述应用程序整个区域中,每隔1s读取1k数据进行crc32校验,统计crc32值,该校验值作为下1k数据crc32校验的初始值;
51.持续上述过程,直到读取完所述应用程序整个区域中的数据,并记录最后一个crc32校验值。
52.实施本发明上述技术方案中的一个技术方案,具有如下优点或有益效果:
53.本发明采用threadx系统开发用于提升车载终端系统稳定性的应用程序,并嵌入在mcu中,提升了mcu的任务规划与优先处理能力,有效监控和提升堆栈的利用效率,使得其使用率保持在70%的合理范围。因而,本发明使车载终端系统的任务执行更为明确,资源管理更为紧凑,稳定性和安全性得到进一步提升。
附图说明
54.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍,显而易见,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,附图中:
55.图1是本发明实施例的一种基于threadx的提升车载终端系统稳定性的方法的流程图;
56.图2是本发明实施例的一种基于threadx的提升车载终端系统稳定性的方法中步骤s2的流程图;
57.图3是本发明实施例的一种基于threadx的提升车载终端系统稳定性的方法中步骤s3的流程图;
58.图4是本发明实施例的一种基于threadx的提升车载终端系统稳定性的方法中步骤s25的流程图;
59.图5是本发明实施例的一种基于threadx的提升车载终端系统稳定性的汽车tbox的进行休眠与唤醒方法的流程图;
60.图6是本发明实施例的一种基于threadx的提升车载终端系统稳定性的手机端应用程序完整性检测的流程图。
具体实施方式
61.为了使本发明的目的、技术方案及优点更加清楚明白,下文将要描述的各种示例性实施例将要参考相应的附图,这些附图构成了示例性实施例的一部分,其中描述了实现本发明可能采用的各种示例性实施例。除非另有表示,不同附图中的相同数字表示相同或
相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。应明白,它们仅是与如所附权利要求书中所详述的、本发明公开的一些方面相一致的流程、方法和装置等的例子,还可使用其他的实施例,或者对本文列举的实施例进行结构和功能上的修改,而不会脱离本发明的范围和实质。
62.在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”等指示的是基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的元件必须具有的特定的方位、以特定的方位构造和操作。术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。术语“多个”的含义是两个或两个以上。术语“相连”、“连接”应做广义理解,例如,可以是固定连接、可拆卸连接、一体连接、机械连接、电连接、通信连接、直接相连、通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
63.为了说明本发明所述的技术方案,下面通过具体实施例来进行说明,仅示出了与本发明实施例相关的部分。
64.鉴于threadx是一款优秀的硬实时操作系统(rtos),其主要特点是支持优先级继承、抢占阈值的设计、微内核设计、代码空间占用小等。本发明基于嵌入式实时操作系统(threadx)开发应用程序,来高效管理mcu的任务和资源,提升程序安全性和稳定性。进而提升车载终端系统的稳定性和安全运行,解决现有的车载终端系统大多采用裸机(前后台系统)存在的系统任务划分不明确、资源管理松散、堆栈管理方面监控不足以及程序健壮与稳定性不能保证的技术问题。
65.如图1-6所示,本发明提供了一种基于threadx的提升车载终端系统稳定性的方法,车载终端系统包括汽车tbox以及can总线,can总线用于连接外设,汽车tbox设置有mcu及4g模组,mcu和4g模组通过uart串行总线进行连接,mcu通过threadx系统进行运行。其提升车载终端系统稳定性的方法包括如下步骤:
66.s1、mcu进行初始化。此步骤中,先初始化mcu的时钟模块和gpio(general-purpose input/output,通用输入输出)然后开启外部看门狗,再进行外设初始化和启动实时操作系统(rtos),如果中间任何一个外设初始化阻塞,会引起外部看门狗超时导致复位。这样有利于早些发现问题所在。rtos的初始化主要就是初始化任务调度器和必需的一些组件。之后依次进行扩展直接存储器(edma)访问、串口(如uart,spi)访问、can总线访问以及系统定时器(systick)的初始化;
67.s2、mcu任务调度与执行。具体步骤如下:
68.s21、执行主循环任务。此步骤主要处理网络管理(nm)、诊断处理(diag)还有其他的业务逻辑。其调度周期为10ms,任务优先级为1级;
69.s22、处理can总线的接收发送任务。此步骤主要处理can数据的发送、接收和can总线bus off的相关处理(bus off是can总线关闭状态,出现bus off证明can总线有问题,需要做故障处理)。其调度周期为10ms,任务优先级为2级;
70.s23、执行串口通信任务。此步骤主要处理mcu和opencpu(4g模组)之间串口通讯协议,还有uart/spi的一些保护任务。其调度周期为10ms,任务优先级为3级;
71.s24、执行指示灯任务。此步骤主要处理电源指示灯,gps(全球定位系统)指示灯,lte(4g网络网络模块)指示灯控制的相关逻辑。其调度周期为50ms,任务优先级为4级;
72.s25、监控堆栈任务。此步骤主要用于监控各个任务的堆栈是否有问题,使堆栈使用率控制在70%的最佳值的一定范围(如最佳值
±
最佳值
×
10%)。其调度周期为50ms,任务优先级为5级;
73.s26、处理空闲任务。此步骤主要进行内部看门狗和外部看门狗的喂狗操作、mcu的应用程序(app)区域完整性校验,还有在休眠时执行休眠流程。其调度周期为50ms,任务优先级为6级;
74.s3、mcu进入休眠。此步骤具体包括如下步骤:
75.s31、关闭mcu的串口。具体来说,清除mcu的串口中断,禁止mcu的串口模块;
76.s32、关闭can总线连接的收发器;
77.s33、关闭mcu的io引脚。即将io引脚配置为相应的输入输出及相关的高低电平;
78.s34、禁止mcu的定时器运行;
79.s35、配置mcu的唤醒引脚。即将相关的io引脚配置为具有上升沿或者下降沿唤醒;
80.s36、关闭mcu的外部看门狗和内部看门狗;
81.s37、进入休眠状态。汽车kl15(汽车启动电源acc)下电后,即acc off,各个零部件协同进行网络管理休眠;
82.s4、休眠结束返回步骤s2。休眠结束的条件是mcu接收到唤醒信号,唤醒方式包括accon(启动电源唤醒)、报文唤醒、rtc唤醒以及4g远程控制信号唤醒。
83.进一步地,步骤s25包括如下步骤:
84.s251、将任务的堆栈区域全部初始化为0xaa。该堆栈区域为mcu的ram区域;
85.s252、每隔1s进行一次堆栈检测;检测时,从堆栈的尾部往前检测,直到第一个值不等于0xaa为止;
86.s253、计算堆栈使用比率。具体地,堆栈使用比率的计算公式r为:
87.r=(stack_used-stack_start)/(stack_end-stack_start)
×
100%;
88.其中,stack_used为第一个值不等于0xaa的位置号,stack_start为堆栈的开始位置号,stack_end为堆栈的结束位置号,位置号均采用十六进制表示。
89.此步骤中,当计算堆栈使用比率超过77%或低于63%时,堆栈存在问题,mcu将会进行进度调整,一般情况下,采用本发明的任务划分方法不会出现超过77%或低于63%的情况。
90.更进一步,本实施例的基于threadx的提升车载终端系统稳定性的方法还包括通过电源对汽车tbox进行休眠与唤醒,其步骤如下:
91.s51、汽车tbox进入深度睡眠。具体地,汽车tbox处于深度睡眠状态时,输入电流为1ma,输入电压为12v。一般地,0~7天内为浅睡眠,4g模块远程可以唤醒,7天后进入深睡眠,4g模块不能够远程唤醒;
92.s52、can总线运行、深度睡眠时间结束、can总线收到电源唤醒信号中是否有至少一个条件成立;如是,则执行步骤s53;否则,返回步骤s51;
93.s53、汽车tbox唤醒,can总线执行接收发送任务。本实施例中,汽车tbox处于唤醒状态时,输入电流为250ma,输入电压为12v;
94.s54、汽车的ign是否处于off档位,且can网络是否进入休眠条件;如是,执行步骤s55;否则,返回步骤s53。需说明的是,can网络是否进入休眠条件指can总线没有收到点火信号(kl15 on或acc on)、唤醒报文、rct唤醒信号或4g远程控制信号。can网络指与can总线连接的相关设备;
95.s55、汽车tbox休眠。本实施中,汽车tbox处于休眠状态时,输入电流为3ma,输入电压为12v;
96.s56、本次休眠距离上次唤醒(在此不含rtc唤醒)的时长是否已达预定时间(如7天);如是,返回步骤s51;否则,执行步骤s57;
97.s57、收到sms短信唤醒信号、can总线运行、睡眠时间结束、收到电源唤醒信号中是否有至少一个条件成立;如是,返回步骤s53;否则,返回步骤s55。
98.再者,本实施例的基于threadx的提升车载终端系统稳定性的方法,还包括对mcu的应用程序(app)进行完整性检测,其步骤为:
99.s61、bootloader在应用程序启动或升级后的第一次启动时,对应用程序的整个区域进行crc32值统计。需说明的是bootloader是应用程序运行前执行的一段固化在mcu中的代码程序。该代码用于更新mcu的应用程序(app),具体步骤为:
100.s611、在应用程序整个区域中,每隔1s读取1k数据进行crc32校验,并统计crc32值,该校验值作为下1k数据crc32校验的初始值;
101.s612、持续上述步骤s611,直到读取完应用程序整个区域中的数据,并记录最后一个crc32校验值。
102.s62、mcu在应用程序上电或一次休眠唤醒后,进行一次完整性检测。该步骤具体包括:
103.s621、在应用程序整个区域中,每隔1s读取1k数据进行crc32校验,并统计crc32值,该校验值作为下1k数据crc32校验的初始值;
104.s622、持续上述步骤s621,直到读取完应用程序整个区域中的数据,并记录最后一个crc32校验值;
105.s63、mcu计算的crc32与bootloader计算的crc32是否一致;如是,执行步骤s64;否则,执行步骤s65;
106.s64、应用程序完整。此步骤中不做任何处理,应用程序自动执行相应任务;
107.s65、做故障处理。故障处理包括故障记录,故障上报,重启程序相关处理措施。
108.综上所述,本实施例采用threadx系统开发用于提升车载终端系统稳定性的应用程序。嵌入在mcu中,提升了mcu的任务规划与优先处理能力,有效监控和提升堆栈的利用效率,使得其使用率保持在70%的合理范围。因而使得车载终端系统任务划分更为明确,资源管理更为紧凑,稳定性和安全性得到进一步提升。
109.以上所述仅为本发明的较佳实施例而已,本领域技术人员知悉,在不脱离本发明的精神和范围的情况下,可以对这些特征和实施例进行各种改变或等同替换。另外,在本发明的教导下,可以对这些特征和实施例进行修改以适应具体的情况及材料而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本技术的权利要求范围内的实施例都属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献