- 博客(59)
- 收藏
- 关注
原创 AXI总线总结
AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。它是一种面向高性能、高带宽、低延迟的片内总线,它的总线结构如Figure 1所示。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。AXI 是AMBA 中一个新的高性能协议。AXI 技术丰富了现有的AMBA 标准内容,满足超高性能和复杂的SoC设计的需求。
2022-11-12 17:08:52 4844 1
原创 AMBA总线协议AHB、APB、AXI对比分析
AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构AHB (Advanced High-performance Bus)— 高级高性能总线ASB (Advanced System Bus) —高级系统总线APB (Advanced Peripheral Bus) —高级外围总线AXI (Advanced eXtensible Interface)— 高级可拓展接口。...
2022-08-02 23:25:28 784
原创 操作系统的体系结构
1、什么是操作系统的体系结构---- 从用户角度看,操作系统所体现的是它提供的各种各样的服务;---- 从程序员角度看,操作系统体现的是提供给用户的界面和接口;---- 从设计人员的角度看,操作系统是一大堆模块和它们之间的相互联系。这便是操作系统的体系结构。2、操作系统的构件---- 通常把组成操作系统的基本单位称为构件,基本的操作系统构件有内核、进程、线程和管程等。---- 内核是作为可信软件来提供支持进程并发执行的基本功能和基本操作的一组程序模块,内核通常驻留在内核空间,运行于内核态。.
2021-10-20 08:18:05 3103
原创 组合逻辑电路毛刺产生原因及消除办法
一、毛刺产生原因(竞争与冒险)1.1 竞争有两种情况会产生竞争:门电路两个输入信号同时向相反的逻辑电平跳变或同一信号经不同路径到达终点的时间有先有后的现象。例1:信号 A、B 不可能突变,需要经历一段极短的过渡时间。而门电路的传输时间也各不相同,故当A、B同时改变状态时可能在输出端产生虚假信号。例2:同一信号经不同路径到达终点的时间有先后(或者两个不同信号变化不同步)结果,在t1-t2 时间内,电路输出端产生了Y=1的尖峰脉冲,不符合静态下,Y恒为0的逻辑关系:1.2 竞争-冒险根据上面
2021-10-14 14:38:27 7866
原创 数字电路基础
数字电路常用表示方法一、与门与门,英文名称是 AND Gate,又称“与电路”、逻辑“与”电路。 与门是门电路里面比较重要的一个逻辑门。与门是执行“ 与” 运算的基本门电路。与门有多个输入端, 1 个输出端。当多个输入端同时为“ 逻辑 1” 高电平时,输出才为“ 逻辑 1” 电平,否则输出为“ 逻辑 0” 低电平。与门的表达式是 F = A & B, “ &” 代表与的意思,这个符号也是 Verilog 语法定义的与逻辑符。“ 与” 门的电路mos实现如下图所示:通过上图
2021-10-14 13:47:46 8473
原创 朴素和KMP模式匹配算法
一、朴素模式匹配算法原理子串的定位操作通常称做串的模式匹配。二、KMP模式匹配算法原理2.1 什么是KMP算法?KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,简称KMP算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。2.2 KMP算法与BF(暴力破解法)的区别三、程序代码//02模式匹配_KMP#
2021-10-14 13:19:46 230
原创 串(string)存储结构
一、串的定义串(string)是由零个或多个字符组成的有限序列,又名叫字符串。空格串,是只包含空格的串。注意它与空串的区别,空格串是有内容有长度的,而且可以不止一个空格。子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含字串的串称为主串。串的顺序存储结构——用一组地址连续的存储单元来存储串中的字符序列的。按照,预定义的大小,为每个定义的串变量分配一个固定床都的存储区。一般是用定长数组来定义的。串的链式存储结构——对于串的链式存储结构,与线性表是相似的,但由于串结构的特殊
2021-10-14 11:11:05 751
原创 ModelSim的使用详解
一、建立ModelSim工程1、打开ModelSim软件打开ModelSim软件,如下图所示:2、建立工程在modelsim中建立project,选择File->New->Project,如下图所示:弹出如下界面:在“ Project Name”栏中填写工程名,这里的命名方式,我们建议大家最好根据仿真的文件来进行命名,时间久了,当我们记不得这个仿真工程是用来仿真什么的时候,我们看到这个工程名,就能够知道它是用来做什么的了。这里我们把工程命名为“ runled_tb”,也就是在流
2021-10-13 16:08:18 41447 8
原创 TestBench基本写法与语法详解
一、TestBench简介一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的。学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情。而 RTL 逻辑设计中,学会根据硬件逻辑来写测试程序,即Testbench 是尤其重要的。 Verilog 测试平台是一个例化的待测(MUT) 模块,重要的是给它施加激励并观测其输出。逻辑模块与其对应的测试平台共同组成仿真模型,应用这个模型可以测试该模块能否符合自己的设计要求。编写 TESTBENCH 的目的是为了对使用硬件描述语言设计的
2021-10-13 14:50:04 39643 1
原创 队列(queue)链式存储
一、定义队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,称为链队列。为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端阶段,如下图所示。空队列时,front和rear都指向头结点,如下图所示。入队操作——其实就是在链表尾部插入结点出队操作——出队操作时,就是头结点的后继结点出队,将头结点的后继改为它后面的结点,若链表除头结点外只剩一个元素时,则需将rear指向头结点,如下图所示:二、程序代码//06链队列_LinkQueue#include "
2021-10-12 10:34:40 574
原创 队列(queue)顺序存储
一、队列的定义队列(queue)是指只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(Firsr In First Out)的线性表,简称FIFO。允许插入到而一端称为队尾,允许删除的一端称为队头。假设队列是 q=(a1,a2,…,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时。列在最后。二、程序代码//05顺序队列_Queue#include "stdio.h" #include "stdlib.h"
2021-10-12 10:01:22 441
原创 斐波那契函数
一、递归定义把一个直接调用自己或通过一系列的调用语句间接地调用自己地函数,称做递归函数。每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。二、斐波那契数列实现三、程序代码//04斐波那契函数_Fibonacci#include "stdio.h" int Fbi(int i) /* 斐波那契的递归函数 */{ if( i < 2 ) return i == 0 ? 0 : 1; return Fbi(i - 1) + Fbi
2021-10-12 09:15:39 3449 3
原创 栈的链式存储结构及实现
一、栈的链式存储结构把栈顶放在单链表的头部。另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,如果真的发生,那此时的计算机操作系统已经面临司机崩溃的情况,而不是这个链栈是否溢出的问题。但对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top=NULL的时候。二、程序代码//03链栈_LinkStack#include "stdio.h" #includ
2021-10-12 08:36:34 733
原创 两栈共享空间
一、两栈共享空间的定义数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度n-1处。这样,两个栈如果增加元素,就是两端点向中间延伸。关键思路:它们是在数组的两端,向中间靠拢。top1和top2是栈1和栈2的栈顶指针,可以想象,只要他们俩不见面,两个栈就可以一直使用。二、程序代码//02两栈共享空间_DoubleStack#include "stdio.h" #include "stdlib.h" #include "io.
2021-10-12 08:14:07 1892
原创 顺序栈存储
一、栈的定义定义——栈是限定仅在表尾进行插入和删除操作的线性表栈的插入操作,叫做进栈,也称压栈、入栈。如下图所示:栈的删除操作,叫做出栈,也叫做弹栈。如下图所示:二、程序代码//01顺序栈_Stack#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1#define ERROR 0#define TRUE 1
2021-10-11 11:03:49 152
原创 线性表静态链表存储
一、静态链表定义定义——数组的元素都是由两个数据域组成,data和cur。数据域data用来存放数据元素,游标cur相当于单链表中的next指针,存放该元素的后继在数据中的下标。我们对数组第一个和最后一个元素作为特殊元素处理,不存数据。通常把未被使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个节点的下标;而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表的头指针的作用,当整个链表为空时,则为02。如下图所示:举例:已将数据存入静态链表
2021-10-11 10:45:25 225
原创 Vi/Vim/GVim 常用命令总结
一、Vim 介绍Vim是从 vi 发展出来的一个文本编辑器。 官方网站介绍 vim 是一个程序开发工具。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。二、 Vim 的三种模式基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。2.1. 命令模式 (Command mode)启动 vim 后,进入命令模式。此状态下敲击键盘被识别为命令,而非输入字符。比如此时
2021-10-09 23:43:01 1625
原创 GVIM/VIM中的正则表达式详解
一、GVIM/VIM中正则表达式简介GVIM/VIM正则表达式常在底行模式下运用,一般用于对同一类的代码进行替换,用时也可以实现删除等操作。典型的替换命令格式“ :%s/正则表达式/要替换的字符串/选项”二、元字符元字符是具有特殊意义的字符。使用元字符可以表达任意字符、行首、行 尾、某几个字符等意义普通字符含义.匹配任意字符[abc]匹配方括号中的任意字符[^abc]匹配除方括号中字符以外的字符\d匹配阿拉伯数字,等同于[0~9],decimal十进制
2021-10-09 20:35:27 9977 3
原创 串口通信详解
一、串口通讯简介串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根
2021-10-09 14:57:34 16842 2
原创 数字IC设计流程及工具简介
一、芯片架构图想要设计数字IC设计,首先要了解IC芯片的架构图,下面两图为芯片的架构图。二、数字IC设计流程及工具介绍IC的设计过程可分为两个部分,分别为:前端设计(也称逻辑设计)和后端设计(也称物理设计),这两个部分并没有统一严格的界限,凡涉及到与工艺有关的设计可称为后端设计。前端设计的主要流程:1、规格制定芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。2、详细设计Fabless根据
2021-10-09 11:17:13 3595
原创 SPI协议
一、SPI协议简介SPI(serial peripheral interface)是一种同步串行通信协议,由一个主设备和一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。SPI是一种高速全双工同步通信总线,标准的SPI仅仅使用4个引脚,主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间。有迹象表明,SPI总线首次推出是在1979年,Motorola公司将SPI总线集成在他们第一支改自68000微处理
2021-10-05 21:53:23 351
原创 单总线协议
一、单总线协议(1-wire)1.定义:主机和从机用一根总线进行通信,是一种半双工的通信方式,单线=时钟线+数据线+控制线( +电源线)。理想状况下一条总线上的从器件数量几乎不受数量限制。2.特点:这是由达拉斯半导体公司推出的一项通信技术。它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的。3.优点:单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等。二、单总线通信过程所有的单总线器件要求采用严格的通信协议, 以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、
2021-10-05 20:32:35 6059
原创 IIC协议
一、IIC简介I2C即Inter-Integrated Circuit(集成电路总线),是由Philips半导体公司(现在的NXP半导体公司)在八十年代初设计出来的一种简单、双向、二线制总线标准。多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。主机启动总线,并产生时钟用于传送数据,此时任何接收数据的器件均被认为是从机。I2C总线由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接收数据。 在主控与被控IC之间可进行双向数据传送,数据的传输速率在标准模式下可达100kbit
2021-10-05 18:17:01 1494 2
原创 通信协议基础知识2
四、常见的数据编码(1)字符编码ASCII码所有的信息最终都表示为一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,通过不同的排列组合,使用 0 和 1 就可以表示世界上所有的东西。在计算机种中,1 字节对应 8 位二进制数,而每位二进制数有 0、1 两种状态,因此 1 字节可以组合出 256 种状态。如果这 256 中状态每一个都对应一个符号,就能通过 1 字节的数据表示 256 个字符。美国人于是就制定了一套编码(其实就是个字典),描述英语中的字符和这 8 位二进制数的对应关系,这被称为
2021-09-30 15:57:57 2087
原创 通信协议基础知识1
一、串行通信1.1 概念串行通信是指计算机与I/O设备之间数据传输的各位是按顺序依次一位接一位进行传送。通常数据在一根数据线或一对差分线上传输。(成本低、速度慢、需解决字符同步)1.2 串行通信按照数据传送方向分类(1) 单工通信消息只能单方向传输的工作方式(2) 半双工通信:通信双方都能收发消息,但不能同时收发的工作方式(3) 全双工通信通信双方可同时进行收发消息的工作方式1.3 按照对时钟同步的要求分为(1)同步传输以帧为传输单位,为使接收双方能判别数据块的开始和结束,需
2021-09-30 14:11:26 5160 1
原创 线性表链式存储(单链表)
一、线性表链式存储概念定义——为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(既直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称做指针或链。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。二、程序代码//02线性表链式存储_LinkList#include "stdio.h" #include "stri
2021-09-30 11:01:16 438
原创 线性表顺序存储
一、线性表的顺序存储结构定义定义——线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。地址的计算方法数据元素的序号和存放它的数组下标之间存在对应关系:假设占用的是c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数):二、程序代码//01线性表顺序存储_List#include "stdio.h" #include "stdlib.h" #include "io.h"
2021-09-30 09:43:17 1436
原创 verilog状态机
Verilog是硬件描述语言,硬件电路是并行执行的,当需要按照流程或者步骤来完成某个功能时,代码中通常会使用很多个if嵌套语句来实现,这样就增加了代码的复杂度,以及降低了代码的可读性,这个时候就可以使用状态机来编写代码。 状态机相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。状态机,全称是有限状态机( Finite State Machine,缩写为FSM),是一种在有限个状态之间按一定规律转换的
2021-09-29 16:18:34 18684 2
原创 FPGA中wire与reg类型的区别
reg相当于存储单元,wire相当于物理连线Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻状态或浮空量。线型数据包括wire,wand等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法。两者的区别是:即存器型数据保持最后一次的赋值,而线型数据需要持续的驱动输入端口可以
2021-09-29 15:52:30 2444
原创 Verilog和C的区别
Verilog是硬件描述语言,在编译下载到FPGA之后,会生成电路,所以Verilog全部是并行处理与运行的; C语言是软件语言,编译下载到单片机/CPU之后,还是软件指令,而不会根据你的代码生成相应的硬件电路,而单片机/CPU处理软件指令需要取址、译码、执行, 是串行执行的。Verilog和C的区别也是FPGA和单片机/CPU的区别, 由于FPGA全部并行处理, 所以处理速度非常快,这个是FPGA的最大优势,这一点是单片机/CPU替代不了的。Verilog和C之间的区别1、定义:Verilog是用
2021-09-29 15:45:01 3224
原创 Verilog和VHDL区别
这两种语言都是用于数字电路系统设计的硬件描述语言,而且都已经是IEEE的标准。 VHDL1987年成为标准,而Verilog是1995年才成为标准的。这是因为VHDL是美国军方组织开发的,而Verilog是由一个公司的私有财产转化而来。为什么Verilog能成为IEEE标准呢?它一定有其独特的优越性才行,所以说Verilog有更强的生命力这两者有其共同的特点:能形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围地描述;可借用高级语言地精巧结构来简化电路行为和结构;支持电路描述由高层到低层
2021-09-29 15:43:21 2925
原创 Verilog简介
Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。数字电路设计者利用这种语言,可以从顶层到底层逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后利用电子设计自动化( EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下来,再用专用集成电路ASIC或FPGA自动布局布线工具,把网表转换为要实现的具体电路结构。Verilo
2021-09-29 15:41:49 2941
原创 进程和线程的区别
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而
2021-09-29 15:34:20 85
原创 进程切换与线程切换的代价比较
一、进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。二、切换的性能消耗:1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。2、另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存
2021-09-29 15:30:27 1143
原创 UCOS等RTOS的任务划分原则2
参考一:划分任务的话有几个原则:1、根据外设类型:SPI一个,串口一个;2、按照任务的优先级分:比如AD采集最优先,单独做一个任务,提高优先级;其他通讯任务缓一缓没关系,合成一个任务,优先级低一些。3、按工作流程分:比如分阶段的,按阶段分。我现在做的项目偏向这种划分参考二任务划分有3个原则,分别介绍如下。 2.1 原则1 原则1是将同一个外设的访问放在一个任务中。 对每个独立的硬件(例如串行通信端口)进行操作的驱动程序段放在一个任务中。也就是说,要想对某个设备资源进行操作,只有依靠执
2021-09-29 15:23:05 605
原创 操作系统(RTOS)的任务划分原则1
一、ucos中任务优先级分配原则ucos是一个可剥夺性内核的操作系统。所以每一个任务都必须有一个优先级。ucos操作系统中任务的优先级使用一个8位整型数据来表示的。比如我们的0,1,2,3这些数,UCOS任务优先级的取值范围为 0 - OS_LOWEST_PRIO之间,数字越小,优先级越大。静态优先级这个优先级被分配以后,它在任务的运行过程中,或者说在这个系统的运行过程中,它的优先级就不能变了,比如说,我们把这个优先级分配为2,那这个任务在运行过程中就一直为2,没办法变成其他的优先级。动态优先级在
2021-09-29 15:08:21 1731
原创 C语言指针详解
一、什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。前面已经提到内存其实就是一组有序字节组成的数组,数组中,每个字节大大小固定,都是 8bit。对这些连续的字节从 0 开始进行编号,每个字节都有唯一的一个编号,这个编号就是内存地
2021-09-26 16:41:42 8869 2
原创 C/C++ typedef用法详解
一、typedef简介typedef的4种常见用法:1、给已定义的变量类型起个别名2、定义函数指针类型3、定义数组指针类型4、为复杂的声明定义一个新的简单的别名总结一句话:“加不加typedef,类型是一样的“,这句话可以这样理解:没加typedef之前如果是个数组,那么加typedef之后就是数组类型;没加typedef之前如果是个函数指针,那么加typedef之后就是函数指针类型;没加typedef之前如果是个指针数组,那么加typedef之后就是指针数组类型;typedef cha
2021-09-26 09:49:08 13715 2
原创 C语言中define的用法详解
宏——无非就是定义一个替换的量,好比#define PI 3.1415926,这样的功能,再深一点就是写一个类似函数的定义,好比#define MAX(a,b) ((a) > (b) ? (a) : (b))这样的功能。下面讲解一下具体用法:一、简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME){.........}编译器在处理这个代码之前会对MAXTIME进行处理替换为100
2021-09-26 09:10:20 37264
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人