__iLINE__和__FILE__等内置宏的含义

本文介绍了几个常用的编译器内置宏定义,包括__LINE__、__FILE__、__DATE__、__TIME__等,这些宏可以用于跨平台源码编写及输出调试信息。

编译器内置宏:

先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。

ANSI C标准中有几个标准预定义宏(也是常用的):

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

__cplusplus:当编写C++程序时该标识符被定义。

编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。

#!/bin/env python3 ######################/usr/bin/python import argparse, sys, time, os, gzip, re, collections, json, shutil #import pandas as pd #sys.path.append('/home/w00412942/scripts') #import eprocs class gen_apg_file(): def __init__(self, dArg, idebug_mode): self.patNum = int(dArg.pNum) #self.patNum = dArg.pNum self.testcfg = dArg.testcfg self.algo = dArg.algo self.step = dArg.step self.bit = dArg.bit self.vbuild = dArg.vbuild self.devPath = dArg.devPath self.outpath = dArg.outpath #one macro = 512K bit, 256Mbit = 512*512Kbit self.less_512K = ["256K","128K","64K","32K","16K","8K","6K","4K","2K","1K"] if self.step == "256M": self.zstep = 512 elif self.step == "128M": self.zstep = 256 elif self.step == "64M": self.zstep = 128 elif self.step == "32M": self.zstep = 64 elif self.step == "16M": self.zstep = 32 elif self.step == "8M": self.zstep = 16 elif self.step == "4M": self.zstep = 8 elif self.step == "2M": self.zstep = 4 elif self.step == "1M": self.zstep = 2 elif self.step == "512K": self.zstep = 1 elif self.step in self.less_512K: self.zstep = 1 else: self.zstep = 0 #one wordline = 8(bit width)*64bit =512bit, 256K = 512*512bit if self.step == "256K": self.ystop = 512 elif self.step == "128K": self.ystop = 256 elif self.step == "64K": self.ystop = 128 elif self.step == "32K": self.ystop = 64 elif self.step == "16K": self.ystop = 32 elif self.step == "8K": self.ystop = 16 elif self.step == "6K": self.ystop = 12 elif self.step == "4K": self.ystop = 8 elif self.step == "2K": self.ystop = 4 elif self.step == "1K": self.ystop = 2 else: self.ystop = 0 self.astop = 0 self.zstop = 0 self.zStart = int(dArg.zStart) self.apgCoreName = [] self.iTSELR = {} self.iTSELW = {} self.iTRA = {} self.iTWA = {} self.iTM = {} self.patName = "" self.apgFileName = "" self.mtp_pat_dir = self.devPath+"/mtp/pattern_defs" self.mtp_apg_dir = self.mtp_pat_dir+"/"+self.outpath self.mtp_rec_dir = self.devPath+"/mtp/recon_datalib" self.mtp_vec_dir = self.devPath+"/vectors/mempats/"+self.outpath if self.algo == "M13N_mask": self.progName = "MARCH13N_mask" elif self.algo == "CHKWP_mask": self.progName = "CHKWP_mask" elif self.algo == "CHKWN_mask": self.progName = "CHKWN_mask" elif self.algo == "CHKRP_mask": self.progName = "CHKRP_mask" elif self.algo == "CHKRN_mask": self.progName = "CHKRN_mask" elif self.algo == "CHKWP_BL_mask": self.progName = "CHKWP_BL_mask" elif self.algo == "CHKWN_BL_mask": self.progName = "CHKWN_BL_mask" elif self.algo == "CHKRP_BL_mask": self.progName = "CHKRP_BL_mask" elif self.algo == "CHKRN_BL_mask": self.progName = "CHKRN_BL_mask" elif self.algo == "CHKWP_BL": self.progName = "CHKWP_BL" elif self.algo == "CHKWN_BL": self.progName = "CHKWN_BL" elif self.algo == "CHKRP_BL": self.progName = "CHKRP_BL" elif self.algo == "CHKRN_BL": self.progName = "CHKRN_BL" elif self.algo == "M13N": self.progName = "MARCH13N" elif self.algo == "CHKWP": self.progName = "CHKWP" elif self.algo == "CHKWN": self.progName = "CHKWN" elif self.algo == "CHKRP": self.progName = "CHKRP" elif self.algo == "CHKRN": self.progName = "CHKRN" elif self.algo == "RI": self.progName = "RI" elif self.algo == "RI100MS": self.progName = "RI100MS" elif self.algo == "CHECKBOARD": self.progName = "CHECKBOARD" else: self.progName = "" raise Exception("[Error:] the algo <%s> is supportted by this scr!"%(self.algo)) if '_BL' in self.progName: print("[INFO:]the para -bit need define!") self.apgCompileLog = self.mtp_apg_dir + "/" +self.algo + "_" + self.step + "_compile.log" self.mtpVecPmfl = self.mtp_vec_dir + "/" +self.algo + "_" + self.step + "_vec.pmfl" self.tamplate = "./incoming/tamplate_Q0001.apg" #self.digtalAll = [] def praseCfg(self): Finput=open(self.testcfg, 'r') for iline in Finput: rm = reCfg.match(iline) if rm: self.iTSELR[rm.group(6)] = rm.group(1) self.iTSELW[rm.group(6)] = rm.group(2) self.iTRA[rm.group(6)] = rm.group(3) self.iTWA[rm.group(6)] = rm.group(4) self.iTM[rm.group(6)] = rm.group(5) Finput.close() #8192 = 2^(y+x) (y+x =13 one marco addr len) #8 = 2^x (x =3 bitline addr) def genApg(self): i_count = 0 i_zStart = 0 if os.path.isdir(self.devPath) == True: if os.path.isdir(self.mtp_apg_dir) == False: os.makedirs(self.mtp_apg_dir) else: print("[Info:]the apg dir has existed!") else: raise Exception("[Error:]device dir is not created, please create this dir before gen apg file!") for key in self.iTSELR.keys(): for inum in range(1,self.patNum+1): i_count = inum + int(self.zStart/self.zstep) i_zStart = (i_count-1)*self.zstep if self.step in self.less_512K: self.astop = i_zStart*8192 + self.ystop*8 self.zstop = i_zStart + self.zstep else: self.astop = i_zStart*8192 + self.zstep*8192 self.zstop = i_zStart + self.zstep if '_BL' in self.progName: self.patName = self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count) + "Label" self.apgFileName = self.mtp_apg_dir + r"/" + self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count) + ".apg" self.apgCoreName.append(self.progName + "_" + self.step + "_B" + self.bit + "_" + key + "_" + str(i_count)) else: self.patName = self.progName + "_" + self.step + "_" + key + "_" + str(i_count) + "Label" self.apgFileName = self.mtp_apg_dir + r"/" + self.progName + "_" + self.step + "_" + key + "_" + str(i_count) + ".apg" self.apgCoreName.append(self.progName + "_" + self.step + "_" + key + "_" + str(i_count)) Finput=open(self.tamplate, 'r') Foutput=open(self.apgFileName, 'w') for iline in Finput: rm = re.match(r'\s+:apgProgram',iline) if rm: tmp_line = re.sub(r"March13N_XXXK",self.progName,iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.match(r'\s+:testLabel',iline) if rm: tmp_line = re.sub(r"March13N_XXXK_YYY_0",self.patName,iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue if self.step in self.less_512K: rm = re.search(r'yStop',iline) if rm: tmp_line = re.sub(r"MAX_Y",str(self.ystop),iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'zStop',iline) if rm: tmp_line = re.sub(r"MAX_Z",str(self.zstop),iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'zStart',iline) if rm: tmp_line = re.sub(r"0",str(i_zStart),iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'aStop',iline) if rm: tmp_line = re.sub(r"2097152",str(self.astop),iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'iTSELR',iline) if rm: tmp_line = re.sub(r"0x7",self.iTSELR[key],iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'iTSELW',iline) if rm: tmp_line = re.sub(r"0x2",self.iTSELW[key],iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'iTRA',iline) if rm: tmp_line = re.sub(r"0x2",self.iTRA[key],iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'iTWA\s+',iline) if rm: tmp_line = re.sub(r"0x7",self.iTWA[key],iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue rm = re.search(r'iTM',iline) if rm: tmp_line = re.sub(r"1",self.iTM[key],iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue if '_BL' in self.progName: rm = re.search(r'BLine',iline) if rm: tmp_line = re.sub(r"4",self.bit,iline) Foutput.write("%s"%tmp_line) #print(tmp_line) continue Foutput.write("%s"%iline) Finput.close() Foutput.close() #print(self.apgFileName) def genVec(self): if os.path.isdir(self.mtp_vec_dir) == False: os.makedirs(self.mtp_vec_dir) else: print("[Info:]the vector dir has existed!") if os.path.isfile(self.apgCompileLog): os.remove(self.apgCompileLog) for iName in self.apgCoreName: apg_filename = self.mtp_apg_dir+"/"+iName+".apg" args_compile = "/opt/93000mts/mts/mtl/bin/apgc -v -r2 -lvs " + apg_filename + " -o " + self.apgCompileLog os.system(args_compile) sys.stdout.flush() apg_vec_file = self.mtp_apg_dir+"/"+iName+".apg.vec" if os.path.isfile(apg_vec_file): shutil.move(apg_vec_file,self.mtp_vec_dir + r"/" +iName+".apg.vec") else: raise Exception("[Error:]apg vec and file are not generated as expected!") apg_so_file = self.mtp_apg_dir+"/"+iName+"-EL7.x86_64.apg.rec.so" if os.path.isfile(apg_so_file): shutil.move(apg_so_file,self.mtp_rec_dir + r"/" + iName+"-EL7.x86_64.apg.rec.so") else: print("[Info:]there is no so file for algo <%s>"%(self.algo)) print("[Info:]the mtp vec file of algo <%s> is gen!"%(self.algo)) def genMtpPmfl(self): if os.path.isdir(self.mtp_vec_dir) == False: os.makedirs(self.mtp_vec_dir) else: print("[Info:]the vector dir has existed!") if os.path.isfile(self.mtpVecPmfl): os.remove(self.mtpVecPmfl) Fout=open(self.mtpVecPmfl, 'w') Fout.write("path:\n") pmfl_path="../vectors/mempats/"+self.outpath Fout.write("{}\n\n".format(pmfl_path)) Fout.write("files:\n") for iName in self.apgCoreName: apg_filename = iName+".apg.vec\n" Fout.write("%s"%apg_filename) Fout.close() print("[Info:]the pmfl file of algo <%s> is gen!"%(self.algo)) ################################ # Main ################################ reCfg = re.compile(r"^(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)") #total 512*512K memory block,256M bit #16*32*512K= 16*32M #32*16*512K= 32*16M #64*8*512K= 64*4M #128*4*512K= 128*2M #256*2*512K= 256*1M #512*1*512K= 512*512K if __name__ == "__main__": cmdArgDef = argparse.ArgumentParser(description='Parse input args for burst label') #cmdArgDef.add_argument('-mode', required=True, action='store', default="apg", help='(apg|prog)') #cmdArgDef.add_argument('-prog', required=False, action='store', default="MARCH13N.prog", help='(testmode config)') cmdArgDef.add_argument('-testcfg', required=False, action='store', default="test.cfg", help='(testmode config)') cmdArgDef.add_argument('-algo', required=True, action='store', default="M13N", help='(M13N|CHKWP|CHKWN|CHKRP|CHKRN|RI|RI100MS)') cmdArgDef.add_argument('-step', required=True, action='store', default="512K", help='(512K|256K|128K|64K|32K|16K|8K|6K|4K|2K|1K)') cmdArgDef.add_argument('-bit', required=False, action='store', default="0", help='(0|1|2|3)') cmdArgDef.add_argument('-pNum', required=True, action='store', default="1", help='(1|256|512|1024|2048|4096)') cmdArgDef.add_argument('-zStart', required=True, action='store', default="0", help='(BLK start addr = 0|512|1024|1536|2048|2560|3072|3584)') cmdArgDef.add_argument('-vbuild', required=False, action='store', default="YES", help='(YES|NO)') cmdArgDef.add_argument('-devPath', required=True, action='store', default=os.getcwd()+'/', help='(device path)') cmdArgDef.add_argument('-outpath', required=False, action='store', default=os.getcwd()+'/', help='(output path for apg file)') dArg = cmdArgDef.parse_args() idebug_mode = 1 oApgFile = gen_apg_file(dArg,idebug_mode) oApgFile.praseCfg() oApgFile.genApg() if dArg.vbuild == "YES": oApgFile.genVec() oApgFile.genMtpPmfl() if idebug_mode == 1: print("debug info as follow:") print(json.dumps(oApgFile.iTSELR,ensure_ascii=False, indent=4)) print(json.dumps(oApgFile.iTSELW,ensure_ascii=False, indent=4)) print(json.dumps(oApgFile.iTRA,ensure_ascii=False, indent=4)) print(json.dumps(oApgFile.iTWA,ensure_ascii=False, indent=4)) pass 实现什么功能
最新发布
10-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值