分类目录:摩登3官网注册

摩登3主管554258:_程序员最讨厌的事

程序员最幽默(ID:humor1024)整理 图自:网络 【0】程序员最讨厌解释的事情 【1】产品经理过来提需求时 【2】被生活扼住了喉咙 【3】神奇的密码事件 【4】程序员最讨厌的9句话 【5】让程序员忍不住出手的一句话 【6】讨厌读别人的代码 【7】让程序员崩溃只需要一句话  【8】普通人话术 VS 程序员话术 【9】与程序员打交道, 千万别“嘴欠”说这 11 句话 长按订阅更多精彩▼ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐怎么样?_升压型、降压型、极性反转型,3种开关电源工作方式!

非隔离型开关电源一般有三种基本工作方式,降压型、升压型、极性反转型三种,而其他的都是这三种形式转换而来,例如反激式、正激式、推挽式、半桥式、全桥式。 0 1 降压型电路 如下图为降压型电路。在此电路中,脉宽调制(pwm)电路的输出加到晶体管开关Q1的基极,以控制其导通和截止。 工作过程: ①当开关导通时,输人量可以传递到输出端; ②开关截止时,则被隔断。这种脉冲状的能量传递经变换和滤波形成平滑的电压输出。pwm电路将它的变化转变成能控制开关导通和截止时间之比的pwm信号,达到稳定的目的。 0 2 升压型电路 如图是升压型电路。工作过程:①开关管Q1导通时,扼流圈L1储能。这时 il=uin/lt(t为扼流圈导通时间)。设导通结束时的电流为il,因此,储能为e=0.5i2l。Q1截止后,il将从il开始减少,在L上感应出左低右高的自感电动势。 这个电动势叠加在uin上,二者一起通过vd给电容器c充电并向负载供电,得到比输人电压高的输出电压。②Q1导通期间,电容器MC1单独向负载供电,这时,D1阳极电位低于阴极而处于截止状态,防止了电容反向放电。 0 3 极性反转型电路 如下图为极性反转型电路,也叫倒置型电路。当Q1导通时,uin加在l两端,产生电流和储存能量。Q1截止后,l上的电流经二极管D1给电容器MC1充电。由此产生与输人电压极性相反的输出电压。 -END- 来源 |  | 整理文章为传播相关技术,版权归原作者所有 |  | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网站_垂直电商死灰复燃?

配图来自Canva可画 在过去的十几年中,电商市场一直都是天猫和京东“唱双簧”的舞台。不过他们并没有霸占整个电商市场的统治力,其他电商玩家总能时不时地获得一些喘息之机。 尤其在近几年,电商市场出现了一系列让人感到眼花缭乱的新变化——拼多多猝然崛起,电商直播风口下抖音、快手电商快速成长……接连变化中,在数年之前就早已被判定死局的垂直电商,突然间也有了“死灰复燃”的苗头。 唯品会重回正轨 所有垂直电商中,唯品会是比较特别的一个,特别之处主要有两点: 其一是无与伦比的规模。不算拼多多的话,在垂直电商中,也只有唯品会曾一度做到仅次于天猫和京东的规模,成为电商第三极。 其二是对垂直电商路线的犹疑。电商大致可以分为两种模式,一种是在某一个行业或细分市场深化运营的垂直电商,另一种则是多元化发展的综合电商。唯品会的经历比较特别,早期以品牌特卖起家,中间搞多元化综合电商转型突围,近两年又重新聚焦特卖。 曾经的辉煌成就使得唯品会拥有深厚的积累,这让它在多元化突围失败之后也没有伤筋动骨。相较于其他早已惨遭淘汰或者尚且还在挣扎求存的垂直电商,唯品会无疑足够幸运。 而近两年重新聚焦特卖主业之后,唯品会的经营也回到了正轨。据近日唯品会发布的最新财报显示,其在今年第三季度营收达232亿元,同比增长18.2%;非美国通用会计准则下,归属股东净利润达14亿元,同比增长15.2%。按唯品会董事长兼CEO沈亚的说法:“收入增长和盈利改善,主要得益于差异化商品和好货好价对用户的强吸引力。”简单来说,其实就是品牌特卖赚钱了。 业绩稳定增长背后,唯品会在新客获取和用户留存方面的亮眼表现更加不容忽视。因为这体现出作为专注于品牌特卖的垂直电商,唯品会的持续盈利和增长基础正在不断夯实。财报显示,今年第三季度,唯品会活跃用户为4340万人,与去年同期的3200万人相比,大增36%,复购订单占比达96.9%,用户留存率达87.5%。 现在天猫、京东、拼多多声威赫赫,三足鼎立的格局一时间难以撼动,而抖音、快手、百度等互联网巨头乘直播带货的东风来势汹汹。从整个电商市场的大盘来看,垂直电商承压更胜以往。 而在这样的情况下,作为垂直电商赛道中的佼佼者,唯品会重回正轨当然会使得其他垂直电商们感到大为振奋。尤其对于同样非常关注女性消费群体的蘑菇街来说,蘑菇街的振作,就相当于给它打下了一针强心剂。 蘑菇街孵化亿元主播 在最近几年,电商直播的迅猛发展,成为电商行业内最重要的业态变化。而这场行业巨变最初的起源,肇始于蘑菇街和淘宝的恩怨纠葛。 这段绵延数年之久的纠葛,结果显然是淘宝搞电商直播全面领先。不过自蘑菇街2019年孤注一掷投入电商直播以来,其直播业务持续增长。据悉,在2021财年Q1蘑菇街视频直播相关GMV业务收入为22.66亿元,同比增长72.4%;直播GMV在总GMV中的占比已达72.6%。至此,蘑菇街直播GMV连续18个季度保持快速增长。 因为平台体量相差悬殊,大早进军电商直播的蘑菇街,直播业务的规模远不及淘宝直播面实属正常。然而,蘑菇街做电商直播,依然有自己独特的优势。 首先,蘑菇街作为专注女性消费者的垂直电商平台,虽然用户规模相对较小,但是用户群体的特点更加清晰,更容易把握好用户需求;其次,首创电商直播的蘑菇街,对于如何做好电商直播有着自己的思考和计划,尤其是在培养腰部主播这个方面,蘑菇街已经形成了一套完整的体系。 今年双11,蘑菇街一些直播带货的独特优势得到了集中展示。11月10日,总粉丝数200万的小甜心(蘑菇街主播)带货总额超过2.74亿,单个粉丝GMV为138元;同期薇娅粉丝近3800万,带货超过8.5亿,单个粉丝GMV在22元上下。 从成交率和成交单价来看,蘑菇街头部主播居然实现了对天猫头牌薇娅的反超。可以说,垂直电商蘑菇街再次利用自身独特优势创造了一个小小的奇迹。 每日优鲜翻倍增长 生鲜类垂直电商每日优鲜,同样在双11表现不俗。双11当日销售额达到去年同期的2.1倍,其中肉蛋、水产、蔬菜、水果几大食材品类分别增长了150%、110%、126%和115%。 每日优鲜在双11晒出的亮眼战报确实比较出人意料。从数据来看,生鲜电商已经过了2、3月份的需求高潮,近几个月趋于平稳。而作为双11 购物节的非常规玩家,每日优鲜当天翻倍增长的销售额,或许表明其近期的经营表现一直很不错。对于双11亮眼的成绩,每日优鲜归功于自己作为前置仓的开创者,前置仓的“极速达”模式优势得以充分发挥,这进一步表明其并非只是双11才有这样的亮眼成绩。 不过若从更宏观的角度来观察垂直电商,每日优鲜亮眼的成绩,其实也并不值得特别惊奇。近几年因新兴行业趋势和机会而崛起的一批垂直电商,比如医美界的新氧、萌宠类的波奇宠物等均有不俗的业绩表现。 尤其相较于唯品会、蘑菇街、聚美优品这类经历过下行期的垂直电商“前辈”,他们明显拥有更胜一筹的潜力和前景,强劲的业绩增长只是一种外在表现。在他们的身上,可以更多地看到垂直电商未来长期发展的希望。 垂直电商的最后翻身机会? 从唯品会、蘑菇街、每日优鲜等垂直电商近期的一些表现来看,垂直电商貌似确实有了一些正在死灰复燃的意思。然而弱不禁风的火苗,能不能熊熊燃烧? 从数量上看,广义上的垂直电商虽然是电商行业中的多数党,但却并没有充足的生存空间。而且在马太效应尤为显著的电商市场中,这点少得可怜的生存空间还在被持续不断地进一步挤压。 网经社数据显示,2013年B2C前三甲的市场占有率为73.2%,而到了2019年,天猫、京东、拼多多三强在B2C市场的占有率高达89.4%。“99%的电商会死掉,到最后也就三到五家,以零售平台为主的垂直电商注定是没有机会的。”刘强东在2013年曾作出的这个预言,现在正慢慢成为现实。 尽管电商的蛋糕仍然在不断变大,但规模化效应之下,阿里、京东、拼多多这三大巨头也正在摄取越来越多的市场份额。而且不仅仅是规模的问题,更可怕的是,三巨头的供应链能力、科研技术实力、对市场的把控能力等和垂直电商们拉开的全方位差距,也正在变得越来越大,越来越难以追赶。 由此看来,虽然说当前垂直电商再次有了死灰复燃的迹象,但这也很可能是最后一次机会,因为电商巨头们留给垂直电商的时间已经不多了。

