一种C编译器利用海明距离优化SRAM页选择的方法及系统技术方案

技术编号:19856908 阅读:47 留言:0更新日期:2018-12-22 11:34
本发明专利技术的涉及一种C编译器利用海明距离优化SRAM页选择的系统,其包含有:获取基本块(Basic Block)指令集模块,该模块依次遍历指定函数中所有的基本块,并把基本块中的所有指令均保存到一个指令容器中;获取海明距离值模块,该模块根据两个Bank值(Src Bank和Dest Bank)使用海明距离算法计算出它们的海明距离值,如果海明距离值为1,该模块还能计算出这两个Bank值到底在哪个bit位置上不同;SRAM页选择优化执行模块,该模块在遇到访问SRAM变量的时候,根据当前的Bank值和该SRAM变量的访问Bank值使用海明距离算法计算出它们的海明距离值,然后依据海明距离值来决定是否要插入页选择指令,以及插入何种页选择指令。

【技术实现步骤摘要】
一种C编译器利用海明距离优化SRAM页选择的方法及系统
本专利技术属于嵌入式C编译器设计
,涉及一种C编译器利用海明距离优化SRAM(静态存储器)页选择的方法。
技术介绍
市场上应用程序五花八门,这些应用程序基本上都是使用一种或者多种高阶语言和一套优秀的集成开发环境IDE(包含编译工具链)来进行开发,但是对于嵌入式领域来说,高阶的C语言可以说是嵌入式领域的王者开发语言,因为C语言不管从开发效率、移植性、代码可读性来说都是汇编语言和其他高阶语言无法比拟的,而使用C语言就离不开C编译器。目前市面上的C编译器产品有很多,且很多C编译器效率都是非常高,比如Clang、GCC、PICC、KeilC、IARC等编译器编译效率都是业内翘楚,但是针对一些多SRAM(静态存储器)页的体系结构中,一些编译器为了设计的便利性,在页选择过程中插入切换页的一条伪指令如PICC的banksel语句,然后汇编器根据该芯片的型号生成对应的页选择机器指令,假设某种芯片IC型号SRAM有4页,每一页为一个BANK,那么banksel伪指令语句被汇编器解析就会生成两条指令,这两条指令是设置页寄存器为正确的值,假设页选择寄存器为BSR,地址为0x08,那么C代码为:bank0unsignedchara=0;bank1unsignedcharb=1;编译后生成的汇编代码为:banksel0movlw0movwfabanksel1movlw1movwfb由于该芯片IC有4页,每一页为一个BANK,那么一个banksel语句为两条指令,分别设置BSR的第0和1位,因为使用2个bit(比特,二进制位信息单位)可以表示0‐3,刚好可以表示4个BANK,最后生成的代码为:bcfBSR,0bcfBSR,1movlw0movwfabsfBSR,0bcfBSR,1;有冗余movlw1movwfb以上汇编代码在页选择上会有部分冗余代码的产生,如何对SRAM页选择代码进行优化,是本申请提出的要解决的技术问题。海明距离,在信息论中,两个等长字符串之间的海明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:字符串"1011101"和"1001001"的海明距离是2(第3、5位字符不同);字符串"2173896"和"2233796"的海明距离是3(第2、3、5位字符不同)。
技术实现思路
本专利技术主要解决的技术问题是:如何在C编译器中利用海明距离对SRAM页选择进行优化,生成高效率的页选择指令,从而提高代码生成效率,为此本专利技术提供了一种C编译器利用海明距离优化SRAM页选择的方法。本专利技术是通过以下的技术方案来实现的。本专利技术的第一个技术主案是提出一种C编译器利用海明距离优化SRAM页选择的系统,其包含有:获取基本块(BasicBlock)指令集模块,该模块依次遍历指定函数中所有的基本块,并把基本块中的所有指令均保存到一个指令容器中;获取海明距离值模块,该模块根据两个Bank值(SrcBank和DestBank)使用海明距离算法计算出它们的海明距离值,如果海明距离值为1,该模块还能计算出这两个Bank值到底在哪个bit位置上不同;SRAM页选择优化执行模块,该模块在遇到访问SRAM变量的时候,根据当前的Bank值和该SRAM变量的访问Bank值使用海明距离算法计算出它们的海明距离值,然后依据海明距离值来决定是否要插入页选择指令,以及插入何种页选择指令。其原理是遍历函数所有基本块,并获取基本块中的指令集,然后根据当前Bank值和单元基本块中的页选择指令使用海明距离算法获取海明距离值,最后根据海明距离值生成优化的SRAM页选择指令,从而提高代码生成效率。基于上述的系统,本专利技术还提供一种C编译器利用海明距离优化SRAM页选择的方法,包括如下步骤:S1,依次遍历函数的所有基本块,把任一基本块中的指令保存到顺序容器中;S2,根据SRAM中当前Bank值和访问Bank值,计算出海明距离值,访问Bank值是指将要访问SRAM变量所在的Bank值;S3,当存在访问SRAM变量时,根据海明距离值来决定是否要插入页选择指令,以及插入何种页选择指令。在上述的技术方案中,进一步的,所述S1步骤中具体包括:S11、初始化获取基本块指令;S12、获取函数的一个基本块,获取失败则结束;S13、从基本块中取出一条指令,保存该指令到特定的容器中,如取出失败则结束;S14、从基本块中取出下一条指令,保存该指令到特定的容器中,如取出失败则获取函数的下一个基本块。在上述的技术方案中,进一步的,所述S2步骤中还包括:当计算出的海明距离值为1时,还要计算出这两个Bank值之间的不同处于哪个bit位置上。在上述的技术方案中,进一步的,所述S2步骤中具体包括:S21、初始化获取海明距离值;S22、设置当前Bank值为Src,下一条访问SRAM指令的Bank值的值为Dest;S23、获取Src的第N位的值,获取Dest第N位的值,N=0‐8为整数;S24、判定上述第N位的两个值是否不同,是则海明距离值加1,否则获取Src的第N+1位的值与获取Dest第N+1位的值;S25、保存位值不同的位置值。在上述的技术方案中,进一步的,所述S3步骤中具体包括:S31、初始化SRAM页选择指令;S32、设置当前Bank值为0;S33、获取基本块中的第一条指令,获取失败则结束;S34、获取指令类型,判定是否为访问SRAM指令,否则获取基本块的下一条指令;S35、获取该指令访问SRAM变量所在的访问Bank值;S36、根据当前Bank值和访问Bank值,计算出海明距离值;S37、当海明距离值为0时,设置当前当前Bank值为访问Bank值;当海明距离值为1时,获取当前Bank值和访问Bank值不同的位置的位值并进行替换,然后设置当前Bank值为访问Bank值;当海明距离值大于1时,则直接插入banksel指令;S38、获取基本块的下一条指令。其中,所述S36步骤中的获取当前Bank值和访问Bank值不同的位置的位值并进行替换具体是指:若当前Bank值变为访问Bank值,对应的位置的值是从0变为1,则插入bsf指令,反之若是从1变为0则插入bcf指令。在传统的C编译器开发过程中,通过该方法实现SRAM页选择优化后可减少访问不同SRAM页所产生的切换页指令,提高C编译器的优化效率,进而提高嵌入式应用程序的运行速度并能够使用节省的ROMSizes来提供更丰富的功能。附图说明图1是实施例中的获取基本块指令集模块的处理流程图。图2是实施例中的获取海明距离模块的处理流程图。图3是实施例中的SRAM页选择优化执行模块的处理流程图。图4是实施例中的系统结构框图。具体实施方式以下结合附图与具体实施例对本专利技术的技术方案做进一步的详细说明。参照图4所示,本实施例是一种C编译器利用海明距离优化SRAM页选择的系统,主要包括有获取基本块指令集模块、获取海明距离值模块和SRAM页选择优化执行模块,各模块的功能和处理流程详细如下:一、获取基本块指令集模块获取基本块指令集模块的功能是依次遍历函数的所有基本块,把任一基本块中的指令保存到顺序容器中,以便供后续优化使用。参照图1所示,该模块实现的处理本文档来自技高网
...

