首页 / 设备寄存器访问方法、装置、电子设备及存储介质

设备寄存器访问方法、装置、电子设备及存储介质公开 发明

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及一种设备寄存器访问方法、装置、电子设备及存储介质。

相关背景技术

[0002] WebAssembly(简称WASM)是一种新型的低级语言,它的目标是成为Web平台的通用编译目标,但是也可以用于非Web场景。它被设计成一种可移植的目标,它被设计成一种可
移植的高性能执行格式。WASM技术所处的技术领域主要是Web开发、移动开发和系统编程等
领域。WASM技术目前处于发展阶段,目前已经有了一些成熟的应用,如:Google Earth、
AutoCAD、Unity等。WASM技术的发展前景非常好,它可以在Web平台上实现高性能的图形渲
染、游戏开发、视频编辑等应用,也可以在移动端实现高性能的图形渲染、游戏开发、视频编
辑等应用,还可以在系统编程领域实现高性能的图形渲染、游戏开发、视频编辑等应用。
[0003] 目前,WASM在嵌入式开发领域主要用于实现一些简单的功能,如传感器数据采集、控制等,复杂的嵌入式系统通常包含多种传感设备和执行设备,这些设备通常需要使用专
门的设备驱动来访问,例如:串口、I2C、SPI、GPIO等设备,而因为WASM应用是运行在沙箱中
的,所以它无法直接访问完整的系统内存,而要访问这些设备,通常是通过MMIO(Memory 
Mapped I/O)的方式来访问,所以无法直接在WASM应用中驱动这些设备。

具体实施方式