摩登3登录网站_直击2020世界5G大会:超高清视频成5G导入期夺目亮点

本月初,以“超清视界 5G赋能”为主题的2020世界超高清视频(4K/8K)产业发展大会刚在广州举办;11月26日-28日,2020世界5G大会以“5G赋能 共享共赢”为主题接踵而来,再掀5G+产业发展的高潮。两个发生在5G商用翌年的世界级的大会,都言5G赋能,足见5G“新基建”对各行各业的重要作用。   如果说去年第一届世界5G大会(主题是“5G改变世界,5G创造未来”)更多反映的是对5G未来的畅想及规划,那么来到第二届后,伴随着不断完善的5G技术能力及快速扩充的5G网络覆盖,产业各界已经切切实实进入到探索5G与产业融合发展,共创共赢的新阶段。   畅想之后就实干,这速度,很5G!尽管10月中旬工信部信息通信发展司司长闻库在北展期间指出“未来3年我国处于5G发展的导入期,我们要坚持适度超前的建设节奏,努力形成‘以建促用’良好的5G发展模式。”但从一个接一个的高规格产业大会可以看到,不止于“以建促用”,“以用促建”也在各行各业上演。   从本次大会的议程议题及展出内容看,在当前5G发展导入期,超高清视频类应用成为5G商用探索的最大亮点:5G新联接及其进一步“激活”的云、AI等技术,助推超高清视频产业快速发展,催生出4K/8K、多视角/自由视角、VR/AR等丰富多彩的5G+超高清视频应用,并在多个行业、多个场景实现商业化落地。反过来,这些超高清新场景、新应用,也在推动5G网络加速覆盖、深化发展。 我国5G发展迅速超高清视频率先受益,也是重要推手 相比于3G和4G,5G发展速度前所未有。从大会释放的信息看,截止目前,全球已部署的5G商用网络超过110张,5G站点超过80万个,智能手机发货量中5G手机占比超过60%。商用短短一年多的时间,全球5G用户数已经超过2亿。   中国发展尤其迅猛!自去年5G商用以来,中国已经建设完成了60多万座5G基站,覆盖了300个以上的城市,并发展了1.6亿5G用户,达到数百兆的体验速率。与此同时,中国中低端5G手机的价格已降至千元以内,具备了广泛覆盖的基础。而应用于工业领域的5G模组,也已有20家以上的供应商,能够为市场提供60种以上的产品。   得益于基础网络、终端和用户量的齐备,本次大会上5GtoC应用呈现出超高清视频蓬勃发展的景象。无论是广播电视、运营商还是华为展台,你会发现5G+4K/8K+多视角/自由视角+VR/AR的视频内容大量涌现,各类视频节目加速超高清化,带动广大消费者体验升维。5GtoB方面,远程医疗、智能矿山、智慧工厂等场景里已融入了大量超高清视频、VR/AR的应用,使之成为一种新兴的生产力工具,牵引各行各业“数智化”转型升级,实现产业升维。 华为视频3.0+超高清新场景 超高清视频类应用的率先起航,反过来也成为5G网络发展的重要推手。一方面,国家政策大力发展超高清视频产业,将之作为培育5G应用新场景的重要方向;另一个方面,超高清视频最能释放5G网络大带宽的能力,符合运营商及用户对新业务、新体验的共同愿望。高度合拍之下,两者协同发展,在本次大会上呈现出齐头并进的现象。 5G赋能超高清从内容生产到内容消费,全面变革并重构 移动通信最初的使命是让人们随时随地保持联接,所以联接人是5G的基本盘,5GtoC超高清视频类应用率先起航实属情理之中。本次大会先导论坛的议题也集中在5G与媒体、5G与数字生活新消费等与大众娱乐生活息息相关的方面,重点探讨了5G+超高清视频在广播电视、新媒体直播等领域的应用。   与会嘉宾主流观点认为,5G,及其与云、AI等技术深度融合,对媒体、内容领域的影响不仅仅是在消费端,也存在于生产端;5G赋能超高清,带来的是一场贯穿整个内容产业供给侧与消费侧的全面变革与重构。这一点在能够提供端到端超高清视频解决方案的华为展台体现得淋漓尽致。 在内容生产侧,5G展现出了强大的toB能力。借助5G网络百兆级的上行带宽(“超级上行”技术可以达到350Mbps)以及低至10ms的低时延特性,广播电视演播厅、线下剧场、体育场馆等现场拍摄的超高清视频可以实现无线回传,不再受线缆束缚。尤其是当需要拍摄多视角的多路视频时,无线的方式要远比有线灵活高效。同时,5G传输与边缘云的结合,可以将导播、非编、渲染等功能放到云端,解放现场工作人员及设备配置。借助云端强大的算力和AI能力,这种模式还能实现更深度的媒体处理,让内容形式更加丰富多彩。   在内容消费侧,5G高达1Gbps的下行带宽不仅可以让移动中的用户随时随地享受极致的超高清视频、云VR游戏、裸眼VR等体验,还能为场馆、体育馆等线下场所的观众提供更大的小区容量,使得大量观众同时接入网络也不至于堵塞而无法实时与朋友分享赛场的精彩瞬间。   在5G强大能力的加持下,超高清视频从生产到消费均得到大幅度的降本、提质与增效。比如借助5G+MEC+无人机拍摄,用户戴上VR眼镜可以足不出户游遍山水园林、名川大山;又如在2D转3D的加持下,用户居家就能够看到以往只能在电影院才能看到的3D全景大片,独享VVIP效果;再如基于AI超高清Vlog能力,当你去剧院观看表演时,AI可以在获得授权前提下智能识别用户行踪,自动生成一段可以下载和分享的Vlog视频……   考虑到5G与超高清视频在提升内容体验、保障业务品质方面的高度合拍性,华为在联手广播电视、运营商及广大内容合作伙伴做了大量创新验证及应用实践之后,还进一步联合场馆方打造5G智慧场馆,并在端到端通盘考虑和优化的基础上推出了视频3.0+解决方案,实现超高清内容的常态化供应,与产业各方一起构建在线服务的新业态,释放优质内容的多重价值。 超高清体验升维,从平面视频到空间视频,新视界正被打开 在5G赋能超高清的全面能力,以及基于这些能力之上的5G智慧场馆、视频3.0+等融合创新解决方案的支持下,超高清视频的业务形态和用户体验都有了质的提升。本次大会可以看到,越来越多基于5G+超高清技术能力的新场景、新体验大量涌现,包括多视角、自由视角、自由缩放、3D巨幕、8K VR等。   这些新场景体验有一个共同特征,那便是不再局限于过去单纯的分辨率、帧率等指标的提升,更是在观看和互动方式上也有了变化——从平面视频进化到了空间视频,带来了更多沉浸、自由的新体验。借助5G超大带宽、超低时延等特性,融合云、AI等先进技术,空间视频将多路超高清视频流有机编排,开创了用户体验的新维度。   在展区,华为与湖南卫视合作在《舞蹈风暴》第二季中引入蝶式升降、AI多轴方案制作的360自由视角内容,堪谓空间视频的代表力作,吸引了现场大量观众驻足观看。该方案除了能够在电视直播期间给用户带来“立体风暴时刻”的奇妙效果,还能通过运营商的5G网络,给用户带来自由旋转、任意角度欣赏舞蹈的自由互动体验。类似的5G+自由视角直播,在拳击赛、篮球赛、乒乓球赛中均有多次应用,大大延展了人们的视界。 AI多轴自由视角应用于最新一期《舞蹈风暴》   多视角也是广播电视和运营商IPTV垂青的另一种空间视频业务形态。它打破了传统既定的“只能跟着导播镜头走”的长期规则,转而通过帧同步技术将多路视频多个视角同时推送给用户,由用户自己决定视角,从而获得完全不同于传统观看方式的个性体验。从展出内容看,演唱会、音乐会、体育赛事等场景已经大量引入多视角方案,很好满足了用户“自己做导播”的极致体验诉求。   VR则是一种典型的空间视频业务形态。在8K FOV技术的加持下,结合360度声场音效处理,能够实现声音与画面均实现360度环绕效果,给用户带来完全沉浸的虚拟世界。从华为展台可以看到,目前基于这种技术的极致VR音乐已经推向了市场,给音乐、演艺行业增加了新的价值挖掘方向。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_如何向RT-Thread提交一个BSP?

