CN116841626B - 一种指令下发方法、设备及存储介质 - Google Patents

一种指令下发方法、设备及存储介质 Download PDF

Info

Publication number
CN116841626B
CN116841626B CN202310664807.4A CN202310664807A CN116841626B CN 116841626 B CN116841626 B CN 116841626B CN 202310664807 A CN202310664807 A CN 202310664807A CN 116841626 B CN116841626 B CN 116841626B
Authority
CN
China
Prior art keywords
timer
vehicle control
data
frame
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310664807.4A
Other languages
English (en)
Other versions
CN116841626A (zh
Inventor
高伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Pateo Connect Nanjing Co Ltd
Original Assignee
Pateo Connect Nanjing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Pateo Connect Nanjing Co Ltd filed Critical Pateo Connect Nanjing Co Ltd
Priority to CN202310664807.4A priority Critical patent/CN116841626B/zh
Publication of CN116841626A publication Critical patent/CN116841626A/zh
Application granted granted Critical
Publication of CN116841626B publication Critical patent/CN116841626B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/042Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
    • G05B19/0423Input/output
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4418Suspend and resume; Hibernate and awake

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Automation & Control Theory (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本申请实施例公开了一种指令下发方法、设备及存储介质,涉及车联网技术领域。其中,方法包括:在同一帧周期内接收多个车控指令,其中,所述车控指令具有相同帧标识;根据各个车控指令的接收时间,利用数据锁将所述各个车控指令逐条存储到数据缓存区;获得是否向处于休眠状态的计时器注册所述帧标识的注册结果,并根据所述注册结果,唤醒所述计时器;以所述帧标识对应的所述帧周期为时间间隔,周期性地通过所述计时器触发回调函数,利用所述回调函数向微控制单元下发所述数据缓存区缓存的所述帧标识对应的所有车控指令。

Description

一种指令下发方法、设备及存储介质
技术领域
本申请涉及但不限于汽车电子领域,尤其涉及一种指令下发方法、设备及存储介质。
背景技术
在对车辆的控制过程中,当同一进程在同一帧周期内连续调用设置属性接口,或不同进程同时调用设置属性接口,设置同一帧标识(Controller Area Network Identitydocument,canID)上的属性值时,将车控指令发送给车控服务端VehicleHal;然后,车控服务端VehicleHal将同一进程的车控指令进行封装,调用缓冲串行口(Buffered SerialPort,bsp),将封装后的车控指令下发至微控制单元(Microcontroller Unit,MCU)。然而,由于MCU在短时间内接收到多个车控指令,车控指令会发生指令覆盖或指令冲掉,从而导致数据丢失的问题。
发明内容
本发明一个目的在于至少提供一种指令下发方法,其优势在于,在同一帧周期内接收多个车控指令,其中,车控指令具有相同帧标识;根据各个车控指令的接收时间,利用数据锁将各个车控指令逐条存储到数据缓存区;获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器;以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数,利用回调函数向微控制单元下发数据缓存区缓存的帧标识对应的所有车控指令;由上述可知,本申请实施例利用数据锁将设置在同一个帧标识上的多个车控指令缓存至数据缓存区,并引用计时器,获得是否向计时器中注册帧标识的注册结果,从而根据注册结果,通过不同的唤醒方式唤醒计时器;进一步地,利用计时器以帧周期为间隔触发的回调函数,将数据缓存区缓存的帧标识对应的所有车控指令同时下发至微控制单元,如此,解决了相关技术鸿蒙平台中,在can网络上设置在同一个帧标识的多个车控指令先后发送,后来的指令冲掉上一条指令,导致数据丢失的问题,实现了在一个帧周期内将一个或多个车控指令同时成功下发;进一步地,既可以保证指令下发的有序性,也规避了在大量指令下发时,指令丢失导致指令下发失败的问题。
为实现上述目的,本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供一种指令下发方法,所述方法包括:
在同一帧周期内接收多个车控指令,其中,所述车控指令具有相同帧标识;
根据各个车控指令的接收时间,利用数据锁将所述各个车控指令逐条存储到数据缓存区;
获得是否向处于休眠状态的计时器注册所述帧标识的注册结果,并根据所述注册结果,唤醒所述计时器;
以所述帧标识对应的所述帧周期为时间间隔,周期性地通过所述计时器触发回调函数,利用所述回调函数向微控制单元下发所述数据缓存区缓存的所述帧标识对应的所有车控指令。
第二方面,本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
第三方面,本申请实施例提供一种存储介质,所述存储介质存储有一个或者多个计算机程序,一个或者多个计算机程序可被一个或者多个处理器执行,以实现上述方法中的部分或全部步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请的技术方案。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。
图1为相关技术中提供的一种可选的指令下发方法的界面示意图;
图2为本申请实施例提供的一种可选的指令下发方法的流程示意图;
图3为本申请实施例提供的一种可选的指令下发方法的流程示意图;
图4为本申请实施例提供的一种可选的指令下发方法的流程示意图;
图5为本申请实施例提供的一种计算机设备的硬件实体示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图和实施例对本申请的技术方案进一步详细阐述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。所涉及的术语“第一/第二/第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一/第二/第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请的目的,不是旨在限制本申请。
在介绍本申请实施例提供一种指令下发方法,对相关技术中指令下发的方法进行说明。参见图1,图1为相关技术中指令下发过程的流程示意图,在安装有鸿蒙系统的车机系统在对车辆的控制过程中,在一个帧周期T内,进程A调用单指令设置属性setProperty接口将空调开关指令下发至VehicleHal,进程B连续两次调用setProperty接口将空调开关指令和空调风量调节指令逐次下发至VehicleHal;进一步地,VehicleHal将进程A的空调开关指令封入64字节数据中,将进程B的空调开关指令和空调风量调节指令分别封入不同的64字节数据中;之后,VehicleHal调用bsp接口利用数据通道,将字节数据下发至MCU。由于MCU在短时间内接收到多个车控指令,导致进程B的车控指令将进行A的车控指令冲掉,进程B的空调风量调节指令覆盖进程B的空调开关指令,从而导致指令丢失的问题。
本申请实施例提供一种指令下发方法,该方法可以由计算机设备的处理器执行。其中,计算机设备指的可以是服务器、笔记本电脑、平板电脑、台式计算机、智能电视、机顶盒、移动设备(例如移动电话、便携式视频播放器、个人数字助理、专用消息设备、便携式游戏设备)等具备数据处理能力的设备。在一些实施例中,该计算机设备可以为车载终端设备。其中,该车载终端设备可以为部署于车辆的终端设备,该终端设备与车辆通信连接,可以独立于车辆使用,也可以集成在车辆控制系统中,示例性地,车载终端设备可以为车载服务设备如车控硬件抽象层端VehicleHal。本申请对计算机设备不作具体限定。
参照图2,图2为本申请实施例提供的一种指令下发方法的实现流程示意图,该方法可以由计算机设备的处理器执行,这里,将结合图2示出的步骤进行说明,
步骤101、在同一帧周期内接收多个车控指令。
其中,车控指令具有相同帧标识。
本申请实施例中,帧周期为MCU向控制器局域网(Controller Area Network,CAN)发送携带有帧标识的can数据报文的时间间隔,其中,can数据报文中携带有车控指令消息。
本申请实施例中,帧标识为用于表示can数据报文所携带的消息的内容种类的标识信息,帧标识可以用canid表示。这里,不同帧标识对应的can数据报文所携带的消息的内容种类不同,如canid为0x2D2,对应空调指令消息,canid为0x4E0,对应车速消息,canid为0x100,对应刹车指令消息;另外,相同帧标识对应的can数据报文所携带的消息的内容种类相同,且相同帧标识对应的can数据报文可以包括多个消息,如canid为0x2D2时,对应空调的消息包括:空调开关指令、也可以是空调风量调节指令,还可以是空调温度调节指令。需要说明的是,不同帧标识对应的帧周期不同,如canid为0x2D2对应的帧周期为120毫秒(Millisecond,ms)。
这里,帧标识canid一般被分为车辆控制和诊断信息两种。通常,车辆控制的canid分布在0x000~0x6FF之间,而诊断信息分布在0x700~0x7FF之间。需要说明的是,由于多条消息可能同时出现在can总线上,CAN根据canid大小制定了优先级,canid越小,优先级越高,如此,从而保障了重要信息,如车辆控制消息的优先传输。
在实际应用中,整车CAN总线是汽车域间通信的重要数据通路,承担着汽车内部各种电子控制单元(Electronic Control Unit,ECU)的运作职责。通常在CAN总线上会有一个专门的单片机做路由,将各种can数据报文解析分发到对手端,比如座舱车辆接口单元(Vehicle interface unit,VIU)、车控VIU、车机内空调、车辆设置、场景模式等众多应用根据解析过的can数据报文获取到所需要的车控指令信息,或是将自身的消息包装成can数据报文下发。
本申请实施例中,在同一帧周期内接收多个车控指令可以理解为,在同一帧周期内,计算机设备中的车控服务硬件抽象层接收到进程设置在帧标识上的多个车控指令。这里,基于安卓(Android)平台原生能力,进程通过调用设置属性接口,将车控指令下发至计算机设备中的车机服务端;这里,设置属性接口包括设置单属性接口即setProperty和设置多属性接口setMultipleProperty,其中,设置属性接口用于传递车身属性标识propid、车身域areaId,以及对应的属性值val。示例性地,进程通过调用设置单属性接口setProperty(propid,areaId,val)将车窗开合度指令下发到VehicleHal,其中,propid为车窗标识,areaId为位于左前门车窗的标识,val为车窗的开合度为50%。
在一种可能实现的场景中,有两个应用进程ClinetA和ClienB,进程ClientA准备设置0x2D2上的空调开关属性和空调风量属性,进程ClientB准备设置空调风量和空调温度属性,进程ClientA先触发,ClientA通过调用两次setProperty接口,将空调开关指令和空调风量指令在同一帧周期内即先后下发到了车控服务硬件抽象层VehicleHal,从而计算机设备的车控服务硬件抽象层VehicleHal先后接收到进程ClientA下发的设置空调开关指令和空调风量指令。
步骤102、根据各个车控指令的接收时间,利用数据锁将各个车控指令逐条存储到数据缓存区。
本申请实施例中,数据锁用于对数据缓存区进行上锁。
本申请实施例中,由于进程调用设置属性接口的时间不同,故计算机设备的车控服务硬件抽象层接收到进程发送的设置车控指令的接收时间和/或接收顺序也就不同;进一步地,计算机设备的车控服务硬件抽象层根据各个车控指令的接收时间和/或接收顺序,利用数据锁将各个车控指令逐条存储到数据缓存区。需要说明的是,数据缓存区可以用于存储所有帧标识对应的车控指令,数据缓存区也可以用于仅存储预设帧标识对应的车控指令,对此本申请不做具体限制。
步骤103、获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器。
本申请实施例中,在车机系统启动后,计算机设备初始化并启动计时器mFrameTimer,此时,由于计时器中并未存储有效数据,因此计时器会进入休眠状态。同时,计时器提供注册接口和反注册接口,以便车控硬件抽象层VehicleHal有计时需求时,通过注册接口向计时器中注册帧标识canid,以及帧标识对应的帧周期;当VehicelHal没有需要下发的帧标识对应的车控指令时,通过反注册接口注销掉对应的帧标识canid。
本申请实施例中,向处于休眠状态的计时器注册帧标识可以理解为,通过注册接口,向计时器的事件映射数组mCookieToEventsMap中写入帧标识canid、帧标识对应的帧周期interval,以及帧标识对应的用于再次唤醒计时器的唤醒时间absoluteTime。
本申请实施例中,注册结果包括:未向处于休眠状态的计时器注册帧标识,以及已向处于休眠状态的计时器注册帧标识。
本申请实施例中,计算机设备根据各个车控指令的接收时间,利用数据锁将各个车控指令逐条存储到数据缓存区,进一步地,获得是否向处于休眠状态的计时器注册帧标识的注册结果,进而根据注册结果,唤醒计时器。
在一些实施例中,根据注册结果,唤醒计时器可以通过如下过程实现,
若注册结果表征未向处于休眠状态的计时器注册帧标识,通过注册接口将帧标识、帧周期和唤醒时间存储到计时器中,并设置唤醒时间为获得的第一当前时间,立刻唤醒计时器。
本申请实施例中,计算机设备确定注册结果为未向处于休眠状态的计时器注册帧标识,此时,计算机设备通过注册接口,向计时器的事件映射数组中写入帧标识、帧标识对应的帧周期,以及帧标识对应的用于再次唤醒计时器的唤醒时间;进一步地,将帧标识对应的用于再次唤醒计时器的唤醒时间设置为第一当前时间now,从而立刻唤醒计时器;如此,在第一次向计时器注册帧标识时,将计时器的唤醒时间设置为当前时刻,立刻唤醒计时器,以便到达触发时间,能够及时触发回调函数,将车控指令进行下发,保证了数据的及时性。
若注册结果表征已向处于休眠状态的计时器注册帧标识,每存储一条车控指令至数据缓存区,设置唤醒时间为第二当前时间,立刻唤醒计时器。
本申请实施例中,计算机设备确定注册结果为已向处于休眠状态的计时器注册帧标识,此时,每利用数据锁向数据缓存区存储一条车控指令后,将帧标识对应的用于再次唤醒计时器的唤醒时间设置为第二当前时间now,从而立刻唤醒计时器。需要说明的是,第一当前时间和第二当前时间表征不同的时刻。如此,在已向计时器注册有帧标识的情况下,每向数据缓存区存储一条车控指令,均将计时器的唤醒时间设置为当前时刻,立刻唤醒计时器,以便到达触发时间,能够及时触发回调函数,将车控指令进行下发,保证了数据的及时性。
在一种可实现场景中,以帧标识为0x2D2、帧周期为120ms为例进行说明,在计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientA下发的第一条设置空调开关指令之后,计算机设备立刻请求数据锁mDataLock,将空调开关指令存入到帧标识对应的数据缓存区mTxBuffer0x2D2或公共数据缓存区中,解锁数据锁mDataLoc;然后,计算机设备通过注册接口,向计时器mFrameTimer中注册0x2D2,即帧计时器mFrameTimer将帧标识为0x2D2、帧周期为120ms,以及帧标识对应的用于再次唤醒计时器的唤醒时间存入到计时器的mCookieToEventsMap中,并设置唤醒时间为第一当前时间now,从而立刻唤醒计时器。
进一步地,在计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientA下发的第二条空调风量指令之后,在向计时器mFrameTimer注册0x2D2时,确定0x2D2已经注册过,此时,计算机设备设置0x2D2对应的用于再次唤醒计时器的唤醒时间设置为第二当前时间now,从而立刻唤醒计时器。
步骤104、以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数,利用回调函数向微控制单元下发数据缓存区缓存的帧标识对应的所有车控指令。
本申请实施例中,回调函数用于向微控制单元发送车控指令,示例性地,回调函数可以是send函数。
本申请实施例中,计算机设备获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器;进一步地,计算机设备以帧标识对应的帧周期为时间间隔,确定触发时间,周期性地通过计时器在触发时间触发回调函数;然后,在回调函数触发后,计算机设备利用数据锁,读取数据缓存区中缓存的帧标识对应的所有车控指令,并通过回调函数将读取的所有车控指令下发至微控制单元中,进而下发到can网络,从而使得车辆受控部件根据帧标识,从can网络上获取对应的车控指令并执行。
本申请实施例提供一种指令下发方法,在同一帧周期内接收多个车控指令,其中,车控指令具有相同帧标识;根据各个车控指令的接收时间,利用数据锁将各个车控指令逐条存储到数据缓存区;获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器;以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数,利用回调函数向微控制单元下发数据缓存区缓存的帧标识对应的所有车控指令;由上述可知,本申请实施例利用数据锁将设置在同一个帧标识上的多个车控指令缓存至数据缓存区,并引用计时器,获得是否向计时器中注册帧标识的注册结果,从而根据注册结果,通过不同的唤醒方式唤醒计时器;进一步地,利用计时器以帧周期为间隔触发的回调函数,将数据缓存区缓存的帧标识对应的所有车控指令同时下发至微控制单元,如此,解决了相关技术鸿蒙平台中,在can网络上设置在同一个帧标识的多个车控指令先后发送,后来的指令冲掉上一条指令,导致数据丢失的问题,实现了在一个帧周期内将一个或多个车控指令同时成功下发,提高了指令下发效率,同时既可以保证指令下发的有序性,也规避了在大量指令下发时,指令丢失导致指令下发失败的问题。
在一些实施例中,计算机设备周期性地通过计时器触发回调函数之后,休眠计时器;如此,在计时器触发回调函数之后,可以让计时器进入休眠状态,从而降低设备的能源消耗。
在一些实施例中,步骤104中以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数的过程可以通过如下过程实现:
获得第三当前时间;
若唤醒计时器的唤醒时间与第三当前时间之间满足预设大小关系,以第三当前时间为起点,以帧周期为时间间隔,确定回调函数的多个触发时间,通过计时器在多个触发时间触发回调函数。
本申请实施例中,第三当前时间指的是向处于休眠状态的计时器注册帧标识第一次唤醒计时器之后,得到的当前时间。
本申请实施例中,唤醒计时器的唤醒时间为向处于休眠状态的计时器注册帧标识之后,第一次唤醒计时器的时间。
本申请实施例中,唤醒计时器的唤醒时间与第三当前时间之间满足预设大小关系可以理解为:第一次唤醒计时器的时间小于第三当前时间。
本申请实施例中,触发时间为以第三当前时间为起点,以帧标识对应的帧周期为时间间隔,得到的多个时间。
在一种可实现场景中,仍以帧标识为0x2D2、帧周期为120ms为例进行说明,在计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientA下发的第一条设置空调开关指令的情况下,若计算机设备唤醒计时器,计时器读取mCookieToEventsMap存储的帧标识和帧周期;由于当前mCookieToEventsMap中仅有0x2D2这一条数据,且唤醒计时器的唤醒时间小于第三当前时间,此时,确定第三当前时间为当前触发时间,计算机设备在当前触发时间通过计时器触发一次回调函数;进一步地,计算机设备以第三当前时间为起点,以帧周期为时间间隔,确定触发回调函数的多个触发时间,以便计时器在每一触发时间通过计时器再次触发回调函数,此后,每当计时器触发回调函数之后,当前计时器立刻进入休眠状态。如此,计算机设备以第三当前时间为起点,以帧周期为时间间隔,通过一次设置,确定回调函数的多个触发时间,无需多次设置触发时间;同时,在计时器每次触发回调函数之后,计时器可立即进入休眠。
当然,在确定第三当前时间为当前触发时间,计算机设备在当前触发时间通过计时器触发一次回调函数的情况下,还可以以第三当前时间为起点,以帧周期为时间间隔,确定触发回调函数的下一触发时间,以便计时器在下一触发时间通过计时器触发回调函数,当前计时器立刻进入休眠状态;进一步地,计算机设备在下一触发时间通过计时器再次触发一次回调函数,并以当前触发时间为起点,以帧周期为时间间隔,确定触发回调函数的下一触发时间,以便计时器在下一触发时间通过计时器触发回调函数,当前计时器立刻进入休眠状态。如此,计算机设备每通过计时器触发一次回调函数,以当前时间为起点,以帧周期为时间间隔,确定回调函数的下次触发时间,之后计时器进入休眠状态。
在一些实施例中,为了快速获取帧标识对应的车控指令,计算机设备预先为帧标识分配对应的数据缓存区,用于存储帧标识对应的车控指令,为帧标识对应的数据缓存区设置状态参数,以及预先设计好计时器。参照图3,图3为本申请实施例提供的一种指令下发方法的实现流程示意图,该方法可以由计算机设备的处理器执行,这里,将结合图3示出的步骤进行说明,
步骤201、在车机系统启动后,计算机设备初始化帧标识对应的数据缓存区、数据缓存区对应的状态参数的参数值为第一参数值,以及初始化并启动计时器。
其中,状态参数用于表征数据缓存区存储的数据是否有效。
本申请实施例中,帧标识对应的数据缓存区用于缓存帧标识对应的车控指令。
本申请实施例中,状态参数的第一参数值用于表征帧标识对应的数据缓存区缓存的数据无效。
本申请实施例中,在车机系统启动后,计算机设备初始化所有帧标识对应的数据缓存区mTxBuffer,初始化状态参数mTxBufferStatus,初始化并启动计时器mFrameTimer,此时,由于计时器中并未存储有效数据,因此计时器会进入休眠状态。同时,计时器提供注册接口和反注册接口,以便车控硬件抽象层VehicleHal有计时需求时,通过注册接口向计时器中注册帧标识canid,以及帧标识对应的帧周期;当VehicelHal没有需要下发的帧标识对应的车控指令时,通过反注册接口注销掉对应的帧标识canid。
步骤202、在同一帧周期内接收多个车控指令。
其中,车控指令具有相同帧标识。
步骤203、根据接收时间,利用数据锁将各个车控指令逐条存储到帧标识对应的数据缓存区。
步骤204、更新状态参数,将第一参数值更新为第二参数值,确定数据缓存区缓存的数据有效。
本申请实施例中,状态参数的第二参数值用于表征帧标识对应的数据缓存区缓存的数据有效。
本申请实施例中,由于进程调用设置属性接口的时间不同,故计算机设备的车控服务硬件抽象层接收到进程发送的设置车控指令的接收时间和/或接收顺序也就不同;进一步地,计算机设备的车控服务硬件抽象层根据各个车控指令的接收时间和/或接收顺序,利用数据锁将各个车控指令逐条存储到帧标识对应的数据缓存区中;进一步地,计算机设备更新帧标识对应的数据缓存区的状态参数,将状态参数从第一参数值更新为第二参数值,从而确定帧标识对应的数据缓存区缓存的数据有效。
步骤205、获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器。
步骤206、以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数,在数据缓存区存储有车控指令,且状态参数的参数值为第二参数值的情况下,利用回调函数向微控制单元下发帧标识对应的数据缓存区缓存的所有车控指令。
本申请实施例中,计算机设备获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器之后,以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数;进一步地,计算机设备确定数据缓存区存储有车控指令,且状态参数的参数值为第二参数值,即表征数据缓存区缓存的车控指令有效。此时,计算机设备利用数据锁,读取帧标识对应的数据缓存区中缓存的所有车控指令,并通过回调函数将读取的所有车控指令下发至微控制单元中,进而下发到can网络,从而使得车辆受控部件根据帧标识,从can网络上获取对应的车控指令并执行。
步骤207、删除帧标识对应的数据缓存区中的车控指令。
步骤208、重置状态参数,将第二参数值更新为第一参数值,确定数据缓存区存储的数据无效。
本申请实施例中,由于帧标识对应的数据缓存区中缓存的所有车控指令已经下发至微控制单元,此时可以删除帧标识对应的数据缓存区中的车控指令,避免已经下发的车控指令占用数据缓存区中的存储空间。进一步地,重置帧标识对应的数据缓存区的状态参数,将状态参数第二参数值更新为第一参数值,从而确定数据缓存区存储的数据无效。
步骤209、在同一帧周期内未接收到车控指令的情况下,若计时器触发回调函数,确定数据缓存区是否包含有帧标识对应的车控指令的第一确定结果;若第一确定结果表征数据缓存区不包含车控指令,注销计时器中的帧标识,休眠计时器线程;和/或在同一帧周期内未接收到车控指令的情况下,若计时器触发回调函数,确定数据缓存区对应的状态参数的参数值是否为第一参数值的第二确定结果;若第二确定结果表征状态参数的参数值为第一参数值,注销计时器中的帧标识,休眠计时器线程。
本申请实施例中,若计算机设备在同一帧周期内未接收到车控指令,待到达触发时间,计时器触发回调函数,计算机设备判断所有数据缓存区是否包括车控指令,若确定所有数据缓存区均不包括车控指令,此时通过计时器的反注册接口,注销计时器中的帧标识;另外,当计时器中的mCookieToEventsMap未存储有任何帧标识时,休眠计时器线程。
本申请实施例中,若计算机设备在同一帧周期内未接收到车控指令,待到达触发时间,计时器触发回调函数,计算机设备判断帧标识对应的数据缓存区的状态参数的参数值是否为第一参数值;若确定状态参数的参数值为第一参数值,注销计时器中的帧标识;另外,当计时器中的mCookieToEventsMap未存储有任何帧标识时,休眠计时器线程。
由上述可知,本申请实施例预先设置帧标识对应的数据缓存区,以及帧标识对应的数据缓存区的状态参数,基于状态参数的参数值,确定帧标识对应的数据缓存区中存储的车控指令的有效性;在帧标识对应的数据缓存区中存储的车控指令有效的情况下,引用计时器,利用计时器以帧周期为间隔触发的回调函数,将数据缓存区缓存的帧标识对应的所有车控指令同时下发至微控制单元,如此,解决了相关技术鸿蒙平台中,在can网络上设置在同一个帧标识的多个车控指令先后发送,后来的指令冲掉上一条指令,导致数据丢失的问题,实现了在一个帧周期内将一个或多个车控指令同时成功下发;进一步地,既可以保证指令下发的有序性,也规避了在大量指令下发时,指令丢失导致指令下发失败的问题。
在一种可实现场景中,仍以帧标识为0x2D2、帧周期为120ms为例进行说明,在计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientA下发的第一条设置空调开关指令的情况下,利用数据锁,将空调开关指令存储到0x2D2对应的数据缓存区中,并将0x2D2对应的数据缓存区的状态参数设置为第二参数值1。其次,计算机设备通过注册接口,向计时器中注册0x2D2,即帧计时器将帧标识为0x2D2、帧周期为120ms,以及帧标识对应的用于再次唤醒计时器的唤醒时间存入到计时器的事件映射数组中,并设置唤醒时间为当前时间now,从而立刻唤醒计时器。然后,计时器唤醒后,读取事件映射数组中帧标识0x2D2和帧周期,由于当前事件映射数组中仅有0x2D2这一条数据,且唤醒时间小于当前时间,此时确定当前时间为触发时间,因此计时器会立刻触发一次回调函数,并将0x2D2的下次触发时间设置为120ms(一个帧周期)之后,当前计时器进入休眠状态。进一步地,计算机设备读取数据缓存区缓存的空调开关指令,利用回调函数将该空调开关指令下发到mcu中,下发后重置状态参数,清空0x2D2对应的数据缓存区。
进一步地,计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientA下发的第二条设置空调风量指令,将该空调风量指令利用数据锁存储到数据缓存区,计时器注册0x2D2时,会确定0x2D2已经注册过,因此仅会唤醒计时器,但由于0x2D2的下次触发时间为120ms后,因此此次唤醒并不会触发回调函数。
进一步地,计算机设备的车控服务硬件抽象层VehicleHal接收到进程ClientB下发的第一条设置空调风量指令/第二条设置空调温度指令,同样利用数据锁将该两条指令存储到数据缓存区中;然后,在到达触发时间120ms后,计时器读取事件映射数组中帧标识0x2D2和帧周期,由于当前事件映射数组中仅有0x2D2这一条数据,且触发时间到了,因此计时器会立刻触发一次回调函数,并将0x2D2的下次触发时间设置为120ms(一个帧周期)之后,当前计时器进入休眠状态。进一步地,计算机设备读取数据缓存区缓存的空调风量指令,空调风量指令和空调温度指令,并对三条指令进行整合,利用回调函数将整合后的指令下发到mcu中,下发后重置状态参数,清空0x2D2对应的数据缓存区。
最后,计算机设备后续未接收到指令,待120ms后,0x2D2计时器触发回调函数后,确定帧标识对应的数据缓存区的状态参数为第一参数值0,数据缓存区中都没有有效值,则帧计时器注销帧标识0x2D2,同时休眠帧计时器线程。
下面,对本申请实施例提供的指令下发方法作进一步说明。
在对车辆控制的过程中,由于车载系统的应用端加入动画,当用户点击某个按钮时候,会涉及到应用按钮模块和动画模块,这两个模块均会通过车辆属性管理CarPropertyManager的set接口设置车控属性值,这样短时间内触发设置同一canid数据,得到多个车控指令,多个车控指令会在MCU处发生数据覆盖。需要说明的是,应用按钮模块并未调用多个属性setMultipleProperty接口对多个车控指令进行数据整合。
进一步地,即使应用端调用setMultipleProperty接口,将多个车控指令组合到一起下发到车控VehicleHal;然而,当出现ClientA和ClientB两个进程同时调用setMultipleProperty接口,设置同一个canid上的属性值时,多个整合后的车控指令仍会在MCU处发生数据覆盖。
另外,mcu和bsp之间的通道不支持数据频繁的下发,若VehicleHal短时间内大量下发车控指令,会导致数据丢失或者通道阻塞的问题。
这里,以用户场景对上述问题进行说明,
场景一,应用层想要通过多次调用单个指令的set接口,来完成类似情景模式的需求,比如想要连续调用set(空调开关),set(空调风量),set(空调温度)接口,且不使用setMultipleProperty(空调开关,空调风量,空调温度)多指令接口对指令进行整合,将设置数据下发到can网络,从而出现数据覆盖的情况。
场景二,后台进程和前台进程同时设置相同canid上的消息时,在mcu侧发生数据覆盖,导致没有成功下发到can网络。例如:前台空调设置了空调开关,空调风量,后台进程设置了空调风量和空调温度,则在mcu侧并不能将两个进程设置的数据都下发成功,mcu会根据帧周期内的设置指令到达的时间来做筛选,移除掉先来的设置指令,从而导致数据丢失的问题。
本申请实施例提供的指令下发方法中,参照图4所示,以ClinetA和ClienB两个进程设置canid为0x2D2上的属性为例进行说明,在同一帧周期120ms内,ClientA准备设置canid为0x2D2上的空调开关属性和空调风量属性,ClientB准备设置canid为0x2D2上的空调风量属性和空调温度属性。
步骤401,ClientA进程先触发;ClientA在第一时间T1通过调用两次setProperty接口,将空调开关指令和空调风量指令如下发到了VehicleHal。
步骤402,VehicleHal接收ClientA的设置空调开关指令。
步骤403,立刻请求数据锁mDataLock,将空调开关指令的数据存入到canid为0x2D2对应的数据缓存区mTxBuffer0x2D2中,并统计存储在数据缓存区mTxBuffer0x2D2车控指令的数量2D2Count,解锁mDataLock,将数据缓存区对应的状态参数mTxBufferStatus的bit0位置数据设置为1,并向计时器mFrameTimer中注册0x2D2。
其中,数据锁mDataLock用于对数据缓存区进行上锁。
需要说明的是,在各个进程启动时,VehicleHal初始化各个canid对应的数据缓存区,初始化数据缓存区对应的状态参数,以及初始化并启动计时器mFrameTimer。
这里,VehicleHal初始化mTxBuffer0x2D2数据缓存区,当然,还同时初始化其他canid的数据缓存区txbuffer。
这里,初始化数据缓存区对应的状态参数mTxBufferStatus,该状态参数表示数据缓存区是含有有效数据的标志位,其中,bit0表示0x2D2,bit1-31表示其他canid的有效数据标志位,其中,当canid对应的标志位bit为0时,表征该canid对应的数据缓存区不包含有效数据,当canid对应的标志位bit为1时,表征该canid对应的数据缓存区包含有效数据。
这里,初始化并启动计时器mFrameTimer,由于此时计时器中并没有有效数据,故计时器进入休眠状态,该计时器提供注册帧标识接口和反注册帧标识接口。当VehicleHal有计时需求的时候,通过注册帧标识接口向计时器中注册canid、帧周期以及计时器的下次唤醒时间,当VehicelHal没有需要下发的设置在canid上的指令时,通过反注册帧标识接口注销计时器中注册的canid、帧周期以及计时器的下次唤醒时间。
这里,VehicleHal还可对存储到帧标识对应的数据缓存区中的车控指令的数量count进行统计。
步骤404,判断计时器mFrameTimer中是否已注册0x2D2,若是,则执行步骤405;若否,则执行步骤406。
步骤405,忽略该次注册行为,并打印日志信息log。
步骤406,计时器mFrameTimer将帧标识canid、帧周期interval,以及计时器的下次唤醒时间absoluteTime存入到计时器的事件映射数组mCookieToEventsMap中。
步骤407,在计时器计时到上述下次唤醒时间时,唤醒计时器。
这里,向计时器mFrameTimer中注册0x2D2之后,计时器会将下次唤醒时间设置为当前时间now,即在计时器中注册0x2D2之后,会立刻唤醒计时器。
步骤408,计时器mFrameTimer唤醒后,判断EventsMap是否为空,若是,则执行步骤409,若否,则执行步骤410和/或步骤411。
步骤410,计时器计时,达到触发时间,返回步骤407。
步骤411,计时器读遍历mCookieToEventsMap中的数据,由于当前mCookieToEventsMap中仅有0x2D2这一条数据,若计时器此次的唤醒时间小于当前时间,将当前时间确定为回调函数的触发时间,因此计时器在触发时间立刻触发一次回调函数;进一步地,以此次触发时间为起始时刻,间隔一个帧周期120ms,确定回调函数的下次触发时间;此时,当前计时器进入休眠状态。
步骤412,进入send函数,mDataLock上锁。
这里,在0x2D2对应的触发时间计时器触发回调函数后,VehicleHal请求数据锁mDataLock,读取数据缓存区mTxBuffer0x2D2中的空调开关指令。
步骤413,判断2D2Count是否为0;若是,则执行步骤414,若否,则指令步骤415。
步骤414,取消0x2D2计时器注册。
VehicleHal在未接收到车控指令的情况下,待一个帧周期如120ms后,即0x2D2对应的触发时间计时器触发回调函数后,判断所有数据缓存区对应的状态参数mTxBufferStatus的标志位是否为0,若是,表征VehicleHal中所有canid对应的数据缓存区中都没有有效数据,此时,通过反注册帧标识接口注销计时器mFrameTimer中注册的canid、帧周期以及计时器的下次唤醒时间,同时休眠mFrameTimer线程。
这里,VehicleHal在对帧标识对应的数据缓存区存储的车控指令的数量count进行统计的情况下,若count等于0,表征,暂时未接收到车控指令,此时,通过反注册帧标识接口注销计时器mFrameTimer中注册的canid、帧周期以及计时器的下次唤醒时间,同时休眠mFrameTimer线程。
步骤415,将数据缓存区mTxBuffer0x2D2当前存储的所有车控指令下发到mcu中,下发后VehicleHal重置数据缓存区mTxBuffer0x2D2对应的状态参数mTxBufferStatus标志位,清空数据缓存区mTxBuffer0x2D2中的所有车控指令。
步骤416,退出send函数,解锁mDataLock。
步骤417,VehicleHal接收到ClientA的第二条设置空调风量指令,以及VehicleHal先后接收到ClientB的第一条设置空调风量指令/第二条空调温度指令。
这里,步骤417可以在402之后的任一时刻执行。需要说明的是,在接收到ClientA的第二条设置空调风量指令,以及接收到ClientB的第一条设置空调风量指令/第二条空调温度指令时,由于已向计时器mFrameTimer注册过0x2D2,会发现当前canid已经注册过,此时仅会唤醒计时器,但由于0x2D2的下次触发时间还未到达,因此此次唤醒并不会触发VehicleHal的数据下发函数即回调函数,仅会将ClientA的第二条设置空调风量指令,以及ClientB的第一条设置空调风量指令/第二条空调温度指令存储到数据缓存区mTxBuffer0x2D2中。
在计时器到达0x2D2对应的下次触发时间后,计时器触发回调函数,VehicleHal请求数据锁mDataLock,读取数据缓存区mTxBuffer0x2D2中的空调风量指令、空调风量指令和空调温度指令,将空调风量指令、空调风量指令和空调温度指令同时下发到mcu中,下发后VehicleHal重置数据缓存区mTxBuffer0x2D2对应的状态参数mTxBufferStatus标志位,清空数据缓存区mTxBuffer0x2D2中的空调风量指令、空调风量指令和空调温度指令。
由上述可知,本申请的方法通过引用计时器,解决了鸿蒙平台无法下发多指令的问题,以及解决can网络上同一个canid消息先后发送,后来的消息会冲掉上一条消息的问题;实现了根据不同帧标识,对计时器进行计时,确保车控指令至少能成功下发一帧到can网络;同时,保证了车控指令的设置属性的原子性,不同模块间解耦;进一步地,规避了大量消息下发,数据丢失或存在延时阻塞的问题。
本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
本申请实施例提供一种存储介质,存储介质存储有一个或者多个计算机程序,一个或者多个计算机程序可被一个或者多个处理器执行,以实现上述方法中的部分或全部步骤。所述存储介质可以是瞬时性的,也可以是非瞬时性的。
本申请实施例提供一种计算机程序,包括计算机可读代码,在所述计算机可读代码在计算机设备中运行的情况下,所述计算机设备中的处理器执行用于实现上述方法中的部分或全部步骤。
本申请实施例提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序被计算机读取并执行时,实现上述方法中的部分或全部步骤。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一些实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一些实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
这里需要指出的是:上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考。以上设备、存储介质、计算机程序及计算机程序产品实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请设备、存储介质、计算机程序及计算机程序产品实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
图5为本申请实施例提供的一种计算机设备的硬件实体示意图,如图5所示,该计算机设备5的硬件实体包括:处理器501和存储器502,其中,存储器502存储有可在处理器501上运行的计算机程序,处理器501执行程序时实现如下步骤,
在同一帧周期内接收多个车控指令,其中,车控指令具有相同帧标识;
根据各个车控指令的接收时间,利用数据锁将各个车控指令逐条存储到数据缓存区;
获得是否向处于休眠状态的计时器注册帧标识的注册结果,并根据注册结果,唤醒计时器;
以帧标识对应的帧周期为时间间隔,周期性地通过计时器触发回调函数,利用回调函数向微控制单元下发数据缓存区缓存的帧标识对应的所有车控指令。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
若注册结果表征未向处于休眠状态的计时器注册帧标识,通过注册接口将帧标识、帧周期和唤醒时间存储到计时器中,并设置唤醒时间为获得的第一当前时间,立刻唤醒计时器;若注册结果表征已向处于休眠状态的计时器注册帧标识,每存储一条车控指令至数据缓存区,设置唤醒时间为第二当前时间,立刻唤醒计时器。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
获得第三当前时间;若唤醒计时器的唤醒时间与第三当前时间之间满足预设大小关系,以第三当前时间为起点,以帧周期为时间间隔,确定回调函数的多个触发时间,通过计时器在多个触发时间触发回调函数。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,休眠计时器。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
在车机系统启动后,初始化帧标识对应的数据缓存区、数据缓存区对应的状态参数的参数值为第一参数值,以及初始化并启动计时器;其中,状态参数用于表征数据缓存区缓存的数据是否有效;根据接收时间,利用数据锁将各个车控指令逐条存储到帧标识对应的数据缓存区;更新状态参数,将第一参数值更新为第二参数值,确定数据缓存区缓存的数据有效。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
在数据缓存区存储有车控指令,且状态参数的参数值为第二参数值的情况下,利用回调函数向微控制单元下发帧标识对应的数据缓存区缓存的所有车控指令。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
删除帧标识对应的数据缓存区中的车控指令;重置状态参数,将第二参数值更新为第一参数值,确定数据缓存区存储的数据无效。
在本申请其他实施例中,处理器501执行程序时还可以实现如下步骤,
在同一帧周期内未接收到车控指令的情况下,若计时器触发回调函数,确定数据缓存区是否包含有帧标识对应的车控指令的第一确定结果;若第一确定结果表征数据缓存区不包含车控指令,注销计时器中的帧标识,休眠计时器线程;和/或,在同一帧周期内未接收到车控指令的情况下,若计时器触发回调函数,确定数据缓存区对应的状态参数的参数值是否为第一参数值的第二确定结果;若第二确定结果表征状态参数的参数值为第一参数值,注销计时器中的帧标识,休眠计时器线程。
其中,存储器502存储有可在处理器上运行的计算机程序,存储器502配置为存储由处理器501可执行的指令和应用,还可以缓存待处理器501以及计算机设备5中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random Access Memory,RAM)实现。
其中,处理器501执行程序时实现上述任一项的指令下发方法的步骤。处理器501通常控制计算机设备5的总体操作。
本申请实施例提供一种计算机存储介质,计算机存储介质存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,以实现如上任一实施例的指令下发方法的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
上述处理器可以为目标用途集成电路(Application Specific IntegratedCircuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital Signal Processing Device,DSPD)、可编程逻辑装置(Programmable LogicDevice,PLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器中的至少一种。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。
上述计算机存储介质/存储器可以是只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性随机存取存储器(Ferromagnetic Random Access Memory,FRAM)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器;也可以是包括上述存储器之一或任意组合的各种终端,如移动电话、计算机、平板设备、个人数字助理等。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各步骤/过程的序号的大小并不意味着执行顺序的先后,各步骤/过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台车载终端(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (9)

1.一种指令下发方法,其特征在于,所述方法包括:
在同一帧周期内接收多个车控指令,其中,所述车控指令具有相同帧标识;
根据各个车控指令的接收时间,利用数据锁将所述各个车控指令逐条存储到数据缓存区;
获得是否向处于休眠状态的计时器注册所述帧标识的注册结果,并根据所述注册结果,唤醒所述计时器;
以所述帧标识对应的所述帧周期为时间间隔,周期性地通过所述计时器触发回调函数,利用所述回调函数向微控制单元下发所述数据缓存区缓存的所述帧标识对应的所有车控指令;
其中,所述根据所述注册结果,唤醒所述计时器,包括:
若所述注册结果表征未向处于休眠状态的计时器注册所述帧标识,通过注册接口将所述帧标识、所述帧周期和唤醒时间存储到计时器中,并设置所述唤醒时间为获得的第一当前时间,立刻唤醒所述计时器;
若所述注册结果表征已向处于休眠状态的计时器注册所述帧标识,每存储一条车控指令至所述数据缓存区,设置所述唤醒时间为第二当前时间,立刻唤醒所述计时器。
2.根据权利要求1所述的方法,其特征在于,所述以所述帧标识对应的所述帧周期为时间间隔,周期性通过所述计时器触发回调函数,包括:
获得第三当前时间;
若唤醒所述计时器的唤醒时间与所述第三当前时间之间满足预设大小关系,以所述第三当前时间为起点,以所述帧周期为时间间隔,确定所述回调函数的多个触发时间,通过所述计时器在多个所述触发时间触发所述回调函数。
3.根据权利要求1所述的方法,其特征在于,所述周期性地通过所述计时器触发回调函数之后,所述方法包括:休眠所述计时器。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
在车机系统启动后,初始化所述帧标识对应的数据缓存区、所述数据缓存区对应的状态参数的参数值为第一参数值,以及初始化并启动所述计时器;其中,所述状态参数用于表征所述数据缓存区缓存的数据是否有效;
相应地,所述根据各个车控指令的接收时间,利用数据锁将所述各个车控指令逐条存储到数据缓存区,包括:
根据所述接收时间,利用数据锁将所述各个车控指令逐条存储到所述帧标识对应的数据缓存区;
更新所述状态参数,将所述第一参数值更新为第二参数值,确定所述数据缓存区缓存的数据有效。
5.根据权利要求4所述的方法,其特征在于,所述利用所述回调函数向微控制单元下发所述数据缓存区缓存的所述帧标识对应的所有车控指令,包括:
在所述数据缓存区存储有所述车控指令,且所述状态参数的参数值为所述第二参数值的情况下,利用所述回调函数向所述微控制单元下发所述帧标识对应的所述数据缓存区缓存的所有车控指令。
6.根据权利要求4所述的方法,其特征在于,所述利用所述回调函数向微控制单元下发所述数据缓存区缓存的所述帧标识对应的所有车控指令之后,所述方法包括:
删除所述帧标识对应的数据缓存区中的车控指令;
重置所述状态参数,将所述第二参数值更新为所述第一参数值,确定所述数据缓存区存储的数据无效。
7.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
在同一所述帧周期内未接收到车控指令的情况下,若所述计时器触发所述回调函数,确定所述数据缓存区是否包含有所述帧标识对应的车控指令的第一确定结果;若所述第一确定结果表征所述数据缓存区不包含所述车控指令,注销所述计时器中的所述帧标识,休眠所述计时器线程;和/或,
在同一所述帧周期内未接收到车控指令的情况下,若所述计时器触发所述回调函数,确定所述数据缓存区对应的状态参数的参数值是否为第一参数值的第二确定结果;若所述第二确定结果表征所述状态参数的参数值为所述第一参数值,注销所述计时器中的所述帧标识,休眠所述计时器线程;
其中,所述状态参数的第一参数值用于表征帧标识对应的数据缓存区缓存的数据无效。
8.一种计算机设备,其特征在于,所述计算机设备包括:存储器和处理器,
所述存储器存储有可在处理器上运行的计算机程序,
所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的指令下发方法。
9.一种存储介质,其特征在于,所述存储介质存储有一个或者多个计算机程序,一个或者多个计算机程序可被一个或者多个处理器执行,以实现如权利要求1至7中任一项所述的指令下发方法。
CN202310664807.4A 2023-06-06 2023-06-06 一种指令下发方法、设备及存储介质 Active CN116841626B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310664807.4A CN116841626B (zh) 2023-06-06 2023-06-06 一种指令下发方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310664807.4A CN116841626B (zh) 2023-06-06 2023-06-06 一种指令下发方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116841626A CN116841626A (zh) 2023-10-03
CN116841626B true CN116841626B (zh) 2024-01-30

Family

ID=88166151

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310664807.4A Active CN116841626B (zh) 2023-06-06 2023-06-06 一种指令下发方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116841626B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113691627A (zh) * 2021-08-25 2021-11-23 杭州安恒信息技术股份有限公司 一种soar联动设备的控制方法、装置、设备及介质
CN113900712A (zh) * 2021-10-26 2022-01-07 海光信息技术股份有限公司 指令处理方法、指令处理装置及存储介质
CN114116014A (zh) * 2021-11-08 2022-03-01 深圳Tcl新技术有限公司 一种指令下发方法、装置、智能设备及存储介质
CN114661808A (zh) * 2022-03-31 2022-06-24 三一电动车科技有限公司 车载数据的采集方法、装置、车载终端及车辆
CN115016444A (zh) * 2022-07-26 2022-09-06 深圳市元征科技股份有限公司 一种车辆远程诊断方法及相关组件
CN116016024A (zh) * 2023-01-03 2023-04-25 重庆长安汽车股份有限公司 can报文的封装系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113691627A (zh) * 2021-08-25 2021-11-23 杭州安恒信息技术股份有限公司 一种soar联动设备的控制方法、装置、设备及介质
CN113900712A (zh) * 2021-10-26 2022-01-07 海光信息技术股份有限公司 指令处理方法、指令处理装置及存储介质
CN114116014A (zh) * 2021-11-08 2022-03-01 深圳Tcl新技术有限公司 一种指令下发方法、装置、智能设备及存储介质
CN114661808A (zh) * 2022-03-31 2022-06-24 三一电动车科技有限公司 车载数据的采集方法、装置、车载终端及车辆
CN115016444A (zh) * 2022-07-26 2022-09-06 深圳市元征科技股份有限公司 一种车辆远程诊断方法及相关组件
CN116016024A (zh) * 2023-01-03 2023-04-25 重庆长安汽车股份有限公司 can报文的封装系统

Also Published As

Publication number Publication date
CN116841626A (zh) 2023-10-03

Similar Documents

Publication Publication Date Title
CN108933719B (zh) 车载can网络管理方法、车载can网络、车辆
CN104221445B (zh) 一种唤醒终端系统的方法及终端
CN104572141B (zh) 车用电控单元ecu的引导程序的在线更新方法
US20130159489A1 (en) System and method for managing ethernet communication network for use in vehicle
CN116841626B (zh) 一种指令下发方法、设备及存储介质
EP0992004B1 (en) Method for registering vehicular bus functionality
CN111679923B (zh) 实时通信方法和系统
JP6358286B2 (ja) 制御装置、プログラム更新方法、およびコンピュータプログラム
CN116133099A (zh) 车钥匙控制方法、钥匙终端及存储介质
CN105984427B (zh) 汽车及汽车的解锁方法、解锁系统
CN111277285A (zh) 一种射频芯片信号接收方法、装置以及系统
CN111885173B (zh) 一种符合autosar架构的ecu及其睡眠/唤醒管理方法
CN111861097B (zh) 信息处理方法及装置
CN112644420A (zh) 车辆的唤醒方法、系统、计算机可读存储介质及车机端
CN115220922A (zh) 车辆应用程序运行方法、装置以及车辆
CN211702021U (zh) 一种射频芯片信号接收装置及系统
CN114579161A (zh) 应用程序更新方法及ecu
JP4446169B2 (ja) 自動車用制御装置
CN114826624B (zh) 向用户提供车载应用的线上服务的方法及系统
CN112261621A (zh) 基于IPv6网络的车载T-Box唤醒方法及装置、存储介质和终端
CN116782127A (zh) 交通工具的唤醒方法及装置
CN111301167B (zh) 一种仪表报警信息显示方法
CN115206004B (zh) 车载设备连接控制方法、存储介质以及车载设备
CN113259374B (zh) 一种新鲜值管理方法及装置
CN116302880A (zh) 车载应用行为数据的处理的方法、装置、车辆及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant