文件操作方法、装置及嵌入式控制器与流程

文档序号:20699620发布日期:2020-05-12 15:29阅读:213来源:国知局
本申请涉及嵌入式控制
技术领域
:,更具体地,涉及一种文件操作方法、装置及嵌入式控制器。
背景技术
::在嵌入式控制领域中,常需要嵌入式控制器对存储设备执行数据传输操作,在执行一次数据传输操作后,需要等待该次操作的数据完成传输,再进行下一次传输,导致嵌入式控制器的处理资源的浪费。技术实现要素:鉴于上述问题,本申请提出了一种文件操作方法、装置及嵌入式控制器,用以改善上述问题。第一方面,本申请实施例提供了一种文件操作方法,应用于与存储设备电连接的嵌入式控制器,所述嵌入式控制器包括直接存储器访问dma控制器,所述方法包括:通过所述dma控制器对所述存储设备执行数据传输操作;等待所述数据传输操作被执行完毕,在等待所述数据传输操作被执行完毕的过程中开启可悬起异常中断;通过所述可悬起异常中断的中断服务程序执行目标任务。第二方面,本申请实施例提供了一种文件操作装置,应用于与存储设备电连接的嵌入式控制器,所述嵌入式控制器包括直接存储器访问dma控制器,所述装置包括:操作模块,用于通过所述dma控制器对所述存储设备执行数据传输操作;等待模块,用于等待所述数据传输操作被执行完毕,在等待所述数据传输操作被执行完毕的过程中开启可悬起异常中断;通过所述可悬起异常中断的中断服务程序执行目标任务。第三方面,本申请实施例提供了一种嵌入式控制器,包括:一个或多个处理器;存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述的方法。相对于现有技术,本申请提供的方案,通过可悬起异常中断,在嵌入式控制器等待数据传输操作完成的过程中将嵌入式控制器的处理资源释放,用以执行目标任务,从而提高对嵌入式控制器的处理资源的利用率,减少处理资源的浪费。本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1示出了一种适用于本申请实施例的应用环境示意图。图2示出了根据本申请一个实施例的文件操作方法的流程示意图。图3示出了根据本申请另一个实施例的文件操作方法的流程示意图。图4示出了图3所示文件操作方法的另一流程示意图。图5是本申请实施例的用于执行根据本申请实施例的文件操作方法的嵌入式控制器的框图。图6示出了根据本申请实施例的文件操作装置的框图。图7是本申请实施例的用于保存或者携带实现根据本申请实施例的文件操作方法的程序代码的存储单元。具体实施方式为了使本
技术领域
:的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。嵌入式控制器可以对存储设备执行数据传输操作,比如,从存储设备获取数据并传输给嵌入式控制器的读取操作,又比如,将数据传输给存储设备进行存储的写入操作。其中,嵌入式控制器在执行读取操作后,需要等待数据读取完成,在执行写入操作后,需要等待数据写入完成,在等待过程中,嵌入式控制器的处理资源没有被使用,处于闲置状态,导致处理资源的浪费。发明人经过长期的研究,提出一种文件操作方法、装置及嵌入式控制器,可以将数据传输过程中嵌入式控制器未被使用的处理资源释放,用于执行其他任务,从而可以提高嵌入式控制器的处理资源的利用率。请参照图1,图1为一种适用于本申请实施例的应用环境示意图。其中,嵌入式控制器100与存储设备200电连接,存储设备200可以是基于半导体快闪记忆器的任意记忆设备,例如可以是sd存储卡(securedigitalmemorycard)。嵌入式控制器可以是任意能够对存储设备执行数据传输操作的微控制器,例如可以是arm(advancedriscmachines)cortex-m内核的单片机,例如stm32。嵌入式控制器100与存储设备200可以通过sdio(securedigitalinputandoutput,安全数字输入输出)总线通信,其中,嵌入式控制器100为sdio主机(host)端,存储设备200为sdio设备(device)端。嵌入式控制器100可以包括处理器101和直接存储器访问(directmemoryaccess,dma)控制器102,dma控制器102和处理器101电连接。其中,在嵌入式控制器100被配置为dma传输模式的情况下,当需要进行数据传输时,处理器101可以将sdio总线交由dma控制器102管控,由dma控制器102通过sdio总线实现与存储设备200之间的数据传输。请参照图2,图2为本申请一实施例提供的一种文件操作方法的流程示意图,该方法可以应用于图1所示的嵌入式控制器100。下面对该方法的步骤进行阐述。步骤s110,通过dma控制器102对存储设备执行数据传输操作。考虑到通过dma控制器102进行数据传输操作可以绕过处理器101,提高数据传输效率,避免对处理器101的资源占用,因而本实施例中,可以在嵌入式控制器100进行配置,采用dma传输模式进行数据传输。其中,数据传输操作可以是读取操作或写入操作。详细地,处理器101可以调用读取函数实现读取操作,该读取函数用于在嵌入式控制器100处于dma传输模式时,使dma控制器102通过sdio总线从存储设备200读取数据,读取的数据将会通过sdio总线被传输至dma控制器的数据缓冲器中。处理器101可以调用写入函数实现写入操作,该写入函数用于在嵌入式控制器100处于dma传输模式时,使dma控制器102通过sdio总线向存储设备200写入数据。步骤s120,等待所述数据传输操作被执行完毕,在等待所述数据传输操作被执行完毕的过程中开启可悬起异常(pendsv)中断。步骤s130,通过所述可悬起异常中断的中断服务程序执行目标任务。处理器101在每次执行读取操作后,可以调用等待读取函数,用于等待该次读取操作被执行完毕。处理器101在每次执行写入操作后,可以调用等待写入函数,用于等待该次写入操作被执行完毕。本实施例中,可以在等待读取函数和等待写入函数中添加开启可悬起异常中断的指令。其中,所述可悬起异常中断可以被配置为最低优先级,可以被任何中断抢占,只有当可悬起异常中断的优先级为当前最高的优先级时,可悬起异常中断的中断服务程序才被响应,因此,可悬起异常中断的开启不会影响到嵌入式控制器100中其他中断的处理。实施过程中,dma传输过程没有处理器101的参与,在等待数据传输操作(如,上述的读取操作或写入操作)被执行完毕的过程中,处理器101不会执行其他处理,其处理资源被闲置。因而,本实施例中,将需要执行的任务指令添加到可悬起异常中断的中断服务程序中,从而可以在可悬起异常中断的中断服务程序中对该目标任务进行处理。其中,目标任务即为所述需要执行的任务指令。此外,由于dma传输过程没有处理器101的参与,因而,可悬起异常中断的中断服务程序的处理不会对dma传输过程造成影响。图2所示流程,通过可悬起异常中断的设置,将等待数据传输的过程中的闲置处理资源释放出来,用于执行所需的任务,提高了嵌入式控制器100的资源利用效率,避免了资源浪费。请参照图3,图3为本申请另一实施例提供的文件操作方法的流程示意图,该方法可以应用于图1所示嵌入式控制器100。下面对该方法的流程进行阐述。步骤s210,将预设文件系统移植到嵌入式控制器100中。步骤s220,将所述存储设备200的驱动程序移植到所述嵌入式控制器100中。步骤s230,通过dma控制器100对存储设备200执行数据传输操作,在每次数据传输操作被执行完毕时,开启dma中断。本实施例中,为了实现嵌入式控制器100与存储设备200的正常通信,首先可以对存储设备200的接口功能进行配置,以存储设备200是sd存储卡为例,可以将存储设备200的数据引脚所连接的gpio(general-purposeinput/output,通用型输入输出)引脚配置为复用推挽输出,将sd存储卡的接口电平(即,数据引脚的电平)拉高,并将数据引脚的输出频率配置为50mhz。此外,还可以将sd存储卡的数据引脚所连接的gpio引脚总线时钟开启。然后,可以对嵌入式控制器进行配置,以嵌入式控制器100是stm32为例,可以使能stm32的dma通道,并使能dma中断。详细地,stm32具有两个dma控制器,分别为dma1和dma2,示例性地,可以使能dma2的通道3和6,并开启中断控制器的dma中断通道。本实施例中,存储设备200上可以部署有用于对存储设备200中的数据进行组织和管理的预设文件系统,预设文件系统例如可以是fatfs(fileallocationtablefilesystem,文件配置表文件系统)。其中,所述预设文件系统提供了用于操作存储设备200中数据的底层接口函数,例如,磁盘读函数、磁盘写函数、磁盘初始化函数、磁盘状态函数、磁盘io(输入输出)控制函数、rct(real_time_clock,实时时钟)获取函数等。为了使得嵌入式控制器100可以正常操作存储设备200,还可以将存储设备200的驱动程序移植到嵌入式控制器中。下面以预设文件系统是fatfs、存储设备200是sd存储卡为例,对上述的移植过程进行阐述。实施过程中,可以在将fatfs移植到嵌入式控制器100的过程中,对移植的fatfs的配置文件进行参数设定。比如,可以开启fatfs的长文件名支持,使能长文件名在堆区的动态工作缓冲区,并设置读取操作和写入操作的扇区大小为512字节。又比如,可以修改磁盘初始化函数,在所述磁盘初始化函数中调用sd存储卡的驱动程序中的sd存储卡初始化函数,并将第一值设置为返回值,用于表征初始化成功。其中,所述第一值例如可以为0。又比如,可以修改磁盘状态函数,在所述磁盘状态函数中调用sd存储卡的驱动程序中的sd存储卡状态获取函数,并将第二值设置为返回值,用于表征状态获取成功。其中,所述第二值和所述第一值可以相同,也可以不同。示例性地,所述第二值可以为0。又比如,可以根据fafts给出的参数将sd存储卡的相关信息传递给嵌入式控制器100中用于接收sd存储卡传输的数据的数据缓冲区。所述相关信息例如可以包括定义的数据块大小、数据块数量等。本实施例中,对于需要传输的目标数据,通常需要多次数据传输操作才可以完成对该目标数据的传输。例如,可以通过多次读取操作从存储设备200读取所需的目标数据data1,每次读取操作可以读取目标数据data1的部分数据;又如,可以通过多次写入操作向存储设备200写入目标数据data2,每次写入操作可以向存储设备200写入目标数据data2的部分数据。实施过程中,通常是以数据块为单位进行数据传输,基于此,可以在将预设文件系统移植到嵌入式控制器100的过程中,对磁盘操作函数进行修改,具体可以在磁盘操作函数中调用存储设备200的驱动程序中的数据块操作函数。其中,所述数据块操作函数包括dma传输指令,用于对需要传输的目标数据中的数据块进行传输。基于此修改,步骤s230中,通过dma控制器对存储设备执行数据传输操作的步骤,可以通过如下流程实现:通过存储设备200的预设文件系统的磁盘操作函数,调用存储设备200的驱动程序中的数据块操作函数,以通过数据块函数中的dma传输指令,对目标数据中的数据块进行dma传输。可选地,本实施例中,可以根据待传输的数据字节数(例如,目标数据的字节数)调用不同的数据块操作函数。例如,当待传输的数据字节数不超过目标字节数时,调用单数据块操作函数;可当待传输的数据字节数超过目标字节数时,可以调用多数据块操作函数。其中,目标字节数例如可以是512字节。如此,可以提升数据操作的效率。在预设文件系统为fatfs时,上述的磁盘操作函数可以为磁盘读函数或磁盘写函数,对应地,数据块操作函数可以为数据块读函数或数据块写函数。进一步地,数据块读函数可以包括多数据块读函数和多单数据块读函数,数据块写函数可以包括多数据块写函数和单数据块写函数。如上所述,嵌入式控制器100需要一次或多次数据传输操作才可以完成对目标数据的传输。其中,由于采用的是dma传输模式,并开启了dma中断,在每次执行完一次dma传输,即每执行完毕一次数据传输操作(如,读取操作或写入操作)时,会产生dma中断请求,该dma中断请求会被发送给处理器101,处理器101可以执行dma中断的中断服务程序,实现对该次传输的数据的后续处理,例如进行校验等。步骤s240,等待所述数据传输操作被执行完毕。步骤s250,在等待所述数据传输操作被执行完毕的过程中,检测所述存储设备是否处于繁忙状态。若否,执行步骤s260;若是,执行步骤s270。步骤s260,不做处理。步骤s270,开启可悬起异常中断。步骤s280,通过所述可悬起异常中断的中断服务程序执行目标任务。当处于数据传输过程中时,存储设备200通常处于繁忙状态。基于此,本实施例中,可以在等待读函数和等待写函数中,调用上述的磁盘状态函数,用于获取存储设备200的状态,并对获取的状态进行识别,当识别出的状态为繁忙状态时,可以开启可悬起异常中断。实施过程中,可以根据需要将需要执行的目标任务添加到可悬起异常中断的中断服务程序中。可以理解,当产生dma中断,处理器101执行dma中断的中断服务程序的过程中,将停止执行可悬起异常中断的中断服务程序。在dma中断结束,而目标数据尚未传输完成的情况下,处理器101可以继续执行可悬起异常中断的中断服务程序。本实施例中,对于目标数据需要多次数据传输操作的情况,在等待第i(i为大于或等于2的整数)次数据传输操作被执行完毕的过程中,可悬起异常中断已经处于开启状态,只需控制可悬起异常中断继续处于开启状态即可。步骤s290,当所述目标数据被传输完成时,结束所述可悬起异常中断。本实施例中,当针对目标数据的多次数据传输操作被执行完毕时,可以确定目标数据传输完成,从而可以结束可悬起异常中断,即,退出可悬起异常中断。可选地,本实施例中,可以通过图4所示流程来检测目标数据是否被传输完成,下面对该流程进行阐述。步骤s410,检测所述dma中断是否处于结束状态。若是,执行步骤s420;若否,执行步骤s450。可选地,本实施例中,可以通过检测dma中断标志位来判断dma中断当前是否处于结束状态。步骤s420,检测dma控制器102是否处于传输完成状态。若是,执行步骤s430;若否,执行步骤s450。示例性地,可以读取dma_sxndtr寄存器的数值,该数值表示dma控制器需要传输的数据块数量,若读取的数值为0,则可以确定dma控制器102已处于传输完成状态。步骤430,检测存储设备200是否处于数据操作完成状态。若是,执行步骤s440;若否,执行步骤s450。步骤s440,确定所述目标数据被传输完成。本实施例中,当数据传输操作为写入操作时,可以实时读取sdio_sta寄存器的txact位的值,当读取的值为1时,表示写入成功,即处于数据操作完成状态。对应地,当数据传输操作为读取操作时,可以实时读取sdio_sta寄存器的rxact位的值,若读取的值为1,表示读取成功,即处于数据操作完成状态。步骤s450,控制可悬起异常中断处于开启状态。当上述的步骤s410-步骤s430中任意一个步骤的判断结果为否时,可以继续将可悬起异常中断保持为开启状态。通过本实施例提供的文件操作方法,可以提高对嵌入式控制器的处理器资源的利用率,避免处理器资源的浪费。请参照图5,其示出了本申请实施例提供的一种嵌入式控制器100的结构框图。该嵌入式控制器100可以是任意嵌入式微控制器。本申请中的嵌入式控制器设备100可以包括一个或多个如下部件:处理器101、dma控制器102、存储器103、以及一个或多个程序,其中一个或多个程序可以被存储在存储器103中并被配置为由一个或多个处理器101执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。处理器101可以包括一个或者多个处理核。处理器101利用各种接口和线路连接整个嵌入式控制器100内的各个部分,通过运行或执行存储在存储器103内的指令、程序、代码集或指令集,以及调用存储在存储器103内的数据,执行嵌入式控制器100的各种功能和处理数据。可选地,处理器101可以采用基于armcortex-m内核实现,例如可以采用armcortex-m0、m0+、m3、m4和m7内核,本实施例对此没有限制。此外,处理器101还可以外接数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。处理器110可集成中央处理器(centralprocessingunit,cpu)、图像处理器(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。存储器103可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。存储器103可用于存储指令、程序、代码、代码集或指令集。存储器103可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储嵌入式控制器100在使用中所创建的数据(比如,各种状态数据)等。可以理解,图5所示结构仅为示意,嵌入式控制器100还可以包括比图5所示更多或更少的组件,或是具有与图5所示完全不同的配置,本实施例对此没有限制。例如,嵌入式控制器100还可以包括sdio模块,该sdio模块可以通过sdio总线与存储设备200的sdio接口通信。sdio模块通常可以包括sdio适配器和apb2(advancedperipheralbus2,外围总线2)接口,sdio适配器可以提供sdio主机端功能,例如可以提供sd时钟、发送命令和进行数据传输。apb2接口可以供dma控制器访问sdio适配器的寄存器,并且可以产生中断,以及dma请求信号。请参阅图6,其中示出了本申请实施例提供的一种文件操作装置600的结构框图。所述文件操作装置600可以包括:操作模块610和等待模块620。其中,所述操作模块610用于通过所述dma控制器对所述存储设备中的目标数据进行传输操作。所述等待模块620用于等待所述传输操作被执行完毕,在等待所述传输操作被执行完毕的过程中开启可悬起异常中断;通过所述可悬起异常中断的中断服务程序执行目标任务。可选地,本申请实施例中,所述等待模块620在等待所述数据传输操作被执行完毕的过程中开启可悬起异常中断的方式可以为:在等待所述数据传输操作被执行完毕的过程中,检测所述存储设备是否处于繁忙状态;若是,开启所述可悬起异常中断。可选地,本申请实施例中,一次所述数据传输操作用于传输目标数据的至少部分数据。在此情况下,所述等待模块620还可以用于当所述目标数据被传输完成时,结束所述可悬起异常中断。可选地,本申请实施例中,所述装置600还可以包括检测模块。所述检测模块可以用于:在每次所述数据传输操作被执行完毕时,开启dma中断;检测所述dma中断是否处于结束状态;若所述dma中断处于结束状态,检测所述dma控制器是否处于传输完成状态;若所述dma控制器处于传输完成状态,检测所述存储设备中是否处于数据操作完成状态;若所述存储设备处于传输完成状态,确定所述目标数据被传输完成。所述检测模块在确定所述目标数据被传输完成时,可以触发所述等待模块620执行相应操作。可选地,所述等待模块620通过所述dma控制器对所述存储设备执行数据传输操作的方式可以为:通过所述存储设备的预设文件系统的磁盘操作函数,调用所述存储设备的驱动程序中的数据块操作函数,所述数据块操作函数包括dma传输指令,用于对所述目标数据中的数据块进行dma传输。可选地,所述等待模块620可以通过如下方式调用所述存储设备的驱动程序中的数据块操作函数:当待传输的数据字节数不超过目标字节数时,调用单数据块操作函数;当待传输的数据字节数超过目标字节数时,调用多数据块操作函数。可选地,本申请实施例中,所述装置600还可以包括移植模块。所述移植模块可以用于:将所述预设文件系统移植到所述嵌入式控制器100中;将所述存储设备的驱动程序移植到所述嵌入式控制器100中。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,所显示或讨论的模块相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。请参考图7,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质700中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。计算机可读存储介质700可以是诸如闪存、eeprom(电可擦除可编程只读存储器)、eprom、硬盘或者rom之类的电子存储器。可选地,计算机可读存储介质700包括非瞬时性计算机可读介质(non-transitorycomputer-readablestoragemedium)。计算机可读存储介质700具有执行上述方法中的任何方法步骤的程序代码710的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码710可以例如以适当形式进行压缩。最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1