RT-Thread今天的快速发展和所取得成绩,离不开所有开发者的持续贡献和社区小伙伴的竭力支持。 一、前言 今年6月,我在一款智能混合型的FPGA芯片上,完成了RT-Thread的移植,并向RT-Thread提交了一个完整的BSP,后续又根据审查意见进行了一些完善,最近(11.18)被合并到RT-Thread主分支上。 如果你曾经下载过RT-Thread的源码仓库,在最常用的STM32 BSP上面的smartfusion2,这个BSP就是我提交的了,如果有读者朋友使用过这款芯片,欢迎体验,或者提交BUG。 BSP包 有的朋友可能注意到了,我这里使用的是FPGA芯片,FPGA芯片还能运行RT-Thread吗?准备的说,应该是FPGA片上的处理器可以运行RTOS,这里的处理器,从实现方式来看,包括硬核和软核处理器;从内核种类上来看,包括ARM核或其他内核,如ARM硬核,Altera的NIOS软盒,Xilinx的microblaze软核,还有51软核等,关于FPGA片上处理器,可以参考以下文章: FPGA硬核和软核处理器的区别 除了ZYNQ还有哪些内嵌ARM硬核的FPGA? 此次提交的这个BSP是我第一次向开源项目贡献代码,而且是向这么优秀的国产RTOS操作系统,还是很有成就感的~本篇文章记录如何向RT-Thread或其他开源项目贡献代码,有不准确的地方欢迎大家指正,希望大家支持国产RTOS的发展! 二、RT-Thread遵循的许可协议 RT-Thread的开源协议是进行过调整的,在2018年RT-Thread官方公众号发布的一篇文章[1]中,我们可以知道当时是使用的GPLv2协议, GPLV2 但是现在已经是Apache-2.0协议了。 rt-thread所遵循的开源协议 在贡献代码之前,我们有必要先来了解一下开源项目所遵循的协议,如果你提交成功,开源协议将会约束这些代码被如何使用。从RT-Thread官方GitHub页面,我们可以了解到RT-Thread所遵循的开源协议为:Apache-2.0 License,这个协议有以下特点: 永久权利一旦被授权,永久拥有。 全球范围的权利在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。 授权免费,且无版税前期,后期均无任何费用。 授权无排他性任何人都可以获得授权 授权不可撤消一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。 有很多人认为开源就是免费,可以随意的使用,其实这个观点是错误的。如果你有自己的开源项目,关于协议的选择可以参考黄工大佬之前总结的[2]:程序猿如何选择开源协议? 开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。 三、SmartFusion2 BSP简介 这个BSP是移植 RT-Thread 操作系统到一款 FPGA 芯片——M2S010 ,该芯片属于 Microsemi(现Microchip)SmartFusion2系列,是一款智能混合型FPGA,片上除了 FPGA Fabric 逻辑部分,还包括一个 ARM® Cortex™-M3 内核的 MCU,主频最高 166MHz ,256KB eNVM,64KB eSRAM,集成GPIO、UART、I2C、SPI、CAN、USB等基本外设。 关于 Microsemi,第三大 FPGA 厂商,原 Actel 半导体,2010 年,Microsemi 收购 Actel,2018 年, Microchip 收购 Microsemi。 SmartFusion2 内部框图 Microsemi_Smartfusion2_BD 移植了 RT-Thread 内核,支持线程调度、线程间同步和通信等,已经完成了PIN、Serial设备驱动,FinSH组件默认使用uart0设备。支持GPIO和UART外设,支持SCons构建系统,可以输入scons调用env工具中包含的arm-gcc编译器构建工程,支持以下scons命令: scons:使用arm-gcc编译BSP scons -c:清除执行 scons 时生成的临时文件和目标文件。 scons --target=mdk4:重新生成Keil MDK4环境下的工程。 scons --target=mdk5:重新生成Keil MDK5环境下的工程。 scons --dist:打包BSP工程,包括RT-Thread源码及BSP相关工程文件。 通过添加Kconfig文件,可以使用menuconfig来配置外设,用于生成rtconfig.h。 四、如何提交你的BSP包 0.准备工作 进行提交之前,需要做一些准备工作: 一个GitHub账号 Git Windows客户 端(git-scm.com/download/win) 一些基本Git命令的使用,如 git clone/add/commit/pull/push/checkout等。 了解所使用处理器的启动流程,熟悉基本外设的使用,如GPIO、UART等。 1.Fork并Clone到本地PC 登录自己的GitHub账号,Fork RT-Thread仓库到个人仓库,Fork的意思可以理解为复制一份。 Fork 将远程仓库下载到本地:git clone https://github.com/username/rt-thread,这样就会把远程代码下载到本地。 Clone 2.创建分支 从 master 分支创建自己的开发分支,如whik_sf2,可以使用命令:git checkout -b whik_sf2 3.开发你的BSP包 这是整个开发过程中最重要,也是最耗时的一步,如果是ARM内核,可以参考STM32的移植过程,如果是其他内核,就需要多用一点时间了。 编码风格参考:https://github.com/RT-Thread/rt-thread/blob/master/documentation/coding_style_cn.md 一个最基本的BSP包,至少应该包括以下部分: 内核移植,支持线程调度、线程间同步和通信 支持GPIO/UART外设,PIN/Serial设备驱动 支持SCons构建系统,可以使用arm-gcc进行编译,支持生成MDK工程,支持dist打包,通过SConscript、SConstruct、rtconfig.py文件实现 支持menuconfig配置外设,用于生成rtconfig.h,通过Kconfig文件实现 README文件用于指导开发者如何使用这个BSP包,可以参考其他BSP文件夹下的README文件 提交关于BSP的代码,尽量确保代码改动仅限制于BSP中,而不影响到其他代码,否则可能会被拒绝[3]。 4.提交到远程并发起PR 如果本地进行测试没问题,就可以同步到远程了,三部曲:git add/commit/push,更新到远程之后,就可以发起PR了,在 git 仓库中选择自己修改了的分支,点击 create Pull…

