精华内容
下载资源
问答
  • c语言函数由哪两部分组成

    千次阅读 2021-05-20 16:47:12
    在C语言中一个函数一般由个部分组成一个是函数头,一个是函数体,函数体是编程语言中定义一个函数功能的所有代码组成的整体,函数头是指函数体之前的所有部分,应用于数学、程序设计领域,作用是给出了该函数的...

    在C语言中一个函数一般由两个部分组成一个是函数头,一个是函数体,函数体是编程语言中定义一个函数功能的所有代码组成的整体,函数头是指函数体之前的所有部分,应用于数学、程序设计领域,作用是给出了该函数的返回类型。

    33d53bbf746fa242df5870fbf6d005e6.png

    在C语言中一个函数一般由两个部分组成一个是函数头,一个是函数体。

    函数体是编程语言中定义一个函数功能的所有代码组成的整体。函数体是用花括号括起来的若干语句,他们完成了一个函数的具体功能。函数体内的前面是定义和说明部分,后面是语句部分。函数声明与函数体放在一起组成了函数定义。

    函数头是指函数体之前的所有部分,应用于数学、程序设计领域,作用是给出了该函数的返回类型。在一个函数定义中,函数体之前的所有部分称为函数头,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息,所以当没有专门给出函数原型说明语句时,系统就从函数头中获取函数原型信息。

    相关介绍:

    函数体使用示例:

    main(){printf()();printf()();}//函数体是花括号内的所有语句的集合,包括花括号在内

    一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号。函数原型语句与函数头也有细微的差别。

    在函数原型语句中,其参数表中的每个参数允许只保留参数类型,而省略参数名,并且若使用参数名也允许与函数头中对应的参数名不同。

    展开全文
  • MySQL参数配置

    千次阅读 2019-06-09 17:44:03
    通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。 2、服务器参数: 32G内存、4个CPU,每个CPU 8核。 3、MySQL目前安装状况。 MySQL目前安装,用的是MySQL...

    1、目的:
    通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。
    2、服务器参数:
    32G内存、4个CPU,每个CPU 8核。
    3、MySQL目前安装状况。
    MySQL目前安装,用的是MySQL默认的最大支持配置。
    4、修改MySQL配置
    打开MySQL配置文件my.cnf
    vi /etc/my.cnf
    4.1 MySQL非缓存参数变量介绍及修改
    4.1.1修改back_log参数值:由默认的50修改为500.(每个连接256kb,占用:125M)

        back_log=500
    

    back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
    back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。
    查看mysql 当前系统默认back_log值,命令:

    show variables like 'back_log'; 查看当前数量
    

    4.1.2修改wait_timeout参数值,由默认的8小时,修改为30分钟。

       wait_timeout=1800(单位为妙)
    

    我对wait-timeout这个参数的理解:MySQL客户端的数据库连接闲置最大时间值。
    说得比较通俗一点,就是当你的MySQL连接闲置超过一定时间后将会被强行关闭。MySQL默认的wait-timeout 值为8个小时,可以通过命令:

    show variables like 'wait_timeout';//查看结果值。
    

    设置这个值是非常有意义的,比如你的网站有大量的MySQL链接请求(每个MySQL连接都是要内存资源开销的 ),由于你的程序的原因有大量的连接请求空闲啥事也不干,白白占用内存资源,或者导致MySQL超过最大连接数从来无法新建连接导致“Too many connections”的错误。在设置之前你可以查看一下你的MYSQL的状态(可用show processlist),如果经常发现MYSQL中有大量的Sleep进程,则需要 修改wait-timeout值了。
    interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
    wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局 interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义).
    这两个参数必须配合使用。否则单独设置wait_timeout无效
    4.1.3修改max_connections参数值,由默认的151,修改为3000(750M)。

    max_connections=3000
    

    max_connections是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过’conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
    MySQL服务器允许的最大连接数16384;
    查看系统当前最大连接数:

    show variables like 'max_connections';
    

    4.1…4修改max_user_connections值,由默认的0,修改为800

    max_user_connections=800
    

    max_user_connections是指每个数据库用户的最大连接
    针对某一个账号的所有客户端并行连接到MYSQL服务的最大并行连接数。简单说是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。
    目前默认值为:0不受限制。
    查看max_user_connections值:

    show variables like 'max_user_connections';
    

    4.1.5修改thread_concurrency值,由目前默认的8,修改为64

        thread_concurrency=64
    

    thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。

    thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那thread_concurrency 的应该为4; 2个双核的cpu, thread_concurrency的值应为8.

    比如:根据上面介绍我们目前系统的配置,可知道为4个CPU,每个CPU为8核,按照上面的计算规则,这儿应为:482=64

    查看系统当前thread_concurrency默认配置命令:

     show variables like 'thread_concurrency';
    

    4.1.6添加skip-name-resolve,默认被注释掉,没有该参数。

    skip-name-resolve
    

    skip-name-resolve:禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
    4.1.7 skip-networking,默认被注释掉。没有该参数。(本次无用)

     skip-networking建议被注释掉,不要开启
    

    开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
    4.1.8 default-storage-engine(设置MySQL的默认存储引擎)

    default-storage-engine= InnoDB(设置InnoDB类型,另外还可以设置MyISAM类型)
    //设置创建数据库及表默认存储类型
    show table status like ‘tablename’显示表的当前存储状态值
    //查看MySQL有哪些存储状态及默认存储状态
     show engines;
    //创建表并指定存储类型
    CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB;
    //修改表存储类型:
      Alter table tableName engine =engineName
    //备注:设置完后把以下几个开启:
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir = /var/lib/mysql
    #innodb_data_file_path = ibdata1:1024M;ibdata2:10M:autoextend(要注释掉,否则会创建一个新的把原来的替换的。)
    innodb_log_group_home_dir = /var/lib/mysql
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    innodb_buffer_pool_size = 1000M
    innodb_additional_mem_pool_size = 20M
    # Set .._log_file_size to 25 % of buffer pool size
    innodb_log_file_size = 500M
    innodb_log_buffer_size = 20M
    innodb_flush_log_at_trx_commit = 0
    innodb_lock_wait_timeout = 50
    设置完后一定记得把MySQL安装目录地址(我们目前是默认安装所以地址/var/lib/mysql/)下的ib_logfile0和ib_logfile1删除掉。否则重启MySQL起动失败。
    

    4.2 MySQL缓存变量介绍及修改
    数据库属于IO密集型的应用程序,其主职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个 IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。本文先从MySQL数据库 IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化
    4.2.1全局缓存
    启动MySQL时就要分配并且总是存在的全局缓存。目前有:key_buffer_size(默认值:402653184,即384M)、innodb_buffer_pool_size(默认值:134217728即:128M)、innodb_additional_mem_pool_size(默认值:8388608即:8M)、innodb_log_buffer_size(默认值:8388608即:8M)、query_cache_size(默认值:33554432即:32M)等五个。总共:560M.
    这些变量值都可以通过命令如:show variables like ‘变量名’;查看到。
    4.2.1.1:key_buffer_size,本系统目前为384M,可修改为400M

    key_buffer_size=400M
    

    key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MyISAM(MySQL表存储的一种类型,可以百度等查看详情)表性能影响最大的一个参数。如果你使它太大,系统将开始换页并且真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。对于内存在4GB左右的服务器该参数可设置为256M或384M.

    怎么才能知道key_buffer_size的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads ,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。其值可以用以下命令查得:

    show status like 'key_read%';
    

    4.2.1.2:innodb_buffer_pool_size(默认128M)

       innodb_buffer_pool_size=1024M(1G)
    

    innodb_buffer_pool_size:主要针对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销,主要用在每个缓存页帧的描述、adaptive hash等数据结构,如果不是安全关闭,启动时还要恢复的话,还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销。假设:12G的innodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G的内存。若系统只有16G,而且只运行MySQL,且MySQL只用InnoDB,
    那么为MySQL开12G,是最大限度地利用内存了。
    另外InnoDB和 MyISAM 存储引擎不同, MyISAM 的 key_buffer_size 只能缓存索引键,而 innodb_buffer_pool_size 却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少 InnoDB 类型的表的磁盘 I/O 。
    当我们操作一个 InnoDB 表的时候,返回的所有数据或者去数据过程中用到的任何一个索引块,都会在这个内存区域中走一遭。
    可以通过 (Innodb_buffer_pool_read_requests – Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100% 计算缓存命中率,并根据命中率来调整 innodb_buffer_pool_size 参数大小进行优化。值可以用以下命令查得:

    show status like 'Innodb_buffer_pool_read%';
    

    4.2.1.3:innodb_additional_mem_pool_size(默认8M)

         innodb_additional_mem_pool_size=20M
    

    innodb_additional_mem_pool_size 设置了InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQL Instance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。
    这个参数大小是否足够还是比较容易知道的,因为当过小的时候,MySQL会记录Warning信息到数据库的error log中,这时候你就知道该调整这个参数大小了。
    查看当前系统mysql的error日志 cat /var/lib/mysql/机器名.error 发现有很多waring警告。所以要调大为20M.
    根据MySQL手册,对于2G内存的机器,推荐值是20M, 32G内存的 100M
    4.2.1.4:innodb_log_buffer_size(默认8M)

        innodb_log_buffer_size=20M
    

    innodb_log_buffer_size 这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于Binlog Buffer,InnoDB在写事务日志的时候,为了提高性能,也是先将信息写入Innofb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件 (或者同步到磁盘)中。可以通过innodb_log_buffer_size 参数设置其可以使用的最大内存空间。
    InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。 在 my.cnf中以数字格式设置。
    默认是8MB,系的如频繁的系统可适当增大至4MB~8MB。当然如上面介绍所说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过32MB
    注:innodb_flush_log_trx_commit参数对InnoDB Log的写入性能有非常关键的影响,默认值为1。该参数可以设置为0,1,2,解释如下:
    0:log buffer中的数据将以每秒一次的频率写入到log file中,且同时会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何log buffer 到log file的刷新或者文件系统到磁盘的刷新操作;
    1:在每次事务提交的时候将log buffer 中的数据都会写入到log file,同时也会触发文件系统到磁盘的同步;
    2:事务提交会触发log buffer到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。
    实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。根据MySQL手册,在存在丢失最近部分事务的危险的前提下,可以把该值设为0。
    4.5.1.5:query_cache_size(默认32M)

        query_cache_size=40M
    

    query_cache_size: 主要用来缓存MySQL中的ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache功能,MySQL在接受到一条select语句的请求后,如果该语句满足Query Cache的要求(未显式说明不允许使用Query Cache,或者已经显式申明需要使用Query Cache),MySQL会直接根据预先设定好的HASH算法将接受到的select语句以字符串方式进行hash,然后到Query Cache中直接查找是否已经缓存。也就是说,如果已经在缓存中,该select请求就会直接将数据返回,从而省略了后面所有的步骤(如SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
    当然,Query Cache也有一个致命的缺陷,那就是当某个表的数据有任何任何变化,都会导致所有引用了该表的select语句在Query Cache中的缓存数据失效。所以,当我们的数据变化非常频繁的情况下,使用Query Cache可能会得不偿失
    Query Cache的使用需要多个参数配合,其中最为关键的是query_cache_size和query_cache_type,前者设置用于缓存 ResultSet的内存大小,后者设置在何场景下使用Query Cache。在以往的经验来看,如果不是用来缓存基本不变的数据的MySQL数据库,query_cache_size一般256MB是一个比较合适的大小。当然,这可以通过计算Query Cache的命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))来进行调整。 query_cache_type可以设置为0(OFF),1(ON)或者2(DEMOND),分别表示完全不使用query cache,除显式要求不使用query cache(使用sql_no_cache)之外的所有的select都使用query cache,只有显示要求才使用query cache(使用sql_cache)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲. 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;
    根据命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))进行调整,一般不建议太大,256MB可能已经差不多了,大型的配置型静态数据可适当调大.
    可以通过命令:show status like ‘Qcache_%’;查看目前系统Query catch使用大小
    | Qcache_hits | 1892463 |
    | Qcache_inserts | 35627
    命中率98.17%=1892463/(1892463 +35627 )*100
    4.2.2局部缓存
    除了全局缓冲,MySql还会为每个连接发放连接缓冲。个连接到MySQL服务器的线程都需要有自己的缓冲。大概需要立刻分配256K,甚至在线程空闲时,它们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需分配大约read_buffer_size,
    sort_buffer_size,read_rnd_buffer_size,tmp_table_size 大小的内存空间. 不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。有的是立刻分配成单独的组块。tmp_table_size 可能高达MySQL所能分配给这个操作的最大内存空间了
    。注意,这里需要考虑的不只有一点——可能会分配多个同一种类型的缓存,例如用来处理子查询。一些特殊的查询的内存使用量可能更大——如果在MyISAM表上做成批的插入
    时需要分配 bulk_insert_buffer_size 大小的内存;执行 ALTER TABLE, OPTIMIZE TABLE, REPAIR TABLE 命令时需要分配 myisam_sort_buffer_size 大小的内存。
    4.2.2.1:read_buffer_size(默认值:2097144即2M)

    read_buffer_size=4M
    

    read_buffer_size 是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能.
    4.2.2.2:sort_buffer_size(默认值:2097144即2M)

        sort_buffer_size=4M
    

    sort_buffer_size是MySql执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。如果不能,可以尝试增加sort_buffer_size变量的大小

    4.2.2.3: read_rnd_buffer_size(默认值:8388608即8M)

        read_rnd_buffer_size=8M
    

    read_rnd_buffer_size 是MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
    4.2.2.4: tmp_table_size(默认值:8388608 即:16M)

         tmp_table_size=16M
    

    tmp_table_size是MySql的heap (堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySql同时将增加heap表的大小,可达到提高联接查询速度的效果。
    4.2.3其它缓存:
    4.2.3.1 thread_cache_size (服务器线程缓存)

     thread_cache_size=64
    

    默认的thread_cache_size=8,但是看到好多配置的样例里的值一般是32,64,甚至是128,感觉这个参数对优化应该有帮助,于是查了下:
    根据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。(–>表示要调整的值) 根据物理内存设置规则如下:
    1G —> 8
    2G —> 16
    3G —> 32
    4G —> 64
    mysql> show status like ‘thread%’;
    +——————-+——-+
    | Variable_name | Value |
    +——————-+——-+
    | Threads_cached | 0 | <—当前被缓存的空闲线程的数量
    | Threads_connected | 1 | <—正在使用(处于连接状态)的线程
    | Threads_created | 1498 | <—服务启动以来,创建了多少个线程
    | Threads_running | 1 | <—正在忙的线程(正在查询数据,传输数据等等操作)
    +——————-+——-+
    查看开机起来数据库被连接了多少次?
    mysql> show status like ‘%connection%’;
    +———————-+——-+
    | Variable_name | Value |
    +———————-+——-+
    | Connections | 1504 | –>服务启动以来,历史连接数
    | Max_used_connections | 2 |
    +———————-+——-+
    通过连接线程池的命中率来判断设置值是否合适?命中率超过90%以上,设定合理。
    (Connections - Threads_created) / Connections * 100 %

    展开全文
  • 从PCB制造工艺参数到AD规则设置

    万次阅读 多人点赞 2018-05-09 09:46:21
    本文介绍了什么是PCB的规则,嘉立创PCB的主要参数,在AD中规则名称翻译,如何设置间距,敷铜间距,禁止布线层间距,规则的优先级,不同网络的线宽,过孔规则,规则的导入与导出。 1 什么是PCB的规则: 官方对于设计...

    摘要

    本文介绍了什么是PCB的规则,嘉立创PCB的主要参数,在AD中规则名称翻译,如何设置间距,敷铜间距,禁止布线层间距,规则的优先级,不同网络的线宽,过孔规则,规则的导入与导出。

    1 什么是PCB的规则:

    官方对于设计规则的描述

    Altium Designer的PCB编辑器使用设计规则概念来定义设计需求。这些规则共同形成"指令集",供PCB编辑器遵循。它们涵盖设计的每个方面-从布线宽度、间距、平面连接样式、布线过孔样式等-并且许多规则可以通过在线设计规则检查器(DRC)实时监控。

    这段描述说明了规则是一段"指令集",包含了线宽、间距、过孔样式等,并且规则的检查是实时的。

    为什么要为PCB设置规则?

    简单来说就是避免犯错,以及加快工作的效率。例如,某加工厂的加工能力最小间距是6mil,小于6mil的间距就可能短路,你可以心里牢牢记住,不能画小于6mil的间距,然后每一条线之间都检查一下间距是否小于6mil——这不是个好办法,万一那一条线忘了呢?所以可以让电脑知道最小的间距是6mil,让它时时刻刻替你检查,甚至让你画不出小于6mil的间距。在恪守成规方面电脑是很擅长的。加快工作效率怎么解释呢?例如普通的线宽需要10mil,电源的线宽需要20mil,你在布普通的线的时候把线宽改成10mil,然后布了一段电源线,线宽改成了20mil,接着又布普通线,好吧,线宽又需要改成10mil。如果让普通的线和电源线拥有不同的规则,不用再反复切换线宽,就方便多了。

     

      

    设计规则需要遵循什么?

    1客观的物理规律,例如1oz的铜,12mil宽的线能走1A的电流。1mm直径的引脚插不进0.9mm的洞。

    2 加工厂的生产工艺

    例如,TI的STM32官方评估板,加了过孔,线竟然还是平行走

    实际中我画的板子,平行线加过孔的情况

    官方评估板过孔大小

    这个真是比不了。

    2查看PCB厂家的制作参数

    以下以嘉立创为例,看一看他们家的制作参数如何

    1嘉立创的特点

    个人感觉他们有以下特点:

    方便:专门的下单平台

    便宜:5块样板50块,增票8个点

    快:样板48小时,加急24小时

    有器件商城和贴片服务:可以一站式,并且省得自己手焊

    注意,并不是因为他们的工艺水平高,在他们家下单的

    另外,日常习惯使用SSCOM的串口助手,其作者在嘉立创工作,我也因为订单的事联系过他。虽然他并不认识我,但还是愿意给他打一个广告(虽然没有多少人能看到)

     

    2嘉立创参数浏览

    然后我们就看一下嘉立创的工艺参数

    他们的单位很不统一,我建议一律转为mil,mm*39就是mil,一般按40来计算。

    例如,最小孔径是0.3mm,也就是11.7mil,我们用12mil来表示,还略大于11.7mil。更安全。

    综上,过孔的孔径最小是12mil,直径24mil

    以下内容全部摘自嘉立创出版的《PCB设计应用教材》,教材下载地址http://club.szlcsc.com/article/details_52_1.html

    侵连删

    简单来说就是最小的线宽和各种间距是6mil,最小的过孔是12/24,板边和铜皮距离大于16mil。

    3规则设置

    接下来进行设置。可以打开任意的PCB工程

    1 设置通用的间距

    快捷键DR,以下是规则的中英文对照。

    点击clerance,修改出6mil间距

     

    2 设置敷铜间距

    敷铜与其它铜皮或焊盘距离太小,容易短路。一般推荐大于16mil,我们取20mil。

    在clearance上点击右键,新规则,会有一个名为clearance_1的规则。

     

    左键点击此规则,然后在名称处修改为"polygon"

    如下修改

    呈现出这个效果

    这个规则我搜了一下别人的设置方法,百度经验的设置方法不是很"正规",在此提出更好的解决办法。链接https://jingyan.baidu.com/article/3052f5a1dc8f1f97f31f86ba.html

    另外,即便设置好此间距也不代表敷铜就可以简单粗暴全板敷铜,需要手动添加一些敷铜挖空区域,参考此文章。http://blog.163.com/shuchang2588@126/blog/static/16299531820113993724112/

     

     

     

    3设置keepoutlayer的间距

    同理新建规则

    在V割的时候,keepoutlayer的中心线离铜皮的距离不小于16mil,假如线宽10mil,那么边缘距离11就行,我们取12mil

    条件选择,属于层的类,条件值是signal Layers,原因是,Top Layer 与 Bottom Layer都是信号层。我们保证这两个层与keepoutlayer的距离远一点就行。

    出现的结果就是

    点击确定。

    我们来看一下为什么Top Layer与 Bottom Layer属于 Signal Layers

    按下快捷键DC

    发现这其实是系统默认的,Signal Layers的成员就包括Top Layer与Bottom Layer。

    从这里也可以看出,分类管理是挺有用的一个东西,网络,焊盘,器件,敷铜都能分类。

     

    4规则的优先级

    在clearance里已经设置过,所有的东西最小间隔是6mil,而polygon里的最小间隔是20mil,多边形敷铜明显是属于"所有东西"的,那么他的最小间距是多少?

    这就牵扯到6mil与20mil两个规则的优先级哪个更高。

    点击clearance可以看到这些规则的优先级

    数字越小,优先级越高,

    后来添加的规则,默认优先级更高。

     

    5宽度规则

    修改为最小6mil,默认10mil,最宽50mil。

    一般来说,布线的时候,地线宽度>电源>信号线,可以再为地线与电源设置规则。

    6为电源设计新宽度的规则。

    一次性给两个VCC与VCC3.3两个网络一起设置

    新建规则并命名为with_power

    输入inNet,然后选择VCC3.3

    得到结果如下,然后点一下And

    再输入InNet('VCC'),得到如下结果

    按OK得到如下结果。接着设置线宽

    同理设置GND

    7过孔尺寸和其它规则设置

    过孔,12,24

     

    我一般允许器件摞起来,所以componment clearance使能关闭。

     

    丝印的设置我一般使用查询器全布设置,规则就不管了。链接https://blog.csdn.net/geek_monkey/article/details/80065080

     

     

    8规则导出

    做完以后,把规则导出

     

    起名字保存,得到了。RUL作为后缀的规则文件

     

    9规则导入

    接下来进行规则的导入

    找到自己保存的文件,然后清除已有的规则

     

    展开全文
  • 设计模式的三种类型

    万次阅读 2018-06-29 09:47:02
    设计模式(GOF模式)分为三种类型,共23类。一、创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。二、结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式...

    设计模式(GOF模式)分为三种类型,共23类

    一、创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
    二、结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
    三、行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。



    Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    Bridge(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    Builder(建造者模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    Chain of Responsibility(职责链模式):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
    Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
    Composite(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
    Decorator(装饰模式):动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。
    Facade(外观模式):为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
    Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
    Flyweight(享元模式):运用共享技术有效地支持大量细粒度的对象。
    Interpreter(解析器模式):给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
    Iterator(迭代器模式):提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
    Mediator(中介模式):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    Memento(备忘录模式):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
    Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
    Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
    Proxy(代理模式):为其他对象提供一个代理以控制对这个对象的访问[1]。
    Singleton(单例模式):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。[2]
    State(状态模式):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
    Strategy(策略模式):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
    Template Method(模板方法模式):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
    Visitor(访问者模式):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 
    展开全文
  • 机械设计基础课程设计详细步骤(说明书)

    千次阅读 多人点赞 2020-08-21 11:30:17
       本文主要介绍机械设计基础课程设计的详细步骤(其实本文所说的详细的设计步骤就是我当时提交的课程设计说明书的电子版的筛选),给迷茫的小伙伴提供一些思路,博主所学专业为非机械专业,所以某些设计参数有...
  • 运放参数的详细解释和分析

    万次阅读 多人点赞 2018-08-10 10:29:46
    一般运放的datasheet中会列出众多的运放参数,有些易于理解,我们常关注,有些可能会被忽略了。在接下来的一些主题里,将对每一个参数进行详细的说明和分析。力求在原理和对应用的影响上把运放参数阐述清楚。由于...
  • 模型参数优化(一):遗传算法

    万次阅读 多人点赞 2019-06-25 15:57:39
    参数是指算法中的未知数,有的需要人为指定,比如神经网络算法中的学习...常用的参数优化方法主要包括交叉验证、网格搜索、遗传算法、粒子群优化、模拟退火,本节介绍遗传算法。 遗传算法实质:选定一批最佳参数,...
  • 1典型的总体设计过程包括那些步骤? 1.设想供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.设计数据库 7.制定测试计划 8.书写文档 9.审查和复审 2软件设计过程中应该遵循那些基本原理?...
  • 硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成。 1、通过重力加速度...
  • 神经网络参数更新

    千次阅读 2017-08-25 14:48:18
    一、参数更新 1.随机梯度下降及各种更新方法 【普通更新】:沿着负梯度方向改变参数 x+= -learning_rate * dx 其中学习率是一个超参数,它是一个固定的常量。 【动量更新】(Momentum) 这...
  • 区块链技术发展至今,形成了公有链和联盟链种主流技术平台。 公有链 面向大众,用户可以匿名参与,非常方便,账本数据也公开,加上强大的智能合约,因此公有链极大地促进了区块链概念和技术的普及,比如比特币...
  • C语言小结-输入型参数和输出型参数

    万次阅读 2017-08-27 15:39:51
    (1) 函数的作用就是处理数据,传入的参数就是被加工的数据,返回值就是输出的结果。 (2)函数名就是这个函数的入口,在内存中表示就是一个函数代码段的首地址,实质是一个指针常量,所以在程序中使用函数名都是...
  • 关注、星标公众号,不错过精彩内容直接来源:21ic电子网之前给大家分享过PID基础理论的文章:重温经典PID算法PID原理和参数调试今天进一步分享一些PID相关细节内容。在过程控制中,按...
  • 签名参数sign生成说明-tencent

    万次阅读 2017-01-16 12:03:15
     然后将所有用户请求的参数按照字母排序(包括timestamp,token),然后更具MD5加密(可以加点盐),全部大写,生成sign签名,这就是所说的url签名 算法 。然后登陆后每次调用用户信息时,带上sign,timestamp,...
  • CNN卷积神经网络结构及参数配置

    千次阅读 2018-07-14 10:00:27
    首先,弱先验具有较高的熵值,因此自由性较强,强先验具有较低的熵值,这样的先验在决定参数最终取值时可以起着非常积极的作用。 把卷积网络类比成全连接网络,但对于网络的权重具有无限强的先验。 所有隐藏单元的...
  • SeleniumWebdriver参数化详解

    万次阅读 2018-01-02 23:07:46
    一、Selenium参数化介绍 这篇博客主要给大家介绍下Selenium WebDriver如何实现参数化并且应用到实际的自动化测试工作中。 简单说下参数化: 参数化的自动化测试是这样的一个框架,从某个数据文件(例如ODBC...
  • 转自...utm_medium=toutiao.io&utm_source=toutiao.io JVM常用参数选项 jvm 可配置的参数选项可以参考 Oracle 官方网站给出的相关信息:http://www.oracle.c...
  • 基于参数化模型(MANO)的手势姿态估计---全面剖析

    千次阅读 多人点赞 2021-04-09 10:15:40
    目前, 主流的手部姿态估计的技术方案是使用马普所于2017年提出的MANO参数化模型, 在此基础上回归3D坐标, 这是因为MANO有很合理的结构以及定义好的前向动力学树。本文的目的在于为大家介绍,基于MANO的手部姿态估计的...
  • 在注册流程里,输入文本框失去光标的时候,执行AnalysysAgent.track,里面的参数分别是事件名称和事件属性(以及属性值)。 以下这段代码,就把前三个事件全部埋点成功了。 第二:对注册成功进行埋点 ...
  • matlab非参数代码有关更多信息,请参阅 BRAVO 官方网站: BRAVO 是一个 Matlab 工具箱,用于对 MRI 数据中的体素观察执行简单和嵌套的回归分析。...路径上)和两步调解的选项。 表现 BRAVO 在带有 Intel(R) X
  • 这一步将使用MNIST数据集,其包含手写数字(0到9)的灰度图,28×28像素维度。 每个像素是8位数,因此其数值范围在0到255之间。 Keras有此内置功能,因此能便捷地获取数据集。 X和Y数据的产出分别是(60000, 28, 28)...
  • 逻辑结构设计---步骤三4.1 E-R 模型向关系模式的转换4.2 关系模式的优化4.3 设计用户子模式5.物理结构设计---步骤四5.1 确定数据库的物理结构5.2 物理结构进行评价6.数据库实施---步骤五7.数据库运行维护---步骤六 ...
  • 计算机组成原理课程设计:复杂模型机

    千次阅读 多人点赞 2021-02-07 15:29:30
    课程设计报告 课程名称: 计算机组成原理 设计题目: 复杂模型机 目 录 1、课程设计任务书 3 1.1设计任务 3 1.2性能指标和设计要求 3 2、本设计的模型机体系结构及功能 4 2.1 模型机的体系结构 5 2.2 模型机所具有...
  • 一、MOS管选型注重的参数 1、负载电流IL --它直接决定于MOSFET的输出能力; 2、输入-输出电压–它受MOSFET...在使用MOS管设计开关电源或者马达驱动电路的时候,一般都要考虑MOS的导通电阻,最大电压等,最大电流等...
  • 特定滤波器设计实现

    2016-01-02 21:20:24
    一般而言,四种类型的滤波器(低通,高通,带通,带阻)都可以通过标准低通滤波器 变换得到。 对于种特定的滤波器——巴特沃斯滤波器,切比雪夫滤波器的设计一般过程是:  首先,根据截止...一般反归一化包括两
  • 深入了解MyBatis参数

    万次阅读 多人点赞 2015-03-02 09:36:01
    相信很多人都遇到过下面这些异常:"Parameter 'xxx' not found....想了解参数,我们首先看MyBatis处理参数和使用参数的全部过程。 本篇由于为了便于理解和深入,使用了大量的源码,因此篇幅较长,需要一定的耐心看完
  • 摘要:参数化建模是工业设计软件普遍使用的建模技术,通过参数化可以提高建模速度的同时提高模型的标准化。Tribon中也大量使用了参数化建模技术,一条上万零件有几百人参与的船舶设计,很好的做到了标准统一。型材端...
  • 芯片:设计、制造、封测

    千次阅读 2020-03-01 11:09:07
    生产半导体产品的过程,包括设计、制造、封测三大环节。 1、IC设计:是一个将系统、逻辑与性能的设计要求转化为具体的物理版图的过程,主要包含逻辑设计、电路设计和图形设计等。将最终设计出的电路图制作成光罩,...
  • 模型参数优化(二):粒子群优化

    千次阅读 2019-06-25 17:27:45
     第一:初始化粒子群,包括群体规模,每个粒子的位置和速度,设置惯性权重、最大速度、加速度常数、最大迭代次数等初始值。  第二设计适应度函数,并计算每个粒子的适应度值。  第三:对每个粒子,...
  • 【软件工程】第五章 结构化设计

    万次阅读 多人点赞 2019-02-23 12:48:43
    依据需求规约在一个抽象层上建立系统软件模型,包括软件体系结构(数据和程序结构),以及详细的处理算法。 给出软件解决方案,产生设计规格说明书。 结构化设计分为: 总体设计:确定系统的整体模块结构(即...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 203,636
精华内容 81,454
关键字:

参数设计包括哪两步