[0028] 下面详细描述本公开的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附
图描述的实施例是示例性的,旨在用于解释本公开,而不能理解为对本公开的限制。
[0029] 本公开技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
[0030] 图1是本公开一个实施方式的一种设备寄存器访问方法的示意图,如图1所示,该设备寄存器访问方法包括以下步骤:
[0031] S101,响应于满足检测条件,检测WASM应用的代码中是否存在需要访问的设备寄存器地址。
[0032] 本申请实施例的设备寄存器访问方法可应用于WASM应用访问设备寄存器的场景中,本申请实施例的设备寄存器访问的执行主体可为本申请实施例的设备寄存器访问装
置,该设备寄存器访问装置可以设置在电子设备上。
[0033] 可以理解的是,WASM应用并非实时检测是否存在需要访问的设备寄存器地址的,而是当达到检测条件时,才进行检测,以此可以降低WASM应用对系统处理器资源的占用。
[0034] 在本公开实施例中,检测条件可为多种,此处不作任何限定,举例来说,可为WASM应用被调用时、启动WASM应用时等。
[0035] 需要说明的是,WASM应用可为多种语言开发的,此处不作任何限定,举例来说,WASM应用可基于C、C++、Rust等语言进行开发的。
[0036] 在本公开实施例中,可通过对WASM应用的代码进行解析,以确定是否存在需要访问的设备寄存器地址。由于WASM应用可能为不同的语言进行开发的,因此,可通过训练解析
模型对WASM应用的代码进行解析,以获取设备寄存器地址。该解析模型可存储在电子设备
的存储空间中,以方便在需要时调取使用。
[0037] S102,响应于检测到需要访问的目标设备寄存器地址,分别确定WASM应用的编译器中读取和写入目标设备寄存器地址的初始读取指令和初始写入指令。
[0038] 现有技术中,在一种可能实现的方式中,为了访问设备寄存器,可在WASM应用中实现一个设备驱动模块,该模块的作用是实现对设备寄存器的访问,该模块的接口是一组函
数,这些函数的作用是读写设备寄存器,例如:读写串口控制寄存器、读写串口状态寄存器
等。该函数的作用是读取指定地址的寄存器的值,例如要读取串口状态寄存器的值,可以调
用该函数:read_reg(UART0_STATUS_REG_ADDR)。这样,通过将原本直接访问内存地址的寄
存器访问操作,替换为调用读写寄存器的函数,就可以在WASM应用中驱动设备了。
[0039] 但是这种方法每次访问寄存器都需要调用函数,同时为了保证安全性,还需要在函数中进行参数检查来确认给定的地址是否是合法的寄存器地址,这样就会导致性能较
差。
[0040] 本公开中将地址检查的过程从运行时转移到了编译时,以此可以提高WASM应用的性能,同时由于可以兼容现有的驱动程序,方便后期维护,不需要重写驱动程序。
[0041] 在本公开实施例中,WASM的编译器是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。本公开实施例中的编译器可为多种,此处
不作任何限定,举例来说,本公开中的编译器可为clang编译器。
[0042] S103,将初始读取指令替换为目标读取指令,并将初始写入指令替换目标写入指令。
[0043] 在本公开实施例中,无论初始读取指令和初始写入指令为何种语言下的编译的,其最终生成的目标读取指令和目标写入指令皆为同一格式、同一语言的指令,通过这种转
换为统一的指令,可以实现驱动程序的兼容,无需重复编写。
[0044] 需要说明的是,该最终生成的目标读取指令和目标写入指令对应的调用函数和编写语言可为提前设定好的,并可根据实际的设计需要进行变更,此处不作任何限定。
[0045] S104,基于目标读取指令和目标写入指令访问目标设备寄存器地址对应的设备寄存器。
[0046] 在本公开实施例中,首先响应于满足检测条件,检测WASM应用的代码中是否存在需要访问的设备寄存器地址,然后响应于检测到需要访问的目标设备寄存器地址,分别确
定WASM应用的编译器中读取和写入目标设备寄存器地址的初始读取指令和初始写入指令,
而后将初始读取指令替换为目标读取指令,并将初始写入指令替换目标写入指令,最后基
于目标读取指令和目标写入指令访问目标设备寄存器地址对应的设备寄存器。通过检测确
定设备寄存器地址,并将目标设备寄存器地址的初始读取指令和初始写入指令分别转换为
统一的目标读取指令和目标写入指令,相较于现有技术,本公开将地址检查的过程从运行
时转移到了编译阶段,以此可以提高WASM应用的性能,可以兼容现有的驱动程序,方便后期
维护,不需要重写驱动程序,同时将驱动程序的实现从系统中转移到了应用中,可以将外围
设备的驱动程序与操作系统核心分离,更利于设备的更新维护和问题定位。
[0047] 需要说明的是,检测条件为WASM应用运行或者对编译器进行修改。以此将地址检查的过程从运行时转移到了编译时,可以避免在运行时检测导致WASM应用运行出现卡顿和
由于检测出异常导致WASM应用无法运行,以此可以提高WASM应用的性能和用户的使用体
验。同时通过编译器生成统一的指令可以兼容不同编程语言下的驱动程序,方便后期维护,
不需要重写驱动程序。
[0048] 上述实施例中,检测WASM应用中是否存在需要访问的设备寄存器地址,还可通过图2进一步解释,图2是本公开一个实施方式的另一种设备寄存器访问方法的示意图,该方
法包括:
[0049] S201,对内存访问指令中的候选地址进行解析。
[0050] 在本公开实施例中,对内存访问指令中的候选地址进行解析的方法可为多种,此处不作任何限定。
[0051] 可选地,可通过解析模型对内存访问指令中的候选地址进行解析,该解析模型为提前训练好的,并存储在电子设备的存储空间中,以方便在需要调取使用。
[0052] 可选地,还可通过解析应用对内存访问指令中的候选地址进行解析。该应用可识别多种语言,并可分析出访问指令中的候选地址。
[0053] S202,在候选地址为一个确定值的情况下,将候选地址与设备寄存器地址查询表进行比对,并基于比对结果确定候选地址是否为目标设备寄存器地址。
[0054] 需要说明的是,设备寄存器地址查询表为设备寄存器与设备寄存器地址的对应表。该设备寄存器地址查询表为提前设定好的,并存储在电子设备的存储空间中,以方便在
需要时调取使用。本公开中通过对地址进行解析,并与设备寄存器地址查询表进行比对,可
以准确的确定候选地址是否为目标设备寄存器地址,同时将地址检查的过程从运行时转移
到了编译时,以此可以提高WASM应用的性能。
[0055] 在本公开实施例中,首先对内存访问指令中的候选地址进行解析,然后在候选地址为一个确定值的情况下,将候选地址与设备寄存器地址查询表进行比对,并基于比对结
果确定候选地址是否为目标设备寄存器地址。
[0056] 在本公开实施例中,目标读取指令为调用getreg函数的指令,目标写入指令为调用putreg函数的指令。基于目标读取指令和目标写入指令访问目标设备寄存器地址对应的
设备寄存器,在实际的操作中,可基于目标读取指令调用getreg函数,通过getreg函数从目
标设备寄存器地址对应的目标设备寄存器中获取值,以及基于目标写入指令调用putreg函
数,通过putreg函数向目标设备寄存器地址对应的目标设备寄存器中写入值。
[0057] 与上述几种实施例提供的设备寄存器访问方法相对应,本公开的一个实施例还提供了一种设备寄存器访问装置,由于本公开实施例提供的设备寄存器访问装置与上述几种
实施例提供的设备寄存器访问方法相对应,因此上述设备寄存器访问方法的实施方式也适
用于本公开实施例提供的设备寄存器访问装置,在下述实施例中不再详细描述。
[0058] 图3是本公开一个实施方式的一种设备寄存器访问装置的示意图,如图3所示,该设备寄存器访问装置300,包括:检测模块310、确定模块320、替换模块330和访问模块340。
[0059] 其中,检测模块310,响应于满足检测条件,用于检测WASM应用的代码中是否存在需要访问的设备寄存器地址。
[0060] 确定模块320,用于响应于检测到需要访问的目标设备寄存器地址,分别确定WASM应用的编译器中读取和写入目标设备寄存器地址的初始读取指令和初始写入指令。
[0061] 替换模块330,用于将初始读取指令替换为目标读取指令,并将初始写入指令替换目标写入指令。
[0062] 访问模块340,用于基于目标读取指令和目标写入指令访问目标设备寄存器地址对应的设备寄存器。
[0063] 在本公开的一个实施例中,检测模块310,还用于:对内存访问指令中的候选地址进行解析;在候选地址为一个确定值的情况下,将候选地址与设备寄存器地址查询表进行
比对,并基于比对结果确定候选地址是否为目标设备寄存器地址。
[0064] 在本公开的一个实施例中,确定模块320,还用于:候选地址存在于设备寄存器地址查询表中,确定候选地址为需要访问的目标设备寄存器地址。
[0065] 在本公开的一个实施例中,目标读取指令为调用getreg函数的指令,目标写入指令为调用putreg函数的指令。
[0066] 在本公开的一个实施例中,访问模块340,还用于:基于目标读取指令调用getreg函数,通过getreg函数从目标设备寄存器地址对应的目标设备寄存器中获取值;以及,基于
目标写入指令调用putreg函数,通过putreg函数向目标设备寄存器地址对应的目标设备寄
存器中写入值。
[0067] 通过检测确定设备寄存器地址,并将目标设备寄存器地址的初始读取指令和初始写入指令分别转换为统一的目标读取指令和目标写入指令,相较于现有技术,本公开将地
址检查的过程从运行时转移到了编译时,以此可以提高WASM应用的性能,可以兼容现有的
驱动程序,方便后期维护,不需要重写驱动程序,同时将驱动程序的实现从系统中转移到了
应用中,可以将外围设备的驱动程序与操作系统核心分离,更利于设备的更新维护和问题
定位。
[0068] 为了实现上述实施例,本公开实施例还提出一种电子设备400,图4是本公开一个实施方式的一种电子设备的示意图,如图4所示,该电子设备400包括:处理器401和处理器
通信连接的存储器402,存储器402存储有可被至少一个处理器执行的指令,指令被至少一
个处理器401执行,以实现如本公开图1‑图2实施例的设备寄存器访问方法。
[0069] 为了实现上述实施例,本公开实施例还提出一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机实现如本公开图1‑图2实施例的设备寄存
器访问方法。
[0070] 为了实现上述实施例,本公开实施例还提出一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现如本公开图1‑图2实施例的设备寄存器访问方法。
[0071] 在本公开的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本公开和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本公开的限制。
[0072] 此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者
隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是两个或两个以上,
除非另有明确具体的限定。
[0073] 在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特
点包含于本公开的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不
必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任
一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技
术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结
合和组合。
[0074] 尽管上面已经示出和描述了本公开的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本公开的限制,本领域的普通技术人员在本公开的范围内可以对上述
实施例进行变化、修改、替换和变型。

当前第1页 第1页 第2页 第3页