摩登3新闻554258:_数组越界及其避免方法,C语言数组越界详解

来自公众号:技术让梦想更伟大 所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。 在 C 语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于 C 语言并不具有类似 Java 等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C 语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚至程序代码被破坏。 因此,数组下标的取值范围只能预先推断一个值来确定数组的维数,而检验数组的边界是程序员的职责。 一般情况下,数组的越界错误主要包括两种:数组下标取值越界与指向数组的指针的指向范围越界。 数组下标取值越界 数组下标取值越界主要是指访问数组的时候,下标的取值不在已定义好的数组的取值范围内,而访问的是无法获取的内存地址。例如,对于数组 int a[3],它的下标取值范围是[0,2](即a[0]、a[1] 与 a[2])。如果我们的取值不在这个范围内(如 a[3]),就会发生越界错误。示例代码如下所示: 1int a[3]; 2int i=0; 3for(i=0;i<4;i++) 4{ 5    a[i] = i; 6} 7for(i=0;i<4;i++) 8{ 9    printf("a[%d]=%d\n",i,a[i]);10} 很显然,在上面的示例程序中,访问 a[3] 是非法的,将会发生越界错误。因此,我们应该将上面的代码修改成如下形式: 1int a[3]; 2int i=0; 3for(i=0;i<3;i++) 4{ 5    a[i] = i; 6} 7for(i=0;i<3;i++) 8{ 9    printf("a[%d]=%d\n",i,a[i]);10} 指向数组的指针的指向范围越界 指向数组的指针的指向范围越界是指定义数组时会返回一个指向第一个变量的头指针,对这个指针进行加减运算可以向前或向后移动这个指针,进而访问数组中所有的变量。但在移动指针时,如果不注意移动的次数和位置,会使指针指向数组以外的位置,导致数组发生越界错误。下面的示例代码就是移动指针时没有考虑到移动的次数和数组的范围,从而使程序访问了数组以外的存储单元。 1int i; 2int *p; 3int a[5]; 4/*数组a的头指针赋值给指针p*/ 5p=a; 6for(i=0;i<10;i++) 7{ 8    /*指针p指向的变量*/ 9    *p=i+10;10    /*指针p下一个变量*/11    p++;12} 在上面的示例代码中,for 循环会使指针 p 向后移动 10 次,并且每次向指针指向的单元赋值。但是,这里数组 a 的下标取值范围是 [0,4](即 a[0]、a[1]、a[2]、a[3] 与 a[4])。因此,后 5 次的操作会对未知的内存区域赋值,而这种向内存未知区域赋值的操作会使系统发生错误。正确的操作应该是指针移动的次数与数组中的变量个数相同,如下面的代码所示: 1int i; 2int *p; 3int a[5]; 4/*数组a的头指针赋值给指针p*/ 5p=a; 6for(i=0;i<5;i++) 7{ 8    /*指针p指向的变量*/ 9    *p=i+10;10    /*指针p下一个变量*/11    p++;12} 为了加深大家对数组越界的了解,下面通过一段完整的数组越界示例来演示编程中数组越界将会导致哪些问题。 1#define PASSWORD "123456" 2int Test(char *str) 3{ 4    int flag; 5    char buffer[7]; 6    flag=strcmp(str,PASSWORD); 7    strcpy(buffer,str); 8    return flag; 9}10int main(void)11{12    int flag=0;13    char str[1024];14    while(1)15    {16        printf("请输入密码:  ");17        scanf("%s",str);18        flag = Test(str);19        if(flag)20        {21            printf("密码错误!\n");22        }23            else24            {25                printf("密码正确!\n");26            }27    }28    return 0;29} 上面的示例代码模拟了一个密码验证的例子,它将用户输入的密码与宏定义中的密码123456进行比较。很显然,本示例中最大的设计漏洞就在于 Test() 函数中的 strcpy(buffer,str) 调用。 由于程序将用户输入的字符串原封不动地复制到 Test() 函数的数组 char buffer[7] 中。因此,当用户的输入大于 7 个字符的缓冲区尺寸时,就会发生数组越界错误,这也就是大家所谓的缓冲区溢出Buffer overflow 漏洞。 但是要注意,如果这个时候我们根据缓冲区溢出发生的具体情况填充缓冲区,不但可以避免程序崩溃,还会影响到程序的执行流程,甚至会让程序去执行缓冲区里的代码。示例运行结果为: 1请输入密码:12345 2密码错误! 3请输入密码:123456 4密码正确! 5请输入密码:1234567 6密码正确! 7请输入密码:aaaaaaa 8密码正确! 9请输入密码:012345610密码错误!11请输入密码: 在示例代码中,flag 变量实际上是一个标志变量,其值将决定着程序是进入密码错误的流程(非 0)还是“密码正确”的流程(0)。当我们输入错误的字符串1234567或者aaaaaaa,程序也都会输出“密码正确”。但在输入0123456的时候,程序却输出“密码错误”,这究竟是为什么呢? 其实,原因很简单。当调用 Test() 函数时,系统将会给它分配一片连续的内存空间,而变量 char buffer[7] 与 int flag 将会紧挨着进行存储,用户输入的字符串将会被复制进 buffer[7] 中。如果这个时候,我们输入的字符串数量超过 6 个(注意,有字符串截断符也算一个),那么超出的部分将破坏掉与它紧邻着的 flag 变量的内容。 当输入的密码不是宏定义的123456时,字符串比较将返回 1 或…

