IC验证——perl脚本ccode_standard——c代码寄存器配置标准化

目录

1 脚本名称

2 脚本路径

3 脚本参数说明

4 脚本操作说明

5 脚本代码


1 脚本名称

ccode_standard

2 脚本路径

/scripts/bin/ccode_standard

3 脚本参数说明

次序

参数名

说明

1

address

(./rfdig;.;..;./boot)

指定脚本执行路径(可以为脚本所在路径的任意相对路径)

help

脚本使用帮助,打印说明信息

2

all

运行脚本后,脚本会解析全部rbus.cfg,并对参数1指定的目录中的.c文件进行寄存器配置代码标准化修改

module_name_seca.cfg

运行脚本后,脚本会解析参数2指定的rbus.cfg,并对参数1指定的目录中的.c文件进行寄存器配置代码标准化修改

示例

命令:ccode_standard  help

输出ccode_standard使用帮助信息

命令:ccode_standard  ./rfdig  rfdig_seca.cfg

对当前路径下的rfdig文件夹及其子文件夹下所有的.c文件中,有关rfdig_seca.cfg中的寄存器配置代码进行标准化修改;

命令:ccode_standard  .  crg_seca.cfg

对当前路径下的所有文件夹及其子文件夹下的所有.c文件中,所有有关crg_seca.cfg中的寄存器配置代码进行标准化修改;

命令:ccode_standard  .  all

对当前路径下的所有文件夹及其子文件夹下的所有.c文件中,所有模块的寄存器配置代码进行标准化修改;

说明

配置文件module_name_seca.cfg是被验模块寄存器的详细配置文件;脚本索引该文件的具体路径为:

$PROJ_SRC/design/scripts/rbus_scripts/rbus_cfg/

使用该脚本前请先gen_rbus;

4 脚本操作说明

        该脚本用于将如下所示的代码标准化,加速ST用例调整,该脚本可以反复多次调用,不会产生异常问题:

  1. 使用脚本前,首先gen_rbus,source,产生脚本需要解析的rbus.cfg文件,以及环境变量$ENV{PROJ_SRC};
  2. 根据脚本存放路径,指定脚本工作目录,如下例所示,脚本存放于case目录,我想修改rfdig文件夹下的.c文件,参考rfdig_seca.cfg;执行:ccode_standard  ./rfdig  rfdig_seca.cfg  >  1.log
  3. 如图所示,脚本只替换了有关rfdig的寄存器,iomux,crg等没有替换:

  4. 如下例所示,脚本存放于case目录,我想修改rfdig/rfdig_tc017文件夹下的.c文件,参考所有rbus.cfg文件;
  5. 执行:ccode_standard  ./rfdig/rfdig_m33_tc017  all  >  1.log

  6. 如图所示,脚本不仅替换了有关rfdig的寄存器,iomux,crg等都有替换:

  7.  

5 脚本代码

#! /usr/bin/perl -w

#==========================================================
# PERL MODULE 
#==========================================================

use Cwd;
use File::Path;
use File::Find;

#==========================================================
# PERL FUNCTION GetOptions (get command parameters)
#==========================================================
$g_work_dir  = $ARGV[0];
$g_seca_fl   = $ARGV[1];

#our $work_dir  = 'rfdig_m33_tc017';

#==========================================================
# SCRIPT MAIN  
#==========================================================

our @seca_fl_list;
our @seca_name;
our @seca_type;
our @seca_width;
our @seca_init_value;
our @seca_with_field;
our @seca_field_list_bgn;
our @seca_field_list_end;
our @seca_field_name;
our @seca_field_width;
our @seca_field_bgn_idx;
our @seca_field_end_idx;

our $ccode_standard_mark = 0;

Main();