【技术保护点】
1.一种C编译器利用海明距离优化SRAM页选择的方法,包括如下步骤:S1,依次遍历函数的所有基本块,把任一基本块中的指令保存到顺序容器中;S2,根据SRAM中当前Bank值和访问Bank值,计算出海明距离值,访问Bank值是指将要访问SRAM变量所在的Bank值;S3,当存在访问SRAM变量时,根据海明距离值来决定是否要插入页选择指令,以及插入何种页选择指令。

【技术特征摘要】
1.一种C编译器利用海明距离优化SRAM页选择的方法,包括如下步骤:S1,依次遍历函数的所有基本块,把任一基本块中的指令保存到顺序容器中;S2,根据SRAM中当前Bank值和访问Bank值,计算出海明距离值,访问Bank值是指将要访问SRAM变量所在的Bank值;S3,当存在访问SRAM变量时,根据海明距离值来决定是否要插入页选择指令,以及插入何种页选择指令。2.根据权利要求1所述的C编译器利用海明距离优化SRAM页选择的方法,其特征在于,所述S1步骤中具体包括:S11、初始化获取基本块指令;S12、获取函数的一个基本块,获取失败则结束;S13、从基本块中取出一条指令,保存该指令到特定的容器中,如取出失败则结束;S14、从基本块中取出下一条指令,保存该指令到特定的容器中,如取出失败则获取函数的下一个基本块。3.根据权利要求1所述的C编译器利用海明距离优化SRAM页选择的方法,其特征在于,所述S2步骤中还包括:当计算出的海明距离值为1时,还要计算出这两个Bank值之间的不同处于哪个bit位置上。4.根据权利要求3所述的C编译器利用海明距离优化SRAM页选择的方法,其特征在于,所述S2步骤中具体包括:S21、初始化获取海明距离值;S22、设置当前Bank值为Src,下一条访问SRAM指令的Bank值的值为Dest;S23、获取Src的第N位的值,获取Dest第N位的值,N=0‐8为整数;S24、判定上述第N位的两个值是否不同,是则海明距离值加1,否则获取Src的第N+1位的值与获取Dest第N+1位的值;S25、保存位值不同的位置值。5.根据权利要求1所述的C编译器...

【专利技术属性】
技术研发人员:陈元丰
申请(专利权)人:芯海科技深圳股份有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1