摩登3主管554258:_嵌入式开发中常见3个的C语言技巧

原文:https://www.cnblogs.com/CrazyCatJack/p/6080266.html 1.指向函数的指针 指针不光能指向变量、字符串、数组,还能够指向函数。在C语言中允许将函数的入口地址赋值给指针。这样就可以通过指针来访问函数。 还可以把函数指针当成参数来传递。函数指针可以简化代码,减少修改代码时的工作量。通过接下来的讲解大家会体会到这一点的。 /*函数指针简单讲解 *通过指向函数的指 *针调用比较两个数 *大小的程序 */#include  using namespace std;/*比较函数声明*/int max(int,int);/*指向函数的指针声明(此刻指针未指向任何一个函数)*/int (*test)(int,int);int main(int argc,char* argv[]){  int largernumber;/*将max函数的入口地址赋值给 *函数指针test */  test=max;/*通过指针test调用函数max实 *现比较大小 */  largernumber=(*test)(1,2);  cout< endl;    return  0;       } int max(int a,int b){     return (a>b?a:b);   } 通过注释大家应该很容易理解,函数指针其实和变量指针、字符串指针差不多的。如果大家理解了这个小程序,那么理解起下面这个有关Nand flash的源代码就好多了。 typedef struct {    void (*nand_reset)(void);    void (*wait_idle)(void);    void (*nand_select_chip)(void);    void (*nand_deselect_chip)(void);    void (*write_cmd)(int cmd);    void (*write_addr)(unsigned int addr);    unsigned char (*read_data)(void);}t_nand_chip;static t_nand_chip nand_chip;/* NAND Flash操作的总入口, 它们将调用S3C2410或S3C2440的相应函数 */static void nand_reset(void);static void wait_idle(void);static void nand_select_chip(void);static void nand_deselect_chip(void);static void write_cmd(int cmd);static void write_addr(unsigned int addr);static unsigned char read_data(void);/* S3C2410的NAND Flash处理函数 */static void s3c2410_nand_reset(void);static void s3c2410_wait_idle(void);static void s3c2410_nand_select_chip(void);static void s3c2410_nand_deselect_chip(void);static void s3c2410_write_cmd(int cmd);static void s3c2410_write_addr(unsigned int addr);static unsigned char s3c2410_read_data();/* S3C2440的NAND Flash处理函数 */static void s3c2440_nand_reset(void);static void s3c2440_wait_idle(void);static void s3c2440_nand_select_chip(void);static void s3c2440_nand_deselect_chip(void);static void s3c2440_write_cmd(int cmd);static void s3c2440_write_addr(unsigned int addr);static unsigned char s3c2440_read_data(void);/* 初始化NAND Flash */void nand_init(void){#define TACLS   0#define TWRPH0  3#define TWRPH1  0    /* 判断是S3C2410还是S3C2440 */    if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))    {        nand_chip.nand_reset         = s3c2410_nand_reset;        nand_chip.wait_idle          = s3c2410_wait_idle;        nand_chip.nand_select_chip   = s3c2410_nand_select_chip;        nand_chip.nand_deselect_chip = s3c2410_nand_deselect_chip;        nand_chip.write_cmd          = s3c2410_write_cmd;        nand_chip.write_addr         = s3c2410_write_addr;        nand_chip.read_data          = s3c2410_read_data;        /* 使能NAND Flash控制器, 初始化ECC, 禁止片选, 设置时序 */        s3c2410nand->NFCONF = (1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);    }    else    {        nand_chip.nand_reset         = s3c2440_nand_reset;        nand_chip.wait_idle          = s3c2440_wait_idle;        nand_chip.nand_select_chip   = s3c2440_nand_select_chip;        nand_chip.nand_deselect_chip = s3c2440_nand_deselect_chip;        nand_chip.write_cmd          = s3c2440_write_cmd;#ifdef LARGER_NAND_PAGE        nand_chip.write_addr         = s3c2440_write_addr_lp;#else        nand_chip.write_addr         = s3c2440_write_addr;#endif        nand_chip.read_data          = s3c2440_read_data;        /* 设置时序 */        s3c2440nand->NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);        /* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */        s3c2440nand->NFCONT = (1<<4)|(1<<1)|(1<<0);    }        /* 复位NAND Flash */    nand_reset();} 这段代码是用于操作Nand Flash的一段源代码。首先我们看到开始定义了一个结构体,里面放置的全是函数指针。他们等待被赋值。然后是定义了一个这种结构体的变量nand_chip。 然后是即将操作的函数声明。这些函数将会被其他文件的函数调用。因为在这些函数里一般都只有一条语句,就是调用结构体的函数指针。接着往下看,是针对两种架构的函数声明。然后在nand_init函数中对nand_chip进行赋值,这也就是我们刚刚讲过的,将函数的入口地址赋值给指针。 现在nand_chip已经被赋值了。如果我们要对Nand进行读写操作,我们只需调用nand_chip.read_data()或者nand_chip.write_cmd()等等函数。这是比较方便的一点,另一点,此代码具有很强的移植性,如果我们又用到了一种芯片,我们就不需要改变整篇代码,只需在nand_init函数中增加对新的芯片的判断,然后给nand_chip赋值即可。所以我说函数指针会使代码具有可移植性,易修改性。 如果大家想对函数指针有更深的理解建议看一下这篇博文:http://www.cnblogs.com/CBDoctor/archive/2012/10/15/2725219.html 写的超赞,博主很佩服^_^ 2.C语言操作寄存器 在嵌入式开发中,常常要操作寄存器,对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,通过C语言访问这些地址就变得尤为重要。 #define GSTATUS1        (*(volatile unsigned int *)0x560000B0) 在这里,我们举一个例子。这是一个状态寄存器的宏定义。首先,通过unsigned int我们能够知道,该寄存器是32位的。因为要避免程序执行过程中直接从cache中读取数据,所以用volatile进行修饰。 每次都要重新读取该地址上的值。首先(volatile unsigned int*)是一个指针,我们就假设它为p吧。它存储的地址就是后面的0x560000B0,然后取这个地址的值,也就是p,所以源代码变成了((volatile unsigned int *)0x560000B0),接下来我们就能直接赋值给GSTATUS1来改变地址0x560000B0上存储的值了。 /* NAND FLASH (see S3C2410 manual chapter 6) */typedef struct {    S3C24X0_REG32   NFCONF;    S3C24X0_REG32   NFCMD;    S3C24X0_REG32   NFADDR;    S3C24X0_REG32   NFDATA;    S3C24X0_REG32   NFSTAT;    S3C24X0_REG32   NFECC;} S3C2410_NAND;static S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000;volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFSTAT; 有时候,你会看到这样一种情况的赋值。其实这和我们刚刚讲过的差不多。只不过这里是在定义了指针的同时对指针进行赋值。这里首先定义了结构体S3C2410_NAND,里面全部是32位的变量。 又定义了这种结构体类型的指针,且指向0x4e000000这个地址,也就是此刻s3c2410nand指向了一个实际存在的物理地址。s3c2410nand指针访问了NFSTAT变量,但我们要的是它的地址,而不是它地址上的值。所以用&取NFSTAT地址,这样再强制转换为unsigned char型的指针,赋给p,就可以直接通过p来给NFSTAT赋值了。 3.寄存器位操作 #define GPFCON      (*(volatile unsigned long *)0x56000050)GPFCON &=~ (0x1<<3);GPFCON |= (0x1<<3); 结合我们刚刚所讲的,首先宏定义寄存器,这样我们能够直接给它赋值。位操作中,我们要学会程序第2行中的,给目标位清0,这里是给bit3清0。第3行则是给bit3置1。 免责声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。 最后 以上就是本次的分享,如果觉得文章不错,转发、在看,也是我们继续更新得动力。 猜你喜欢: 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐怎么样?_安规耐压与漏电流经典30问