sub RegMem{
    @seca_name           = ();
    @seca_type           = ();
    @seca_width          = ();
    @seca_init_value     = ();
    @seca_with_field     = ();
    @seca_field_list_bgn = ();
    @seca_field_list_end = ();
    @seca_field_name     = ();
    @seca_field_width    = ();
    @seca_field_bgn_idx  = ();
    @seca_field_end_idx  = ();
    if (open(SECA_ID,"$g_seca_fl") or die "cannot open $g_seca_fl, no such file") {
        @seca_array = <SECA_ID>;
        my $i       = 0;
        my $j       = 0;
        my $rbus_ok = 0;
    
        foreach $seca_line (@seca_array) {
            $seca_line =~ s/[\n\r]*//g;
            if ($seca_line =~ m/^\s*field_(\S+)\s+\[(\S+)\]\s*$/) {
                if($rbus_ok eq 1) {
                    $seca_with_field[$i-1]     = 1 ;
                    $seca_field_list_bgn[$i-1] = $j;
                    $rbus_ok                   = 0 ;
                }
                $seca_field_list_end[$i-1] = $j;
                my $field_name_tmp   = "\L$1";
                my $field_name_size  = push(@seca_field_name ,$field_name_tmp);
                my $field_port_tmp   = $2;
                if ($field_port_tmp =~ m/(\d+):(\d+)/) {
                    push(@seca_field_bgn_idx,int($2));
                    push(@seca_field_end_idx,int($1));
                    push(@seca_field_width,(int($1)-int($2)+1));
                } else {
                    push(@seca_field_bgn_idx,int($field_port_tmp));
                    push(@seca_field_end_idx,int($field_port_tmp));
                    push(@seca_field_width,1);
                }
                #print ("seca_with_field[",$i-1,"]     = ",$seca_with_field[$i-1]     ,"\n");
                #print ("seca_field_list_bgn[",$i-1,"] = ",$seca_field_list_bgn[$i-1] ,"\n");
                #print ("seca_field_list_end[",$i-1,"] = ",$seca_field_list_end[$i-1] ,"\n");
                #print ("seca_field_name[",$j,"]       = ",$seca_field_name[$j]       ,"\n");
                #print ("seca_field_width[",$j,"]      = ",$seca_field_width[$j]      ,"\n");
                #print ("seca_field_bgn_idx[",$j,"]    = ",$seca_field_bgn_idx[$j]    ,"\n");
                #print ("seca_field_end_idx[",$j,"]    = ",$seca_field_end_idx[$j]    ,"\n");
                $j = $j + 1;
            }
            if ($seca_line =~ m/^\s*rbus_(\S+)\s+(\S+)\s+(\w+)\s+(\d+)('\w+)\s+(\S+)\s*$/) {
                #print ("before match string: ",$`,     "\n");
                #print ("match string       : ",$&,     "\n");
                #print ("after  match string: ",$',     "\n");
                #print ("seca_postfix       : ",$1,     "\n");
                #print ("seca_type          : ",$2,     "\n");
                #print ("seca_scope         : ",$3,     "\n");
                #print ("seca_width         : ",int($4),"\n");
                #print ("seca_init_value    : ",$5,     "\n");
                #print ("seca_prefix        : ",$6,     "\n");
                #print ("seca_name          : ","$6_$1","\n");
                $seca_name[$i]             = "\L$6_$1";
                $seca_type[$i]             = $2;
                $seca_width[$i]            = int($4);
                $seca_init_value[$i]       = $5;

                $seca_with_field[$i] = 0;
                $i = $i+1;
                $rbus_ok = 1;
            }
        }
    }
}

sub GenMacroDefine{
    #print "c file is              : $_[0]\n";
    #print "c macro_define file is : $_[1]\n";
    $ccode_standard_mark = 0;
    open(ORIEN_FILE,">>$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                for ( $i = 0; $i < @seca_name; $i = $i +1) {
                    if ($seca_with_field[$i] eq 1) {
                        if ($line =~ m/^\s*(\w+)\[($seca_name[$i])\]\s*=\s*0x(\w+)\s*;.*$/) {
                            $ccode_standard_mark = 1;
                            print ORIEN_FILE "\n"."//"."$line";
                            my $seca_field_list_num  = $seca_field_list_end[$i] - $seca_field_list_bgn[$i] + 1;
                            for ($j = 0; $j < $seca_field_list_num; $j = $j+1) {
                                my $seca_field_width_tmp = $seca_field_width[$seca_field_list_bgn[$i]+$j];
                                my $seca_field_name_tmp  = "$seca_name[$i]"."_"."$seca_field_name[$seca_field_list_bgn[$i]+$j]";
                                my $seca_field_mask_tmp  = "$seca_field_name_tmp"."_mask ((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1)";
                                my $seca_field_shift_tmp = "$seca_field_name_tmp"."_shift $seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j]";
                                my $seca_field_bit_tmp   = "$seca_field_name_tmp"."_bit (1<<$seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j])";
                                if($seca_field_width_tmp eq 1){
                                    print ORIEN_FILE "#define $seca_field_bit_tmp\n";
                                } else {
                                    print ORIEN_FILE "#define $seca_field_mask_tmp\n";
                                    print ORIEN_FILE "#define $seca_field_shift_tmp\n";
                                }
                            }
                        }
                    }
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
    system ("awk '!a[\$0]++' $_[1] > $_[1]_tmp \&\& mv -f $_[1]_tmp $_[1]");
}

sub AddMacroDefine{
    #print "old c file is : $_[0]\n";
    #print "new c file is : $_[1]\n";
    #print "add   file is : $_[2]\n";
    my $add_ready = 0;
    open(ORIEN_FILE,">$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                if($line =~ m/^#include \"$_[2]\"$/) {

                } else {
                    print ORIEN_FILE "$line";
                }
                if ($add_ready eq 0) {
                    if ($line =~ m/^\s*\#include\s*\"\S+_define.c\"\s*$/) {
                        print ORIEN_FILE "\#include "."\"$_[2]\"\n";
                        $add_ready = 1;
                    }
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub GenSubContent{
    #print "old c file is : $_[0]\n";
    #print "new c file is : $_[1]\n";
    open(ORIEN_FILE,">>$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                my $line_match = 0;
                for ( $i = 0; $i < @seca_name; $i = $i + 1) {
                    if ($seca_with_field[$i] eq 1) {
                        if ($line =~ m/^(\s*)(\w+\[$seca_name[$i]\])\s*=\s*0x(\w+)\s*;.*$/) {
                            my $reg_value = hex($3);
                            if ($reg_value != 0) {
                                $line_match = 1;
                                print ORIEN_FILE "//"."$line";
                                my $seca_field_list_num = $seca_field_list_end[$i] - $seca_field_list_bgn[$i] + 1;
                                for ($j = 0; $j < $seca_field_list_num; $j = $j+1) {
                                    my $seca_field_name_tmp    = "$seca_name[$i]"."_"."$seca_field_name[$seca_field_list_bgn[$i]+$j]";
                                    my $seca_field_mask_tmp    = "$seca_field_name_tmp"."_mask";
                                    my $seca_field_value       = (($reg_value) >> ($seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j])) & 
                                                                 ((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1);
                                    my $seca_field_width_tmp   = $seca_field_width[$seca_field_list_bgn[$i]+$j];
                                    my $seca_field_shift_tmp   = "$seca_field_name_tmp"."_shift";
                                    my $seca_field_bit_tmp     = "$seca_field_name_tmp"."_bit";
                                    #print ("seca_field_mask_value = ",((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1),";");
                                    #print ("reg_value = ",$reg_value,";");
                                    #print ("seca_field_value = $seca_field_value\n");
                                    if($j eq 0){
                                      if ($j eq ($seca_field_list_num - 1)) {
                                        if($seca_field_width_tmp eq 1) {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) ;\n","$1","$2 =","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                        } else {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) ;\n","$1","$2 =","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                        }
                                      } else {
                                        if($seca_field_width_tmp eq 1) {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) |\n","$1","$2 =","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                        } else {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) |\n","$1","$2 =","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                        }
                                      }
                                    } elsif($j eq ($seca_field_list_num - 1)) {                                                                                              
                                      if($seca_field_width_tmp eq 1) {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) ;\n","$1","    ","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                      } else {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) ;\n","$1","    ","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                      }
                                    } else {                                                                                                                                 
                                      if($seca_field_width_tmp eq 1) {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) |\n","$1","    ","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                      } else {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) |\n","$1","    ","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                      }
                                    }
                                }
                            }
                        }
                    }
                }
                if ($line_match eq 0) {
                    print ORIEN_FILE "$line";
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub CopyFile{
    #print "source file name is $_[0]\n";
    #print "orien  file name is $_[1]\n";
    open(ORIEN_FILE,">$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                print ORIEN_FILE "$line";
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub FindConfigFile{
    if (-f $File::Find::name) {
        if ($_ =~ m/^(\w+_sec[a-z]\.cfg)$/) {
            #print "find file is $1 \n";
            push(@seca_fl_list,$1); 
        }
    }
}

sub FindWanted{
    if (-f $File::Find::name) {
        if ($_ =~ m/(\S+)\.c$/) {
            print "process file: $File::Find::name \n";
            GenMacroDefine("$_","$1"."_macro_define.h");
            unlink "$1"."_macro_define.h";
            if($ccode_standard_mark eq 1) {
                unlink "$_".".tmp";
                GenSubContent("$_","$_".".tmp");
                #AddMacroDefine("$_".".tmp","$_","$1"."_macro_define.h");
                system ("mv -f $_.tmp $_");
                unlink "$_".".tmp";
            }
        }
    }
}

sub Main{
    my $cur_dir  = getcwd;
    my $proj_src = $ENV{PROJ_SRC};
    my $seca_dir = "$ENV{PROJ_SRC}/design/scripts/rbus_scripts/rbus_cfg/";
    if($g_seca_fl eq "all") {
        chdir($seca_dir) or die "$seca_dir was not found!!! please gen_rbus firstly.";
        find(\&FindConfigFile,"$seca_dir");
    } else {
        push(@seca_fl_list,$g_seca_fl);
    }
    #for ($i = 0; $i < @seca_fl_list; $i = $i+1) {
    #    print "seca_fl_list[$i] = $seca_fl_list[$i] \n";
    #}
    for ($z = 0; $z < @seca_fl_list; $z = $z + 1) {
        print "read config_file : $seca_fl_list[$z]\n";
        $g_seca_fl = "$seca_dir"."$seca_fl_list[$z]";
        RegMem();
        chdir($cur_dir) or die "$cur_dir does not exist!!!";
        find(\&FindWanted,"$cur_dir/$g_work_dir");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数字图像处理】素描风格变换(二)—— 代码实现

在绘画风格中,素描风格是一种以黑白灰(或单色)色调为主的绘画风格,注重表现物体的轮廓、结构、明暗关系等细节。在数字图像处理中,素描风格变换是一种图像风格变换的过程,用于呈现素描的视觉效果。本文主要记录使用紫光同创 PGL22G 平台,实现素描风格变换的主要代码。 目…

SwiftUI之深入解析高级布局的实战教程

一、自定义动画 首先实现一个圆形布局的视图容器 WheelLayout&#xff1a; struct ContentView: View {let colors: [Color] [.yellow, .orange, .red, .pink, .purple, .blue, .cyan, .green]var body: some View {WheelLayout(radius: 130.0, rotation: .zero) {ForEach(0.…

如何在使用JetBrains IDE时文本编辑更高效?这个IdeaVim好用

IdeaVim 插件已经发布一段时间了&#xff0c;它帮助开发者利用 Vim 的强大功能扩展 JetBrains IDE。JetBrains 内部有一个专属团队维护此插件&#xff0c;这为您提供了两项优势&#xff1a;以键盘为中心的编辑器和 IDE 的支持。 Vim为文本中的跳转和修改带来了许多灵活性&…

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事&#xff0c;Google 了 N 篇文章竟然没有一篇是可以跑起来的&#xff01; 少部分教程是给出了自我矛盾的配置&#xff08;是的&#xff0c;按照贴出来的代码和配置&#xff0c;他自己都跑不起来&#xff09;&#xff0c;大部…

[Altium Designer] AD PCB相同模块的布局步骤

针对原理图完全相同的模块布局布线很有帮助&#xff1b;一定要对应模块相同操作才具有可行性。 1、原理图中选取一路模块的元器件&#xff0c;快捷键【T→S】即可在对应的PCB中选取对应的元器件&#xff1b;跳转到PCB&#xff0c;快接方式改变右边属性&#xff0c;【ctrla】 …

代币合约 ERC20 Token接口

代币合约 在以太坊上发布代币就要遵守以太坊的规则&#xff0c;那么以太坊有什么规则呢?以太坊的精髓就是利用代码规定如何运作&#xff0c;由于在以太坊上发布智能合约是不能修改和删除的&#xff0c;所以智能合约一旦发布&#xff0c;就意味着永久有效&#xff0c;不可篡改…

【信号与系统】【北京航空航天大学】实验一、信号的MATLAB表示及信号运算

一、实验目的 1、初步掌握 MATLAB 仿真软件的使用&#xff1b; 2、学习使用 MATLAB 产生基本时域信号&#xff0c;并绘制信号波形&#xff1b; 3、学习利用 MATLAB 实现信号的基本运算&#xff1b; 4、利用 MATLAB 分析常用的连续时域信号。 二、实验内容 1、 生成连续信号 …

AI软件开发:探索原理、挑战与未来趋势

AI软件开发已经成为当前最热门和具有前景的技术领域之一。随着人工智能技术的快速发展&#xff0c;AI软件的应用范围也在不断扩大。本文将主要探讨AI软件开发的原理、挑战以及未来的趋势。 首先&#xff0c;AI软件开发的原理是基于机器学习和深度学习算法。机器学习是一种通过…

腾讯云免费云主机有哪些?2024年更新

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

GC6153步进电机驱动芯片——低噪声、低振动,应用于摄像机,机器人等产品上

GC6153是双通道5V低压步进电机驱动器具有低噪声、低振动的特点&#xff0c;特别适用于相机的变焦和对焦系统&#xff0c;万向节&#xff0c;摇头机和其他精密&#xff0c;低噪声扫描隧道显微镜控制系统。该芯片为每个通道集成了256微步驱动器通过SPI和I2C接口&#xff0c;用户可…

大语言模型向量数据库

大语言模型&向量数据库 LARGE LANGUAGE MODELSA. Vector Database & LLM WorkflowB. Vector Database for LLMC. Potential Applications for Vector Database on LLMD. Potential Applications for LLM on Vector DatabaseE. Retrieval-Based LLMF. Synergized Exampl…

20240112-确定字符串的两半是否相似

题目要求 给定一个偶数长度的字符串s。把这个字符串分成长度相等的两半&#xff0c;前半部分a&#xff0c;后半部分b。 如果两个字符串的元音字母数目相同&#xff08;a、e、i、o、u、A、E、I、O、U&#xff09;&#xff0c;那么它们就是相同的。区分大小写。 如果a和b相同&…

github新建仓库提交代码(本地命令行)

网页在home页面新建一个仓库之后&#xff0c;复制该仓库的URL&#xff0c;待会要用到在本地打开gitbash 进行初始化并将仓库克隆到本地git init git clone <刚刚复制的仓库URL>进入文件夹&#xff0c;创建文件&#xff0c;可以将要提交的内容写入文档cd <克隆下来的文…

多区域isis配置实验

一、预习&#xff1a; IS-IS&#xff1a;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff0c;是ISO为它的CLNP&#xff08;ConnectionLess Network Protocol&#xff09;设计的一种动态路由协议&#xff0c;后来为了提供对IP路由的支持&…

InternLM第4次课笔记

XTuner 大模型单卡低成本微调实战 1 Finetune介绍 2 XTuner介绍 XTuner中微调的技术&#xff1a; 3 8GB显卡玩转LLM 4 动手实战环节

怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了&#xff0c;竟然还有人不知道接口幂等是什么东西。 hi&#xff0c;大家好&#xff0c;我是 浮生 今天正好有空&#xff0c;给大家分享一下 幂等的实现。 什么是幂等&#xff1f; 一、问题解析 简单来说&#xff0c;就是一个接口&#xff0c;使用相同的参数重复执…

【Databend】行列转化:数据透视和逆透视

文章目录 数据准备数据透视数据逆透视总结 数据准备 学生学科得分等级测试数据如下&#xff1a; drop table if exists fact_suject_data; create table if not exists fact_suject_data (student_id int null comment 编号,subject_level varchar null comment …

AI副业拆解:人像卡通化,赋予你的形象全新生命力

大家好我是在看&#xff0c;记录普通人学习探索AI之路。 &#x1f525;让你的形象瞬间穿越二次元&#xff01;&#x1f680;人像卡通化&#xff0c;捕捉你的独特魅力&#xff0c;让真实与梦幻在此刻交融。&#x1f3a8; 今天为大家介绍如何免费把人像卡通化--漫画风 https://w…

视频监控平台的管理员账号在所有客户端都无法登录的问题解决

目 录 一、问题描述 二、问题排查 1、看问题提示 2、看日志信息 3、问题定位 三、问题解决 1. 添加权限角色 2、添加操作用户 3、验证 一、问题描述 AS-V1000视频监控平台安装部署完成后&#xff0c;发现管理员admin不能到web客户端&#xff0c;觉…

C语言变量与函数

目录 变量函数 变量 变量&#xff1a;计算机里的一块内存空间int a 0; 表示定义一个整型 int 变量&#xff1b;这个变量名字叫做 a “” 表示赋值&#xff1b;即将右边的 0 赋值给左边的整型变量 a 现在这一块空间 a 存放了一个值 0 这个过程也叫做整型变量 a 的初始化初始化…