CN101794230A - 用于多核的c语言扩充及编译系统支持方法 - Google Patents
用于多核的c语言扩充及编译系统支持方法 Download PDFInfo
- Publication number
- CN101794230A CN101794230A CN 201010140826 CN201010140826A CN101794230A CN 101794230 A CN101794230 A CN 101794230A CN 201010140826 CN201010140826 CN 201010140826 CN 201010140826 A CN201010140826 A CN 201010140826A CN 101794230 A CN101794230 A CN 101794230A
- Authority
- CN
- China
- Prior art keywords
- processor
- language
- program
- keyword
- function
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于现有标准C语言的扩充方法,以便使现有C语言规范可应用于多核处理器的程序设计。并且描述了相应的对现有C语言编译系统的改进方法,使之能够支持上述改进方法,并且完成多核程序的编译工作。通过添加关键字“MCU”和“PUB”,将源程序按照不同的处理器核和公共存储区进行标注,并在本发明涉及的C语言前置编译程序的处理下,将其处理为按照不同处理器核和公共存储区对应的源程序文件,再调用传统C语言编译系统进行编译并最终得到一个或多个二进制程序文件,进行系统运行。本发明基于现有的C语言体系,采用添加关键字的方法对C语言程序进行扩展,在扩展C语言中兼容了所有的C语言的功能定义模块,应用简单,易于接受。能够保证按照传统C语言进行编译,并编译成用于多核处理器的二进制程序文件。在添加了本发明的前置编译程序的情况,能够在多核处理器上进行编译并生成可执行文件,便于扩展现有的编译软件,使之能够实现针对多核的编译。本发明可应用于基于多核技术的嵌入式控制器,并且与控制器类型并没有直接联系,只需要在编译系统中增加本前置编译程序即可实现,可广泛应用于所有多核处理器程序的编译系统中。
Description
技术领域
本发明涉及一种基于现有标准C语言的扩展方法及其编译系统支持方法,以便使现有C语言规范可应用于多核处理器的程序设计。并且描述了相应的对现有C语言编译系统的改进方法,使之能够支持上述改进方法,并且完成多核程序的编译工作。
背景技术
目前处理器的发展方向已经从单纯提高处理器运行速度的方向向多核处理器的方向发展,而在嵌入式系统领域,多核处理器处理器编译系统发展刚刚起步,发展有限,绝大部分知识产权也都掌握在国外公司手中。
所谓单核处理器一般定义为内部仅包括一个处理单元的处理器,而所谓多核处理器则包含了至少两个甚至多个处理单元,能够并行处理程序。
目前的C语言及其编译系统或者编译环境能够支持单核程序的程序设计及单核程序的编译,但是由于C语言本身设计时并没有多核处理器的概念,其设计本身缺少对多核处理器的支持,也不太适用于并行程序在多核处理器中的程序设计和编译。这主要是由以下几个方面的问题决定的。
首先,C语言程序定义的关键字中并没有定义对处理器的关键字,因此,所有程序在设计时,并不能区分是哪个处理器的程序;
其次,现有的编译器系统只能将所有代码编译成一个完整的二进制程序后,由某一个处理器执行。
正因为这两个问题,使得目前的嵌入式设计中依旧以单核程序设计为基础。程序的设计方法继续保持单核程序设计。
发明内容
在此处键入技术领域描述段落。
用于多核的C语言改进及编译系统支持方法
本发明的目的在于提供一种C语言程序设计方法,它基于标准C语言,并进行了扩展,使得C语言程序能够支持多核程序设计的要求,并能对多核程序进行分别编译形成每个处理器核各自的独立程序。在经过扩展C语言及其编译系统后,能够方便地使得现有的单核编译体系扩展到多核编译体系。
为达到上述目的,本发明的构思如下:
针对上述两个缺陷,我们认为,首先,由于现有的C语言并未对多核处理器中的每一个处理器核进行区分,因此,也没有定义相应的关键字,对处理器核进行区分。为此,本发明定义了新的C语言关键字,以便编译系统能够识别每一段程序是哪个处理器核对应的程序。
其次,由于现有的编译系统并不能支持这种多核编译,所以,不能对第一条中的关键字扩展进行编译,也不能将识别出来的多核程序转换成多核二进制程序文件。但是现有
的C语言编译系统却能够支持其他C语言的编译。所以可以在现有的C语言编译系统的基础上进行扩展,使其能够在维持原有功能的基础上扩展其对多核处理器的支持。
根据上述构思,本发明采用下述技术方案:
一种扩展C语言的方法,其特征是添加新的关键字,用新的关键字区别不同的处理器核,使得每一段程序都对应具体的处理器核。为了能够保证与现有C语言的兼容性,我们定义默认处理器为处理器0。
上述C语言扩充方法的具体步骤为:
a. 在C语言体系下,保持现有C语言所有关键字;
b. 添加新的关键字,保证其与其他关键字不重合,并且能够代表不同的处理器核,在此,我们选用了MCU、PUB作为新的关键字,其代表设置不同的处理器核;
c. 参照现有C语言一般格式,设计该关键字在C语言中的使用方法。根据现有C语言语法格式,我们设计了MCU、PUB关键字使用方法。
d.为保证与现有C语言程序的兼容性,设置默认处理器编号为0,即当处理器为单核处理器时,其默认处理器核编号即为0。对程序而言,当程序并未如上述c项在定义后作关键字定义时,我们默认所有定义变量、函数、中断定位在处理器0中。
e.在现有C语言编译原理的基础上,添加对这两个关键字进行处理的前置编译程序。
f、添加现有的C语言编译程序,在前置编译程序之后,对分类后的程序进行C语言编译。
上述的保留C语言所有关键字的方法为:
保留C语言所有关键字的方法是保留编译系统对C语言关键字的支持,为此,我们采用了保留原有C语言编译系统的方法,而将本发明所涉及的第e项前置编译程序作为前置独立程序放置在传统编译系统之前。
当程序中没有’MCU’或者’PUB’关键字时,经过前置编译程序时,对其不作处理。生成与原文件一致的文件然后送传统C语言编译程序进行处理,结果是可以保持对传统C语言的兼容性。
上述添加新关键字的方法为:
在本发明所涉及的第e项前置编译程序中,对新添加的关键字进行词法、语法、语义预处理,并按照这些关键字对程序所涉及的定义变量、定义函数等进行分类,形成中间文件,并将这些文件作为传统编译系统的输入文件,通过传统编译系统进行处理。
在本发明中,采用’MCU’标示不同的处理器核专属变量、函数和中断等,采用’PUB’标示共享变量、函数和中断。
上述关键字在C语言中的使用方法设计如下:
1、MCU关键字可以置于所有定义语句后面,在其后面为相应的处理器编号:
(a) 变量定义;置于该定义变量后面,标示该变量为某一处理器的专有变量。如:
inta1MCU1;//’int’为变量类型,’a1’为变量名称,‘MCU’为关键字, //‘1’表示该变量类型存储在处理器核1中
(b) 函数定义:置于该函数定义后面,标示该函数定位在某一处理器的程序存储区中,
并且在该处理器中执行。如:
voidfunction1MCU1;//’void’为函数返回值类型,’function1’为//函数名称,‘MCU’为关键字,’1’表示该函数存储在处理器核1所属程序//存储空间中,并由处理器核1执行
(c) 中断定义:置于该中断定义后面,标示该中断定位在某一处理器中,该中断由该处理器处理。如:
Voidinterrupt1MCU1;//’void’为函数返回值类型,’interrupt1’
//为函数名称,‘MCU’为关键字,’1’表示该函数存储在处理器核1所属程//序存储空间中,该中断由处理器核1执行中断处理
2、PUB关键字针对存在公共存储区的处理器可以置于所有定义语句后面,在其后面为相应的公共存储区编号;
(a) 变量定义;置于该定义变量后面,标示该变量为某一公共存储区的专有变量。如:
inta1PUB1;//’int’为变量类型,’a1’为变量名称,‘MCU’为关键字, //‘1’表示该变量类型存储在公共存储区1中
(b) 函数定义:置于该函数定义后面,标示该函数定位在公共程序存储区中,并且可以由处理器任一处理器核中执行。如:
voidfunction1PUB1;//’void’为函数返回值类型,’function1’为//函数名称,‘PUB’为关键字,’1’表示该函数存储在公共存储区1中,可//以由任一处理器核执行
(c) 中断定义:置于该中断定义后面,标示该中断定位在公共存储区中,该中断可以由任一处理器处理。如:
Voidinterrupt1PUB1;//’void’为函数返回值类型,’interrupt1’
//为函数名称,‘PUB’为关键字,’1’表示该函数存储在公共存储区1中,该中断可以由任一处理器核执行
上述设置默认处理器的方法如下:
在前置编译程序中,定义默认处理器编号为0,当程序源文件中的变量定义、函数定义、中断定义没有出现MCU、PUB关键字时,在前置编译程序中将该变量定义、函数定义、中断定义归类为默认处理器编号为0,并整理到处理器编号为0的处理器核对应中间文本中。
若源程序中出现“MCU”或“PUB”关键字,则按照上述c项方法进行前置编译。
上述对两个关键字进行处理的前置编译程序方法如下:
前置编译程序的主要功能是按照源程序的“MCU”关键字定义将源文件进行整理并添加按照对应处理器核应用说明的程序存储规则要求的存储空间定位指令。前置编译程序由我们设计完成,其包括三部分:
一是对“MCU”的处理,按照该关键字后的编号值将各个变量、源程序、中断函数等分类并整理为各个处理器核对应的中间文件。
二是对“PUB”的处理,将所有包含该关键字的变量、函数、中断整理归类为勇于存储于公共存储区的文件。
三是对上述处理形成的文件添加定位信息。由于各个多核处理器对于其程序存储空间的分配规则是不同的,主要是以下几种:
1、共用程序存储区,但各个处理器核对应的程序位于不同的存储空间地址,某些多核
处理器还包含共用程序的存储区。比如:有些16位处理器将0x0000~0x7fff作为处理器0对应的程序存储区,将0x8000~0xffff作为处理器1对应的程序存储区;有些则将0x0000~0x3fff作为处理器0对应的程序存储区,将0x4ffff~0x7fff作为处理器1对应的程序存储区,将0x8000~0xffff作为公共程序存储区。此时程序编译结果则需要按照统一的二进制程序文件进行编译,将不同处理器核的程序分配到不同的存储空间地址,但生成的二进制文件则是唯一的。
2、每个处理器核采用各自独立的存储空间,即各个处理器核采用一一对应的程序存储空间,此时程序编译结果则需要按照每一个处理器核对应的程序存储空间进行存储,生成对应于各个程序存储空间的多个二进制文件。
所以,针对不同的处理器需要按照其应用规则添加不同的定位信息。
由于不同处理器的C语言定位指令不是完全一样的,所以不同处理器的需要添加的定位指令也不同。我们采用支持文件的方式实现对不同处理器的支持。支持文件在前置编译程序被调用,用于不同处理器的定位信息处理。
上述添加现有C语言编译程序的方法如下:
添加现有C语言编译程序的方法是在前置处理程序的最后调用现有的C语言编译程序,即在前置编译程序的最后,将前置编译程序生成的中间文件作为现有C语言编译程序的输入,并对生成的中间文件进行编译,从而生成连续的二进制文件。若是需要生成多个二进制文件,则需要多次调用现有的编译程序,生成多个二进制文件。
本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点:本发明基于现有的C语言体系,采用添加关键字的方法对C语言程序进行扩展,在扩展C语言中兼容了所有的C语言的功能定义模块,应用简单,易于接受。能够保证按照传统C语言进行编译,并编译成用于多核处理器的二进制程序文件。本发明同样的基于现有C语言编译系统,在添加了本发明的前置编译程序的情况,能够在多核处理器上进行编译并生成可执行文件,便于扩展现有的编译软件,使之能够实现针对多核的编译。本发明可应用于基于多核技术的嵌入式控制器,并且与控制器类型并没有直接联系,只需要在编译系统中增加本前置编译程序即可实现,可广泛应用于所有多核处理器程序的编译系统中。
附图说明
图1是前置编译程序主流程图。
图2是图1示例的词法分析程序流程图。
图3是图1示例的语法分析程序流程图。
图4是图1示例的“MCU”中间代码生成流程图。
图5是图1示例的“PUB”中间代码生成流程图。
具体实施方式
本发明的一个优选实施例结合附图详述如下:
针对Freescale的双核处理器MC9S12XEP100,我们采用如下一段例程:
例程1:
#include<hidef.h> /*commondefinesandmacros*/
#include"derivative.h" /*derivative-specificdefinitions*/
INT16UTimInterCount;
voidTIME_INIT(void){
ECT_TSCR2=0x05;
ECT_TSCR1=0x87;
}//允许主定时器开始计数
voidMain()
{
INT16Ui;
TimInterCount=0;
TIME_INIT();//TimerInitialFunction
for(;;;)
{
If(TimInterCount>5000)
{ PB6=~PB6;
TimInterCount=0; }
}
}
#pragmaCODE_SEGNON_BANKED
__interrupt16voidtimerbreak(void)
{
DisableInterrupts; //关总中断
TimInterCount++; //中断次数加一,中断38次为一秒
TimerIP=1;
ECT_TFLG2=0x80; //清除定时器溢出标志位
EnableInterrupts; //开总中断
}
上述例程1是一个可以采用单核处理的程序,其中,main()是主程序,而timerbreak()是定时器终端处理程序。TIME_INIT()是定时器的初始化程序。在该程序中,还定义了公共变量TimInterCount,被两个程序使用,并连接两个程序。针对该程序,我们采用下述的流程来通过对C语言的扩展实现对该程序用于多核的程序设计和程序编译:
1)、如例程2中所示,保留了所有标准C语言的关键字及其使用方法,程序可以在单核处理器中运行。
2)、添加了关键字MCU及PUB,使其明确不同的处理器核及其相应的存储空间和运行用处理器。添加后的程序如例程2所示。
例程1和例程2仅为说明本发明与ANSIC之间的继承关系。在本专利的应用中,直接采用例程2的MCU、PUB关键字应用即可。
例程2:
#include<hidef.h> /*commondefinesandmacros*/
#include"derivative.h" /*derivative-specificdefinitions*/
INT16UTimInterCountPUB0;
voidTIME_INIT(void)MCU0{
ECT_TSCR2=0x05;
ECT_TSCR1=0x87;
}//允许主定时器开始计数
voidMain()
{
INT16Ui;
TimInterCount=0;
TIME_INIT();//TimerInitialFunction
for(;;;)
{
If(TimInterCount>5000)
{ PB6=~PB6;
TimInterCount=0; }
}
}
#pragmaCODE_SEGNON_BANKED
__interrupt16voidtimerbreak(void)MCU1
{
DisableInterrupts; //关总中断
TimInterCount++; //中断次数加一,中断38次为一秒
TimerIP=1;
ECT_TFLG2=0x80; //清除定时器溢出标志位
EnableInterrupts; //开总中断
}
3)、如上面例程2所示,“MCU”及“PUB”关键字在程序中的用法类似于传统C语言的用法。其中,“MCU”明确了程序、变量和中断所针对的处理器核,“PUB”则明确了程序、变量和中断所针对的公共存储区。
4)、上述程序由前置编译程序进行处理,并生成对应多核处理器的中间文件。
5)、生成的中间文件被原有的C语言编译程序调用,并进行编译,生成相应二进制文件。
上述保留C语言关键字的方法如上例程2所示,程序中除了“MCU”和“PUB”关键字,其他C语言程序都在遵循ANSIC的规则。当由前置编译程序生成中间文件时,这两个关键字被处理掉,并被删除,从而生成可以被原有C语言编译程序接受的中间文件。其具体处理流程在针对第3)项,前置编译程序中描述。
上述添加关键字MCU及PUB的方法如例程2中所示,针对变量、中断和函数的使用方式类似于ANSIC中的规则。采用在定义后加入MCU和PUB关键字即可。如:
voidTIME_INIT(void)MCU0
上述语句定义了一个存储并运行在处理器核0中的函数,该函数主要用于主函数对定时器模块的初始化操作。
voidMain()
上述语句定义了一个主函数,采用默认定义的方式,没有采用“MCU”或者“PUB”关键字。
__interrupt16voidtimerbreak(void)MCU1
上述语句定义了一个运行在处理器核1中的中断处理程序,采用了“MCU”关键字定义,后面标明的“1”表示处理器核编号。
INT16UTimInterCountPUB0;
上述语句定义了一个16位整数型变量,由于该变量被两个处理器核共同使用,我们可以将他定义在公共存储区中,即用PUB关键字定义,由于MC9S12XEP100芯片的RAM中并没有进行公共存储区分区,所以,应存储在存储区0。
上述由前置编译程序对程序进行处理的方法如下:
前置编译程序是针对本发明所涉及的“MCU”和“PUB”关键字设计的,其基于现有的C语言编译程序,目的是为了将“MCU”和“PUB”关键字进行前置处理,并按照处理结果将这两个关键字从原文件中去除,从而形成新的可以被传统C语言编译程序进行处理的程序文本。
前置编译程序主流程图如附图1所示,上述例程2在文本编译完成后,由前置编译程序读入,并进行如下处理:
a、进行“MCU”和“PUB”关键字词法分析,即对组成源程序的字符串进行扫描和识别,识别出一个个具独立意义的单词(或称符号)、标示符等,并将识别出的单词用统一长度的标准形式来表示。如在上例中识别出“MCU”和“PUB”关键字等。
b、在词法分析输出的单词流基础上,根据源语言的语法规则分析这种单词流是否正确地组成各类语法单位,即进行语法分析。如短语、子句、程序段和程序等。如“MCU1”和“voidmain(){……}”.
c、对于不包含“MCU”和“PUB”关键字的程序直接结束前置编译程序,并认为是传统C语言编写的程序,而调用原有的C语言编译程序进行编译。
d、针对经过语法分析的单词流,若其在语法结构上是正确的,就可以在这个基础上进行实质性翻译工作,将单词流按照“MCU”、“PUB”进行语义分析。
e、按照“MCU”关键字定义的意义,针对上述单词流,按照每一个处理器核所属的函数、变量、中断进行分类,并按照处理器核所规定的程序存储区添加定位指令。
f、按照“PUB”关键字定义的意义,针对上述单词流,按照公共存储区的定义,对公共存储变量、中断、函数进行分类,并按照处理器所规定的公共存储区定义添加相应定位指令。
上述关键字词法分析的方法,如附图2所示。
首先逐字符读取源文件中的字符,以空格、引号、分号等标点为比较关键字,将空格分隔的每一个单词作为一个字段存储到字段缓冲区直至源程序结尾,并将字段缓冲区中的所有内容保存为字段文件。然后,逐个读取字段文件中的单词,与C语言关键字列表中的关键字逐一比较,将关键字作相应标注,即标注关键字类型及编号,并将这些信息保存到字段文件中。
上述语法分析的方法,如附图3所示。
读取字段文件,根据传统C语言语法分析方法分析字段文件中的段落——即将文件按照定义语句、函数语句、中断语句等进行相应分类。然后针对其中的预定义语句按照传统C语言预定义语句的定义进行处理。
分析其中包含的“MCU”及“PUB”关键字,对不包含这些关键字的按照对应处理器核及公共存储区编号为“0”处理,针对包含这些关键字的,按其后的编号标注该段落程序为相应处理器核或者公共存储区。
上述对于不包含“MCU”和“PUB”关键字的程序直接结束前置编译程序的方法如下:
若上述语法分析中未发现“MCU”和“PUB”关键字,则结束前置编译程序。直接调用传统C语言编译程序。
上述按照“MCU”关键字进行分类的方法如附图4所示。
按照上述语法分析中的段落分析,逐段落读取源程序,并根据语法分析中的处理器核的标注将源程序分别转存到不同的处理器核文件中,最后在文件起始位置按照处理器配置文件添加定位语句,将相应文件定位在处理器程序存储空间的相应位置。
上述按照“PUB”关键字进行分类的方法如附图5所示。
按照上述语法分析中的段落分析,逐段落读取源程序,并根据语法分析中的公共存储区的标注将源程序分别转存到不同的公共存储区文件中,最后在文件起始位置按照处理器配置文件添加定位语句,将相应文件定位在处理器公共存储空间的相应位置。
Claims (7)
1.一种扩展C语言的方法,其特征是添加新的关键字,用新的关键字区别不同的处理器核,使得每一段程序都对应具体的处理器核。为了能够保证与现有C语言的兼容性,我们定义默认处理器为处理器0。上述C语言扩充方法的具体步骤为:
a. 在C语言体系下,保持现有C语言所有关键字;
b. 添加新的关键字,保证其与其他关键字不重合,并且能够代表不同的处理器核,在此,我们选用了MCU、PUB作为新的关键字,其代表设置不同的处理器核;
c. 参照现有C语言一般格式,设计该关键字在C语言中的使用方法。根据现有C语言语法格式,我们设计了MCU、PUB关键字使用方法。
d.为保证与现有C语言程序的兼容性,设置默认处理器编号为0,即当处理器为单核处理器时,其默认处理器核编号即为0。对程序而言,当程序并未如上述c项在定义后作关键字定义时,我们默认所有定义变量、函数、中断定位在处理器0中。
e.在现有C语言编译原理的基础上,添加对这两个关键字进行处理的前置编译程序。
f、添加现有的C语言编译程序,在前置编译程序之后,对分类后的程序进行C语言编译。
2.根据权利要求1所述的保留C语言所有关键字的方法为:
保留C语言所有关键字的方法是保留编译系统对C语言关键字的支持,为此,我们采用了保留原有C语言编译系统的方法,而将本发明所涉及的第e项前置编译程序作为前置独立程序放置在传统编译系统之前。
当程序中没有’MCU’或者’PUB’关键字时,经过前置编译程序时,对其不作处理。生成与原文件一致的文件然后送传统C语言编译程序进行处理,结果是可以保持对传统C语言的兼容性。
3.根据权利要求1所述的添加新关键字的方法为:
在本发明所涉及的第e项前置编译程序中,对新添加的关键字进行词法、语法、语义预处理,并按照这些关键字对程序所涉及的定义变量、定义函数等进行分类,形成中间文件,并将这些文件作为传统编译系统的输入文件,通过传统编译系统进行处理。
在本发明中,采用’MCU’标示不同的处理器核专属变量、函数和中断等,采用’PUB’标示共享变量、函数和中断。
4.根据权利要求1所述的关键字在C语言中的使用方法设计如下:
1)、MCU关键字可以置于所有定义语句后面,在其后面为相应的处理器编号:
(a) 变量定义;置于该定义变量后面,标示该变量为某一处理器的专有变量。如:
inta1MCU1;//’int’为变量类型,’a1’为变量名称,‘MCU’为关键字, //‘1’表示该变量类型存储在处理器核1中
(b) 函数定义:置于该函数定义后面,标示该函数定位在某一处理器的程序存储区中,并且在该处理器中执行。如:
voidfunction1MCU1;//’void’为函数返回值类型,’function1’为//函数名称,‘MCU’为关键字,’1’表示该函数存储在处理器核1所属程序//存储空间中,并由处理器核1执行
(c) 中断定义:置于该中断定义后面,标示该中断定位在某一处理器中,该中断由该处理器处理。如:
Voidinterrupt1MCU1;//’void’为函数返回值类型,’interrupt1’
//为函数名称,‘MCU’为关键字,’1’表示该函数存储在处理器核1所属程//序存储空间中,该中断由处理器核1执行中断处理
2)、PUB关键字针对存在公共存储区的处理器可以置于所有定义语句后面,在其后面为相应的公共存储区编号;
(a) 变量定义;置于该定义变量后面,标示该变量为某一公共存储区的专有变量。如:
inta1PUB1;//’int’为变量类型,’a1’为变量名称,‘MCU’为关键字, //‘1’表示该变量类型存储在公共存储区1中
(b) 函数定义:置于该函数定义后面,标示该函数定位在公共程序存储区中,并且可以由处理器任一处理器核中执行。如:
voidfunction1PUB1;//’void’为函数返回值类型,’function1’为//函数名称,‘PUB’为关键字,’1’表示该函数存储在公共存储区1中,可//以由任一处理器核执行
(c) 中断定义:置于该中断定义后面,标示该中断定位在公共存储区中,该中断可以由任一处理器处理。如:
Voidinterrupt1PUB1;//’void’为函数返回值类型,’interrupt1’
//为函数名称,‘PUB’为关键字,’1’表示该函数存储在公共存储区1中,该中断可以由任一处理器核执行。
5.根据权利要求1所述的设置默认处理器的方法如下:
在前置编译程序中,定义默认处理器编号为0,当程序源文件中的变量定义、函数定义、中断定义没有出现MCU、PUB关键字时,在前置编译程序中将该变量定义、函数定义、中断定义归类为默认处理器编号为0,并整理到处理器编号为0的处理器核对应中间文本中。
若源程序中出现“MCU”或“PUB”关键字,则按照上述c项方法进行前置编译。
6.根据权利要求1所述的对两个关键字进行处理的前置编译程序方法如下:
前置编译程序的主要功能是按照源程序的“MCU”关键字定义将源文件进行整理并添加按照对应处理器核应用说明的程序存储规则要求的存储空间定位指令。前置编译程序由我们设计完成,其包括三部分:
一是对“MCU”的处理,按照该关键字后的编号值将各个变量、源程序、中断函数等分类并整理为各个处理器核对应的中间文件。
二是对“PUB”的处理,将所有包含该关键字的变量、函数、中断整理归类为勇于存储于公共存储区的文件。
三是对上述处理形成的文件添加定位信息。由于各个多核处理器对于其程序存储空间的分配规则是不同的,主要是以下几种:
1)、共用程序存储区,但各个处理器核对应的程序位于不同的存储空间地址,某些多核处理器还包含共用程序的存储区。比如:有些16位处理器将0x0000~0x7fff作为处理器0对应的程序存储区,将0x8000~0xffff作为处理器1对应的程序存储区;有些则将0x0000~0x3fff作为处理器0对应的程序存储区,将0x4ffff~0x7fff作为处理器1对应的程序存储区,将0x8000~0xffff作为公共程序存储区。此时程序编译结果则需要按照统一的二进制程序文件进行编译,将不同处理器核的程序分配到不同的存储空间地址,但生成的二进制文件则是唯一的。
2)、每个处理器核采用各自独立的存储空间,即各个处理器核采用一一对应的程序存储空间,此时程序编译结果则需要按照每一个处理器核对应的程序存储空间进行存储,生成对应于各个程序存储空间的多个二进制文件。
所以,针对不同的处理器需要按照其应用规则添加不同的定位信息。
由于不同处理器的C语言定位指令不是完全一样的,所以不同处理器的需要添加的定位指令也不同。我们采用支持文件的方式实现对不同处理器的支持。支持文件在前置编译程序被调用,用于不同处理器的定位信息处理。
7.根据权利要求1所述的添加现有C语言编译程序的方法如下:
添加现有C语言编译程序的方法是在前置处理程序的最后调用现有的C语言编译程序,即在前置编译程序的最后,将前置编译程序生成的中间文件作为现有C语言编译程序的输入,并对生成的中间文件进行编译,从而生成连续的二进制文件。若是需要生成多个二进制文件,则需要多次调用现有的编译程序,生成多个二进制文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010140826 CN101794230A (zh) | 2010-04-07 | 2010-04-07 | 用于多核的c语言扩充及编译系统支持方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010140826 CN101794230A (zh) | 2010-04-07 | 2010-04-07 | 用于多核的c语言扩充及编译系统支持方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101794230A true CN101794230A (zh) | 2010-08-04 |
Family
ID=42586942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010140826 Pending CN101794230A (zh) | 2010-04-07 | 2010-04-07 | 用于多核的c语言扩充及编译系统支持方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101794230A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135894A (zh) * | 2010-10-13 | 2011-07-27 | 华为技术有限公司 | 一种多核在线补丁方法和装置 |
CN102880497A (zh) * | 2012-09-28 | 2013-01-16 | 无锡江南计算技术研究所 | 一种编译器及软件管理存储器的重用优化方法 |
CN112579088A (zh) * | 2019-09-27 | 2021-03-30 | 无锡江南计算技术研究所 | 面向异构混合编程的一站式程序编译方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667135A (zh) * | 2009-09-30 | 2010-03-10 | 浙江大学 | 一种交互式并行化编译系统及其编译方法 |
CN101751280A (zh) * | 2008-11-28 | 2010-06-23 | 上海芯豪微电子有限公司 | 针对多核/众核处理器程序分割的后编译系统 |
-
2010
- 2010-04-07 CN CN 201010140826 patent/CN101794230A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751280A (zh) * | 2008-11-28 | 2010-06-23 | 上海芯豪微电子有限公司 | 针对多核/众核处理器程序分割的后编译系统 |
CN101667135A (zh) * | 2009-09-30 | 2010-03-10 | 浙江大学 | 一种交互式并行化编译系统及其编译方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135894A (zh) * | 2010-10-13 | 2011-07-27 | 华为技术有限公司 | 一种多核在线补丁方法和装置 |
CN102135894B (zh) * | 2010-10-13 | 2015-11-25 | 华为技术有限公司 | 一种多核在线补丁方法和装置 |
US9430399B2 (en) | 2010-10-13 | 2016-08-30 | Huawei Technologies Co., Ltd. | Multi-core online patching method and apparatus |
CN102880497A (zh) * | 2012-09-28 | 2013-01-16 | 无锡江南计算技术研究所 | 一种编译器及软件管理存储器的重用优化方法 |
CN102880497B (zh) * | 2012-09-28 | 2015-05-20 | 无锡江南计算技术研究所 | 一种编译器及软件管理存储器的重用优化方法 |
CN112579088A (zh) * | 2019-09-27 | 2021-03-30 | 无锡江南计算技术研究所 | 面向异构混合编程的一站式程序编译方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6993753B2 (en) | Compiler for parallel computer | |
US5437037A (en) | Simulation using compiled function description language | |
US5862384A (en) | Compiler optimizer that moves loop invariant expressions | |
CN100533382C (zh) | 程序变换方法 | |
CN109522225A (zh) | 一种自动化测试断言方法及装置、测试平台及存储介质 | |
CN102103481A (zh) | 字节序转换工具 | |
CN110262800A (zh) | 多语言处理方法及装置 | |
CN110096264A (zh) | 一种代码运行方法及装置 | |
CN101794230A (zh) | 用于多核的c语言扩充及编译系统支持方法 | |
US5274793A (en) | Automatic logic generation method for pipeline processor | |
CN112965909A (zh) | 测试数据、测试用例生成方法及系统、存储介质 | |
Klabnik et al. | with contributions from the Rust community | |
US7133993B1 (en) | Inferring size of a processor memory address based on pointer usage | |
CN113900657A (zh) | 读取数据规则的方法和电子设备、存储介质 | |
Jones et al. | TEMPO: A Unified Treatment of Binding Time and Parameter Passing Concepts in Programming Languaues | |
Nakasho | Development of a flexible Mizar tokenizer and parser for information retrieval system | |
CN110244954A (zh) | 一种应用程序的编译方法及设备 | |
CN112199217A (zh) | 一种软硬协同的线程私有数据访问优化方法 | |
CN116680705B (zh) | 基于特征提取的Rust程序缺陷自动检测方法及系统 | |
CN117114003A (zh) | 一种基于Trie树的许可证识别方法、系统及介质 | |
Kumar et al. | Revolutionizing Compilation: Lexical Analysis Approaches for Parallel Multi-Core Processing | |
Maliavko et al. | Functionally Imperative Programming Language El and its Implementation | |
Gustedt | Modular C | |
Zhong et al. | An Automated and Flexible Multilingual Bug-Fix Dataset Construction System | |
Dabrowski | On Single-Valuedness in Textually Aligned SPMD Programs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20100804 |