为何产品要进行电气安规测试? 这是许多产品制造商最想问的一个问题,当然最普遍的回答是“因为安规标准中有规定。”若您能深入了解电气安规的背景,便会发现它背后所隐含的责任与意义。电气安规测试虽然在生产线占了一点时间,但它却能让您降低产品因电气危害而回收的风险,第一次就做对,才是降低成本并维护商誉的正确方法。 何谓电气伤害(Electrical Shock)?  造成电气伤害的因素有很多种,其中最主要的是电流经过人体所造成的电气伤害。此类电气伤害对人类具有直接的影响性,伤害的严重性依电能的大小、湿度、接触面积等有所不同。想像你在浴缸里泡澡时,突然运作中的吹风机掉落在浴缸里,这样的情况,使得电流从吹风机经过你的身体而流向地面。此时,你的心脏出现不规则心悸、血压下降,造成不可挽回的悲剧。 何谓Ⅰ类产品与Ⅱ类产品?  ClassⅠ 设备是指可接触之导体零件连接至接地保护导体;当基本绝缘失效时,接地保护导体必须能承受失效误电流,也就是当基本绝缘失效时,可接触零件不可变成活电部。简单地说,电源线有接地脚之设备为ClassⅠ设备 。ClassⅡ设备不仅依赖『基本绝缘』来防范电缶,且另提供其它的安全预防措施,如『双重绝缘』或『强化绝缘』。对于保护性接地或安装条件的可靠性并无条件规定。 电气伤害的测试主要有哪些? 电气伤害的测试主要分为以下四种: 耐压测试(Dielectric Withstand Hipot Test):耐压测试在产品的电源端与地端电路上,施以一高压并量测其崩溃状态。 绝缘电阻测试(Isolation Resistance Test):量测产品电气绝缘状态。 漏电流测试(Leakage Current Test ):检测AC/DC电源流至地端的漏电流是否超过标准。 接地保护测试(Protective Ground):检测可接触之金属机构等部位是否有确实接地。 安规标准对于耐压测试环境是否有特殊的要求?  针对制造商或是测试实验室的测试人员安全, 在欧洲早已行之多年,不论是电子电器、资讯科技产品、家用电器、机械工具或其他设备的制造商及测试人员, 在各项的安规法规里都有章节去规定,不论是UL、 IEC、EN都有,其中内容包括测试区域标示(人员位置、仪器位置、DUT位置)、设备标示(清楚标示”危险”或是测试中的项目)、设备工作台等相关设施的接地状态、各测试设备的电气绝缘能力(IEC 61010)。 什么叫耐压测试? 耐压测试或高压测试(HIPOT测试) ,是用来验证产品的质量和电气安全特性(如JSI、CSA、BSI、UL、IEC、TUV等等国际安全机构所要求的标准)的一种100%的生产线测试,也是最多人知道的和经常执行的生产线安全测试。HIPOT测试是确定电子绝缘材料足以抵抗瞬间高电压的一个非破坏性的测试,是适用于所有设备为保证绝缘材料是足够的的一个高压测试。进行HIPOT测试的其它原因是,它可以查出可能的瑕疵譬如在制造过程期间造成的漏电距离和电气间隙不够。 为何要做耐压测试?  正常情况下,电力系统中的电压波形是正弦波。电力系统在运行中由于雷击、操作、故障或电气设备的参数配合不当等原因,引起系统中某些部分的电压突然升高,大大超过其额定电压,这就是过电压。过电压按其发生的原因可分为两大类,一类是由于直接雷击或雷电感应而引起的过电压,称为外部过电压。雷电冲击电流和冲击电压的幅值都很大,而且持续时间很短,破坏性极大。但由于城镇及一般工业企业内的3-10kV与以下的架空线路,因受厂房或高大建筑物的屏蔽保护,所以遭受直接雷击的概率很小,比较安全。而且这里讨论的是民用电器,不在上述范围内,就不进一步讨论。另一类是因为电力系统内部的能量转换或参数变化引起的,例如切合空载线路,切断空载变压器,系统内发生单相弧光接地等,称为内部过电压。内部过电压是确定电力系统中各种电气设备正常绝缘水平的主要依据。也就是说,产品的绝缘结构的设计不但要考虑额定电压而且要考虑产品使用环境的内部过电压。耐压测试就是检测产品绝缘结构是否能够承受电力系统的内部过电压。 AC耐压测试有什么优点呢?   通常AC 耐压测试比DC耐压测试更容易获得安全机构的接受。主要理由是大多数被测物品将工作于AC电压之下,而且AC耐压测试提供两种极**替给绝缘施加压力的优点,更接近产品在实际使用中会碰到的压力。由于AC测试不会给容性负载充电,从开始施加电压到测试结束电流读数保持一致。因此,由于不存在监视电流读数所要求的稳定化问题,也就不需要逐渐升高电压。这意味着,除非被测产品感应到突然施加的电压,操作员可以立即施加全电压并读出电流而不用等待。由于AC电压不会给负载充电,在测试之后用不着给被测设备放电。 AC耐压测试有什么缺点呢?  在测试容性负载时,总电流由电抗性电流和泄漏电流组成。当电抗性电流量远大于真实泄漏电流时,可能难于测出有过量泄漏电流的产品。在测试大容性负载时,所需要的总电流远大于泄漏电流本身。由于操作员面对更大的电流,这可能是一个更大的危险。 DC耐压测试有什么优点呢? 当被测设备(DUT)充满了电,流过的就只有真正的泄漏电流。这使DC耐压测试器能够清楚地显示出被测产品的真正泄漏电流。由于充电电流是短暂的,DC耐压测试器的功率要求通常可以比用来测试同样产品的AC耐压测试器的功率要求小得多。 DC耐压测试仪有什么缺点呢? 由于DC耐压测试的确给被测物(DUT)充电,为了消除在耐压测试后处置被测物(DUT) 之操作员触电的危险,在测试后就必须给该被测物(DUT)放电。DC测试会对电容充电。如果DUT实际上用交流电源的话,DC法就没有模拟实际情况。 AC耐压测试和DC耐压测试的区别  耐压测试有两种:AC耐压测试和DC耐压测试。由于绝缘材料的特性决定了交流和直流电压的击穿机理不同。大多数绝缘材料和系统都包含了一系列不同的介质。当对之施加交流试验电压时,电压将按材料的介电常数和尺寸等参数的比例来分配电压。而直流电压只按材料的电阻的比例来分配电压。而且实际上,绝缘结构发生击穿,往往是电击穿,热击穿,放电等多种形式同时存在,很难截然分开。而交流电压比直流电压增加了热击穿的可能性。所以,我们认为交流耐压测试比直流耐压测试更加严格。实际操作中,在进行耐压测试时,如果要使用直流做耐压测试时,试验电压要求比交流工频的试验电压高。一般直流耐压测试的试验电压是通过把交流试验电压的有效值乘以一个常数K。通过对比测试,我们有如下的结果:电线电缆产品,常数K选用3; 航空工业,常数K选用1.6 至1.7;CSA对民用产品一般使用1.414。 怎样确定耐压测试使用的测试电压呢? 决定耐压测试的测试电压取决于您产品所要投入的市场,你必须遵守该国进口管制条例组成部分的安全标准或规定。安全标准中规定了耐压测试的测试电压和测试时间。最理想的状况是请你的客户给您相关测试要求。一般耐压测试的测试电压如下:工作电压在42V到1000V之间的,测试电压是工作电压的两倍加上1000V。这种测试电压要施加1分钟。例如,对于工作于230V的一种产品,测试电压是1460V。如果减短施加电压的时间,就必须增大测试电压。 什么是耐压测试的容量,要如何计算?  耐压测试器的容量是指其功率输出。而耐压测试器容量决定于最大的输出电流x最大输出电压。例如:5000Vx100mA=500VA 为什么使用AC耐压测试与DC耐压测试所量测之漏电流值会不同? 被测物的杂散电容是导致AC与DC耐压测试所量测值不同的主要原因。用AC测试时可能无法充饱这些杂散电容,会有一个持续电流流过这些杂散电容。而用DC测试,一旦被测物上的杂散电容被充饱,剩下的就是被测物实际的漏电电流,故使用AC耐压测试与DC耐压测试所量测之漏电流值会有不同 。 什么是耐压测试之漏电流 绝缘体是不导电的,但实际上几乎没有什么一种绝缘材料是绝对不导电的。任何一种绝缘材料,在其两端施加电压,总会有一定电流通过,这种电流的有功分量叫做泄漏电流,而这种现象也叫做绝缘体的泄漏。对于电器的测试,泄漏电流是指在没有故障施加电压的情况下,电气中带相互绝缘的金属零件之间,或带电零件与接地零件之间,通过其周围介质或绝缘表面所形成的电流称为泄漏电流。按照美国UL标准,泄漏电流是包括电容耦合电流在内的,能从家用电器可触及部分传导的电流。泄漏电流包括两部分,一部分是通过绝缘电阻的传导电流I1;另一部分是通过分布电容的位移电流I2,后者容抗为XC=1/2pfc与电源频率成反比,分布电容电流随频率升高而增加,所以泄漏电流随电源频率升高而增加。例如:用可控硅供电,其谐波分量使泄漏电流增大。 耐压测试之漏电流与电源泄漏电流(接触电流)有何不同?  耐压测试是侦测流过被测物绝缘系统之漏电流,以一高于工作电压之电压施加于绝缘系统;而电源泄漏电流(接触电流)则是在被测物正常操作下,以一最不利的条件(电压、频率)对被测物量测漏电流。简单地说,耐压测试之漏电流为无工作电源下所量测之漏电流,电源泄漏电流(接触电流)为正常操作下所量测之漏电流 。 接触电流的分类 对于不同结构的电子产品,接触电流的量测也是有不同的要求,但总括来说接触电流可分为对地接触电流Ground Leakage Current、表面对地接触电流Surface to Line Leakage Current以及表面间接触电流Surface to Surface Leakage Current测试三种。 为什么要做接触电流测试? 对于 I 类设备的电子产品可触及的金属部件或是外壳还应具备良好的接地线路,以作为基本绝缘以外的一种防电击保护措施。但是[size=+0]我们也经常遇到一些使用者随意将 I 类设备当成 II 类设备使用,或是说其 I 类设备电源输入端直接将接地端 (GND) 拔除,这样就存在一定的安全隐患。即便如此,作为生产厂商有义务去避免这种情况对使用者造成的危险。这就是为什么要做接触电流测试的目的所在。 为什么耐压测试之漏电电流设定无一标准? 在AC耐压测试时因被测物种类不同,且被测物内都会有杂散电容存在以及测试电压不同就会有不同的漏电电流故无一标准。 如何决定测试电压?  决定测试电压最好的方法就是依据测试所需之规格设定。一般而言,我们会依2倍的工作电压加上1000V作为测试电压设定。例如一产品的工作电压是115VAC的话,我们就以2 x 115 + 1000 = 1230 Volt作为测试电压。当然,测试电压也会因绝缘层的等级之不同而有不同的设定。 Dielectric Voltage Withstand Testing、High Potential Testing、Hipot Testing有什么不同? 这三个名词都是相同的意思,只是在测试产业中常交替使用。 绝缘阻抗(IR)测试是什么? 绝缘电阻测试和耐压测试非常相似。把最高达1000V的DC电压施加到需要测试的两点。IR测试给出的通常是以兆欧为单位的电阻值,而不是耐压测试得出的Pass / Fail表示。一般典型的是,测试电压为500V 直流,绝缘电阻(IR)的值不得低于几兆欧。绝缘阻抗测试为非破坏试验,且能侦测绝缘是否良好,在某些规范中,是先做绝缘阻抗测试再进行耐压测试,而绝缘阻抗测试无法通过时,往往耐压测试也无法通过。 接地阻抗(Ground Bond)测试是什么? 接地连接测试,有人称之为接地连续性(Ground Continuity)测试,测量在DUT的机架与接地柱之间的阻抗。接地连接测试确定,该产品要是坏了的话DUT的保护电路是否能够胜任地处理故障电流。接地连接测试器将产生通过接地电路的,最大达到30A的DC电流或AC 均方根值电流(CSA要求量测40A),从而确定接地电路的阻抗,其一般在0.1奥姆以下。 耐压测试与绝缘电阻测试之间有什么不同呢?  IR测试是一种定性测试,它给出绝缘系统的相对质量的一个表示。通常用500V或1000V的DC 电压进行测试,结果用兆欧电阻来量测。耐压测试也给被测物(DUT)施加高压,但所加电压比IR 测试的高。其可以在AC或DC电压下进行。结果用毫安培或微安来量测。在有些规格中,先进行IR测试,接着再进行耐压测试。如果一个被测物(DUT)无法通过IR测试,则此被测物(DUT)也无法通过在更高的电压下进行的耐压测试。 为何接地阻抗测试要有开路电压限制?…

摩登3内部554258_举例分析Intel FPGA和Xilinx FPGA的区别

今天和大侠简单聊一聊 Intel altera 和 Xilinx 的 FPGA 区别,话不多说,上货。 最近有很多人在问,学习FPGA到底是选择 Intel altera 的还是 xilinx 的呢,于是我就苦口婆心的说了一大堆,中心思想大概就是,学习FPGA一定要学习 FPGA 的设计思想以及设计原理,不要纠结于单一的实验平台或者操作软件,因为你想在这个行业越走越高的话,广度和深度都是要有所了解的。 初期学习的时候尤其注重动手,选择一款操作平台以及操作软件是为了让你更好的去动手做,而不是让你在这款软件或者实验平台去做文章,因为不懂原理的话,换个环境你同样是什么都不明白。尤其是现在的科技公司产品更新升级换代还比较快,要学会去掌握最核心的知识点才是王道。 下面,咱们就来简单聊聊 Intel altera 和 Xilinx 的 FPGA 区别,欢迎大家一起交流,三人行,必有我师,共同学习,共同进步。 对于 Intel altera 和 Xilinx 的 FPGA,本人认为可以分为两个方面去比较一下,基本逻辑资源和内部基本架构。从目前企业中做开发使用的广泛性来说,Xilinx 占得比重确实是大一些,但是从其他方面来说,比如价格,相对而言 Intel altera 的便宜些。 对于两者的特点,Xilinx 的短线资源非常丰富,这样在实现的时候,布线的成功率很高,尤其是逻辑做得比较满的时候。而 Intel altera 的 FPGA 的短线资源经常不够用,经常要占用LE来充当布线资源,这也是为什么 Intel altera 的 FPGA可以便宜的原因,资源少些当然便宜,但是如果你是高手,也能把他的性能发挥得很好。 另外就是关于块RAM,Xilinx的双口RAM是真的,Intel altera的没有双口RAM,如果你要实现真正的双口RAM,只能用两块RAM来背靠背地实现,这样你的RAM资源就少了一半,如果你的应用对片内双口RAM的需求很重要,用 Intel altera 的就划不来。 下面咱们就从我刚才说的基本逻辑资源和内部基本架构这两个方面来聊聊。        1、基本逻辑资源 基本的逻辑资源我建议大家可以去看看两家的芯片做个比较,今天时间有限就不给各位详谈了,通过比较你会发现我上面说的还是有点道理的。 2、内部基本架构 从1985年Xilinx公司推出第一片FPGA到现在,FPGA的使用已经有30多年的历史了。目前主流市场的FPGA主要还是Xilinx和Intel altera两大系列,下面分别来介绍下它们各自的基本结构组成。 Xilinx的FPGA主要由以下单元结构组成:可配置逻辑块(CLB)、时钟管理模块(CMT)、存储器(RAM/FIFO)、数字信号处理模块(DSP)和一些专用模块。以Virtex-5为例,简单介绍下各模块的功能。 1、可配置逻辑块(CLB) CLB是FPGA中组成设计逻辑的主要资源,也是电路设计中工作的主要对象,下面对CLB的内外结构做一个简单介绍。FPGA的逻辑就是由阵列排布的CLB实现的,每个CLB单元都和一个开关阵列相连,并受其控制以实现逻辑,如下图所示:  每一个CLB中包含有两个基本结构(Slice),每个基本结构中包含4个查找表(LUT)、4个存储单元、广函数多路器(Wide_function Multiplexer)和进位逻辑,这种基本结构(Slice)称为SLICEL。另外,有些基本结构(Slice)中还包含使用RAM存储数据的功能和使用32位寄存器移位的功能,支持这些功能的基本结构称为SLICEM。 2、时钟管理模块(CMT) 时钟管理模块(CMT)用于产生高质量的时钟,以Virtex-5系列器件为例,CMT包括两个 数字时钟管理单元(DCM)和一个锁相环电路(PLL)。 3、存储器(RAM/FIFO) 现代Xilinx的FPGA都有内部的存储器块,以Virtex-5为例,内部包含若干块RAM,每一块36KB,并且RAM的大小可以灵活配置。Virtex-5内的RAM是同步的双口RAM,并且可以配置为多速率的FIFO存储器,极大地提高了设计的灵活性。 4、数字信号处理模块(DSP) 大多数的FPGA产品都提供了DSP。 5、其他专用模块 除了上述模块外,在现代的Xilinx的FPGA产品中还有一些其他专用模块,例如:Rocket IO千兆位级收发器、PCI Express端点模块和三态以太网MAC模块等。 Intel altera 的产品一般包括如下单元结构:逻辑阵列模块(LAB)、TriMatrix存储器模块(RAM)、数字信号处理模块(DSP)和锁相环模块(PLL)。下面以Startix II 器件为例说明 Intel altera 公司产品的结构。 1、逻辑阵列模块(LAB) 逻辑阵列模块(LAB)的主要结构是8个适应逻辑模块(ALM),还包括一些进位链和控制逻辑等结构。适应逻辑模块(ALM)是 Stratix II 器件的基本模块,其结构如下图。 每个ALM中都包含了两个可编程的寄存器、两个专用全加器、一个进位链、一个共享算术链和一个寄存器链。需要注意的是,在上图所示的组合逻辑块(Combinational Logic)中包含了两个4输入4 查找表(LUT)和4个三输入的查找表。 2、 存储器模块(RAM) Stratix II 器件具有 TriMatrix 存储结构,它包括3种大小的嵌入式RAM块。TriMatrix 存储器包括512位的M512块、4Kb的M4K块和512Kb的M-RAM块,每个都可以配置支持各种特性。 3、 数字信号处理模块(DSP) DSP块结构是为实现多种 最大性能和最小逻辑资源利用率的DSP功能而优化的。 4、 锁相环(PLL) Stratix II 器件具有多达12个锁相环(PLL)和48个独立系统时钟,可以作为中央时钟管理器满足系统时序需求。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!