标签目录:登陆摩登3要注册嘛

摩登3测试路线_安富利与安森美半导体以新开发框架加速物联网(IoT)创新进程

2021年2月22日,中国北京 —— 领先的全球技术方案提供商安富利 (Avnet) 与推动高能效创新的安森美半导体 (ON Semiconductor)联手创建了一种框架,来帮助原始设备制造商(OEM)更快地开发端到端物联网(IoT)设备。 此合作成果利用安森美半导体的快速原型系统方案简化了构建IoT赋能设备的流程,这些方案已预先配置,可通过云端联接到IoT应用开发商和服务提供商。安富利的IoTConnect®平台由Microsoft®Azure和相关的安富利IoT合作伙伴计划提供支持,促进了这种联接。 安森美半导体支持的首个解决方案是RSL10传感器开发套件,具有业界最低功耗的基于Flash的蓝牙低功耗无线电和一系列先进的环境传感器。 通过本次合作,安富利和安森美半导体尽可能地消除了IoT开发流程中的复杂性,使得OEM能轻松地围绕这些产品构建产品和体验,并更快地推向市场,同时降低风险。安富利和安森美半导体提供了精选的预集成硬件和软件方案,包括多种连接选项,还提供构建方案的指南,以简化和加速开发,让OEM能专注于构建市场差异化的解决方案。 安森美半导体IoT主管Wiren Perera说:“安森美半导体创新的低功耗系统方案与安富利强大的 IoTConnect平台,共同为迅速启动任何IoT计划提供了安全的开发环境。IoT为OEM提供巨大的机会,让其通过传感、联接和致动为产品添加自主性,从而创造新的收入来源并提高效率。安森美半导体和安富利可帮助OEM推动创新,构建更智能的设备,满足其客户的需求。” 此外,OEM可能需要许多新技能才能启动IoT项目,这使得一家公司很难让所有的元件无缝地协同工作,包括处理构建并交付IoT方案所需的多元化和全球化供应链时的复杂性。 安富利IoT副总裁Lou Lutostanski表示:“安富利和安森美半导体为满足OEM及其客户不断变化的需求提供解决方案。我们提供各种方法,来帮助OEM保持竞争力,最大限度地提高收入潜力,并采用合适的技术进行设计,以创建安全的IoT方案。”

摩登3登录网站_适合具备C语言基础的C++教程(四)

前言 在上一则教程中,我们讲述了重载运算符中前 ++和后++的重载函数的实现,阐述了在 C++中可以将运算符进行重载的方法,这种方法大大地便利了程序员编写代码,在接下来地叙述中,我们将着重讲述运算符重载时地一些更为细致地内容,其中就包括当重载地运算符返回值为引用和非引用两种状态时,代码执行效率地高低以及采用在类内实现运算符重载函数的方法。 返回值为引用和非引用的区别 在上述所示的类当中,增加一部分代码,加入析构函数以及拷贝构造函数,代码如下所示: class Point{private:    int x;    int y;public:    Point()     {        cout<<"Point()"<<endl;    }    Point(int x, int y) : x(x), y(y)     {        cout<<"Point(int x, int y)"<<endl;    }    Point(const Point& p)    {        cout<<"Point(const Point& p)"<<endl;        x = p.x;        y = p.y;    }    ~Point()     {        cout<<"~Point()"<<endl;    }    friend Point operator++(Point &p);    friend Point operator++(Point &p, int a);    void printInfo()    {        cout<<"("< ", "< ")"<< endl;     } }; 在上述的代码中,我们在构造函数以及拷贝构造函数析构函数都加入了打印信息,其中,运算符重载函数前++和后++函数沿用之前的一样,返回值不是引用,与此同时,我们在前 ++和后 ++函数中也加入打印信息的代码,代码如下所示: /* ++p */Point operator++(Point &p){    cout << "++p" << endl;    p.x += 1;    p.y += 1;    return p;}/* p++ */Point operator++(Point &p, int a){    cout << "p++" << endl;    Point n;    n = p;    p.x += 1;    p.y += 1;    return n;} 上述便是前 ++和 后 ++的重载函数,紧接着,书写主函数的代码,观察当返回值为非引用的时候,代码的运行效果,主函数代码如下所示: int main(int argc, char **argv){    Point p1(1, 2);    cout<<"begin"<<endl;    ++p1;    cout << "******************"<<endl;    p1++;    cout<<"end"<<endl;    return 0;} 上述代码的运行结果如下所示: lhp7d3H1crAE9u2 依据运行结果我们分析一下,第一条输出信息 Point(int x, int y)是因为执行了 Point p1(1,2);语句而调用的构造函数,++p这条输出信息同样也是因为执行了 ++p;而调用的构造函数,那紧接着的两条输出信息是如何产生的呢,我们回过头去看看++p的函数,可以看到 ++p的函数是一个返回值为 Point类型的函数,而上述中的输出语句 Point(const Point& p)和 ~Point()就是在创建这个返回值对象时调用的构造函数以及当返回值返回后调用的析构函数;而紧接着的输出信息是 p++和 Point()以及~Point(),p++这个输出信息自然是因为调用的后 ++重载运算符函数的构造函数而输出的打印信息,那紧接着的 Point()和 ~Point()是因为在后 ++重载运算符函数中,创建的局部变量 Point n,进而调用了 Point()函数,以及函数退出之后,局部变量销毁,调用了析构函数。 上述详细地分析了各个打印信息输出的原因,通过上述的打印信息我们可以清楚知道程序在什么地方调用了构造函数,在什么地方调用了析构函数,再次回顾上述的函数调用过程,可以看出来其实调用的Point(const Point& p)和~Point()是多余的,那要如何改进代码呢,我们只需要将前 ++运算符重载函数的返回值类型改为引用就行,这样就不会创建临时的变量,同时也就不会在调用构造函数和析构函数,改动之后的代码如下所示: Point& operator++(Point &p){    cout<<"++p"<<endl;    p.x += 1;    p.y += 1;    return p;} 那么上述代码的运行结果是什么呢?在主函数不变的情况下,输出结果如下所示: M4QzImA1uYxnBK9 可以看到上述结果中,之前在 ++p后输出的两条信息现在因为将返回值设置为引用之后就消失了,说明这样的方法避免了调用构造函数和析构函数,节省了程序运行的空间,那如果将后++重载函数设置为引用可不可行呢,很显然,如果返回的是 n的引用,那么这在语法中就是错误的,因为n是局部变量,局部变量在函数调用结束就销毁了,是不能作为引用对象的。如果返回的是 p呢,那么函数的运行结果将发生改变,换句话说就是不是实现的后 ++这个功能了。 最后,总结一下,对于一个函数来说,函数的返回结果如果作为值返回,那么代码的执行效率较低;如果作为引用返回,那么代码的执行效率较高,但是会存在一个问题,引用返回可能会导致函数运行出错,所以,在保证函数运行没有错误的前提下,为了提高效率应该使用的是引用返回。 紧接着,我们知道我们在使用 C++进行编码的时候,基本不会再采用 C语言中的语法 printf这个语句,随之替代的是 cout这个语句,我们也知道我们使用 cout进行输出的时候,往往采用的是下面这样的输出方式: cout << "m=" << m << endl; /* 此时 m 不是一个实例化对象 */ 但是如果说此时 m 是一个实例化的对象,那么像上述这样输出就是存在问题的,这个时候,就需要对 <<运算符进行重载,重载的代码如下所示: ostream& operator<<(ostream &o, Point p){    cout<<"("< ", "< ")";      return o; } 稍微对上述代码进行一下解释, 这里为什么返回值是ostream&呢,是因为对于 cout来说,它是ostream类的实例化对象,在使用 cout进行输出的时候,它所遵循的一个输出格式是 cout <<,因此,这里的返回值是 ostream。为什么返回值是引用呢,是为了满足下面所示代码的运行,同时输出了 m和 p1,结合上述代码,我们来编写主函数,主函数代码如下所示: int main(int argc, char **argv){    Point p1(1,2);    Point m;    m = p1++;    cout << "m =" << m << "p1 =" << p1 << endl; } 上述代码的运行结果如下所示: 1cGujg7yqZSIfpK 可以看到在重载了运算符 <<之后,输出实例化的对象也是可行的。 类内实现运算符重载函数 在上述代码中我们实现的 +运算符重载函数以及前 ++运算符重载函数和后++运算符重载函数,都是在类外实现的,那么如果要在类内实现以上几个运算符重载函数,应该如何写呢,我们先回顾一下,在类外面实现的+运算符重载函数的函数声明如下所示: friend Point operator+(Point &p1, Point &p2); /* 因为在类外要能够访问类里面的数据成员,因此这里使用的是友元 */ 上述是在类外实现运算符重载函数时的函数原型,那么如果函数的定义就是在类里面实现的,函数又该如何编写呢?首先,如果是在类里面实现,那么当前使用这个类进行实例化的对象本身就可以使用 *this来表征一个对象,这个时候,如果要重载 +运算符函数,那么就只需要一个Point类的形参就行,代码如下所示: class Point{private:    int x;    int y;public:    /* 省略相关构造函数的代码,可以结合前文补全 */    Point operator+(Point &p)    {        cout<<"operator+"<<endl;        Point n;        n.x = this->x + p.x;        n.y = this->y + p.y;        return n;    }} 对比上述在类外面实现的代码,对于重载的运算符 +来说,只有一个形参了,而与其相加的另一个对象使用的是this来替代。依据这样的一种思路,我们继续将前 ++和后 ++重载的运算符函数进行改写,改写之后的代码如下所示: class Point{private:    int x;    int y;public:    /* Point p(1,2); ++p */    Point& operator++(void)    {        cout<<"operator++(void)"<<endl;        this->x += 1;        this->y += 1;        return *this;    }    /* Point p(1,2); p++; */    Point operator++(int a)    {        cout<<"operator++(int a)"<<endl;        Point n;        n = *this;        this->x += 1;        this->y += 1;        return n;       }}; 结合上述的代码,我们再来编写主函数,主函数的代码如下所示: int main(int argc, char ** argv){    Point p1(1,2);    Point p2(2,3);    Point m;    Point n;    cout << "begin" << endl;    m = ++p1;    /* m = p1.operator++(); */    cout << "m =" << m << "p1 =" << p1 << endl;    cout << "*********************" << endl;    n = p2++;    /* n = p2.operator++(0); */    cout << "n =" << n << "p2 =" << p2 << endl;    return 0;} 上述代码中,注释掉的代码和没注释的代码前后是等价的,只是说注释掉的代码看起来更加直观,更加容易理解其背后的原理,而注释前的代码则更加简洁。这里额外说一点,<<的重载函数是不能够放到类内实现的,因为这个重载函数的形参不是 Point类的,所以其只能在类外才能实现。 上述中,叙述了在类内实现的重载运算符函数,接下来叙述一下 =运算符在类内实现的重载函数,我们以之前所说的 Person类来实现这个功能,Person类的代码实现如下所示: class Person{private:    char *name;    int age;    char *work;public:    Person()    {        name = NULL;        work = NULL;    }   Person(char *name, int age, char *work)   {       this->age = age;       this->name = new char[strlen(name) + 1];       strcpy(this->name,name);       this->work = new char[strlen(work) + 1];       strcpy(this->work, work);   }   /* 拷贝构造函数 */    Person(Person &p)   {       this->age = p.age;       this->name = new char[strlen(p.name) + 1];       strcpy(this->name,p.name);       this->work = new char[strlen(p.work) + 1];       strcpy(this->work, p.work);   }   ~Person()   {       if (this->name)           delete this->name;       if (this->work)           delete this->work;   }   void PrintInfo(void)    {       cout << "name =" << name << "age =" << age << "work =" << work << endl;   }} 基于上述的代码,我们可以书写如下的主函数代码: int main(int argc, char **argv){    Person p1("zhangsan", 18, "doctor");    Person p2;    p2 = p1;} 上述中,我们还没有将 =运算符进行重载,就使用了 =实现了实例化对象的运算,这样会存在一个什么问题呢,我们从源头来进行分析,=运算符执行的是值拷贝,那么在执行了上述语句之后,p2和p1之间的关系是这样的: ywhv3zYKCaRjrXx 通过上述所示的图片可以看出,如果不将 =进行重载,那么会让 p1和 p2的name 和 work指向同一块内存,这会造成什么问题呢,如果此时已经将 p1的内存释放掉了,而这个时候又要释放 p2的内存,这种情形就会出错,同一块内存不能够释放两次。 因此,就需要对 =运算符进行重载,重载的代码如下所示:    /* 注意此处的代码是在类里面实现的成员函数,这里省略的一部分代码 */   Person& operator=(Person &p)   {       if (this == &p)           return *this;       this->age = p.age;       if (this->name)           delete this->name;       if (this->work)           delete this->work;       this->name = new char[strlen(p.name) + 1];       strcpy(this->name, p.name);       this->work = new char[strlen(p.work) + 1];       strcpy(this->work, p.work);   } 这样子就会避免上述情况的出现,我们现在继续来书写主函数: int main(int argc, char **argv){    Person p1("zhangsan", 18, "doctor");    cout<<"Person p2 = p1" <<endl;    Person p2 = p1;    Person p3;    cout<<"p3=p1"<<endl;    p3 = p1;    cout<<"end"<<endl;    p1.PrintInfo();    p2.PrintInfo();    p3.PrintInfo();    return 0;} 上述主函数运行的结果如下所示: 2kiKb8NEfYynTdo 通过上述代码我们看到,实际上代码 Person p2 = p1的运行并不是调用的 = 的重载函数,而是调用的拷贝构造函数,只有 p3= p1才是调用的 =的重载函数。 在本章节的最后,额外补充一点,刚刚提到了拷贝构造函数,实际上拷贝构造函数的形参大多数都是加了const修饰符的,也就是像如下所示的这样子: Person& operator=(const Person &p) 而这个时候,如果我们定义的 Person p1也是 const的,也就是像这样: const Person p1("zhangsan", 18, "doctor"); 那这个时候在使用 p1.PrintInfo()的时候就会出错,因为此时必须把该成员函数也表明为 const的才行,代码如下所示:    /* 类内成员函数,省略部分代码 */   void PrintInfo(void)    {        <<  << name <<  << age <<  << work << ;   } 总结一下也就是说: 上述就是本期教程分享的内容,到本期教程截至,C++相对于 C语言不同的一些语法特性就到此结束了。下期教程将介绍 C++如何实现面向对象的方法。本期教程所涉及到的代码可以通过百度云链接的方式获取到。 链接:https://pan.baidu.com/s/1BC55_QH-iV23-ON0v1OGSA 提取码:iyf7 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网站_未来最强黑科技发展,中国一直走在世界前列

广义的未来科技指引领未来发展的科学技术。包括高科技、最新科技、前沿科学技术、和未来可预见科学技术等。 狭义未来科技定义:是指超越现实的科学技术。未来科技与高科技、最新科技以及前沿科学技术等的概念完全不同,而且是有本质区别的。后者代表刚刚被人类发明、创造并能够掌握和使用的,代表人类科研成果的先进的科学技术。而未来科技强调的是,人类能够预期或未能预见到的,至今仍未被人类发明或使用的,只有将来某一时期才被人类所掌握和使用的科学技术。 科技行业日新月异,技术发展的同时也衍生出了各种新奇产品。十年前我们觉得电脑、手机就是最炫酷的科技产品,然而十年后的今年再看看身边,这些物件早已经成为我们生活中的日常。 可以说中国所掌握的黑科技技术还是有很多的,其中有四项科技在世界上都是名列前茅更是引得很多西方国家前来向中国所讨教这四项科技。从这里也能够看出中国的科技实力有多强大了。随着小编一起来了解一下这四项科技分别是什么吧? 近期,德国的一个《法兰克福汇报》中,明确的指出了2021年的七大科技趋势,分别为互联网行为、深入太空、竞速无人机、对抗病毒的纳米抗体、哲学的新逻辑、争夺量子位以及少样本学习,而中国至少有四个走在世界前列。 第一就是竞速无人机,中国的无人机技术自然不用多说,大疆的无人机呈现出来的是垄断级别的,而且在现在更是将无人机发展到更高层次了,利用视频眼镜与无人机相连,然后完成无人机的第一视角零延迟体验,中国目前的无人机技术毫无疑问走在世界第一。 其二肯定就是深入太空了,在过去的一年中国完成了月球采样这样的壮举,在新的一年里中国更是确立了新的目标,天问一号探索火星、建设国际空间站以及开放中国天眼,无论哪一种都是处于世界顶尖,更是造福人类的航天事业。 其三就是互联网行为,中国如今已经拥有全球最大的互联网使用群体,在5G方面的发展更是全球领先,互联网带动了全国各大行业的发展,像是电商、电竞、云平台以及移动支付等等,中国已经牢牢掌握核心。量子是一种十分具有保密性的存在,因为在通讯中使用能够保证信息的安全可靠性能。特别是将其运用到军事通讯中,就不用担心被窃取了。曾经法国想要用战机技术与中国交换都被拒绝了。 最后就是中国的量子计算机了,这种计算机做运用的主要计算方法就是量子逻辑计算。量子计算机被认为是IT领域的下一次革命。因为它是根据量子物理学的规则计算的,所以这台机器应该能够以闪电般的速度搜索大型数据库,以极快的速度处理海量数据,并破解任何以前被认为是安全的代码。因此,争夺最强大的量子计算机的竞赛仍在继续,这将使任何超级计算机黯然失色。 2021年可能是行为互联网之年。该网络起源于所谓的物联网,即机器之间相互连通的网络。但如今,大多人已经无法理解为之设计的人工语言。从某种意义上说,这些设备完全自成一体。不仅如此,他们还具备了从不断变化的环境中得出自己的结论并根据这些结论做出(具有开创性的)决策的技术能力。对于科技的发展,中国在近几十年来可以说是紧跟着科技的发展潮流,不仅是丝毫没有被落下,更是不断进步,现在的中国科技发展一直处于世界的前端,现在仅有少数科技发达国家能够比拟,甚至中国的一些科技项目处于全球最顶尖。 传统行业逐渐失去活力的时候,其实也正是新兴产业崛起的最佳时机。以科技行业为例,过去的2015年其实已经给了我们很多的启示,一些新兴的技术已经展现出越来越成熟的一面,而且正在以惊人的速度掀开巨幕。 中国的科技发展之路从来没有令人失望过,随着时间的不断发展,中国也是在快速的发展,在各个领域都是取得了十分瞩目的成就。其中就包括在科学技术领域的成就了。大家对于中国的四大科技都有所了解了。中国的强大是我们无法想象的。对此,大家有什么想说的呢?欢迎在下发留言评论。

摩登3主管554258:_世强与中国IC设计前十企业华大半导体达成合作,国产IC领域再添一员

据悉,近日中国IC设计前十企业华大半导体与世强签订合作协议,华大半导体正式入驻世强硬创电商平台,并授权其代理旗下隔离驱动、数字电源芯片、碳化硅器件等产品。 IC设计出身的华大半导体,是中国电子信息产业集团有限公司(CEC)整合旗下集成电路企业而组建的集团公司,专业从事集成电路设计及相关解决方案,连续多年蝉联中国集成电路设计十大企业榜单,在智能卡及安全芯片、智能卡应用、模拟电路、新型显示等领域占有较大市场份额。其中,华大半导体发布的国内首款车规级隔离型IGBT栅极驱动芯片,填补了国内隔离型栅极驱动芯片的空白。 目前,华大半导体授权的相关产品、应用方案、选型指南、数据手册、测试报告等已正式上线世强硬创电商平台,工程师可免费查阅、下载或申请样品。本次华大半导体的入驻,将为世强硬创电商平台IC领域提供更多的品类和方案选择,工程师可以在线发送研发、选型以及参数需求,上千位世强和原厂的应用和技术专家将在48小时内响应,提供最优产品及解决方案。 用户可登陆世强官网,获取更多华大半导体最新最全面的技术、产品和资讯。

摩登3平台注册登录_拼板比单独PCB打样更便宜?那么该如何正确操作?

出品  21ic论坛  hobbye501 网站:bbs.21ic.com 上一篇介绍了PCB如何拼板,想必我们都知道了。 拼板,就是把多个单独的板子(相互没有连线的板子)合并成一块板子一起投版。这样的话可以一次生产多种板子,速度很快,而且一般价格都会比单独PCB打样便宜(批量)。 拼板一般使用V-Cut或者邮票孔进行连接。V割就是在板子上用V割机子在板子的上下两面划一刀,这样手工就很容易搬开了。邮票孔则是使用类似邮票孔的焊盘或者过孔进行板间的连接。 上篇介绍的就是针对特殊情况的V-CUT和邮票孔,这两种方式的拼板。 那我们再画板子的时候,如何操作呢?当然少不了利器:拼板阵列。它最大的好处就是方便,不管单板PCB怎么变化,都不用重新拼板,好贴心。     就像这样拼一个2*5或者3*3的拼板,可以把一个PCB文件里的图纸通过拼板阵列直接拼板,可以任意排布比例,间距,是不是很方便? 下面来详细介绍下操作步骤吧! 首先,我们要有一个完整的PCB工程,这个我们应该都知道,下篇,我会详细介绍下,如何新建一个完整的PCB工程及输出文档。 1.再工程里新建一个PCB文件,名字可以任意,我一般都是配合单板PCB写上拼板类似的字样。 2.在新建的PCB上,点击 Place > Embedded Board Array/Panelize。如下图所示。 3.这时会出现一个虚拟框,不要客气,放下就好了!双击之后会出现编辑区,如下 4.这里就有意思了,我们可以设置拼板比例,板子间距,板子来源等等信息 一般我都是拼板长宽不超过200MM,板和板间距一般2-5MM 看情况。 5.是不是感觉缺点啥?是的,我们要加上边框,一般都是在机械层汇总拼板边框。 6.画好框之后,要标注好V-CUT喝挖空区域,如果有邮票孔要记得打上邮票孔。 另外,贴片厂一般都要求单板对称加MASK点,双边加工艺边,且工艺边也要有定位MASK点。如图: 最后,就是将PCB拼好的阵列板转换成Gerber等加工图纸文件。给到PCB加工板厂,与板厂沟通具体工艺要求和细节。 如何将不同的PCB拼在一起? 将不同的PCB拼在一起,只需要选择某块PCB文件,拼出阵列。然后再选择其他的PCB文件,再拼出阵列。如下图所示。 上面板图就是常说的:阴阳板。就是利用了2个拼板阵列组合在一起实现的。 这里要注意的是,对于不同的PCB拼在一起的情况,那些需要拼在一起的PCB的层数,板厚等等相关参数都需要完全一致。才能拼在一起进行加工。     免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3内部554258_魏德米勒新品来了!全新Klippon® Connect TTB系列互感器接线端子

在输配电(T&D)应用中,电流和电压互感器主要实现保护和计量功能。魏德米勒全新Klippon® Connect TTB系列互感器接线端子可满足这两种关键应用的所有联接要求。即使在复杂的电路中也可非常轻松和安全地进行电流和电压互感器接线,防止在操作过程中出现操作错误,可以提高设备利用率,延长整个控制柜的使用寿命。因此,可最大程度地满足用户的各项要求。 客户受益 Ø 数据支持的规划阶段 通过魏德米勒WMC软件可轻松选择与安全相关的附件和合理的产品配置。 Ø 灵活的安装阶段 开闭点上下游的专用横联通道具备高度的灵活性。 Ø 安全操作阶段 所有与功能和安全相关的组件均牢固联接到接线端子。 产品特点 Ø 可靠的比较测量 一个专利的CM(比较测量)拨杆连接结构允许两个接线端子被选择性地分别连接一个校准的测量装置。在测量结束后,拨杆被返回到它的原始位置,而“MBB”功能仍保持有效。这是TTB系列的一个独特特点,最大限度地保证了人员和财产的安全。 Ø 增强型安全罩系统 透明的盖罩系统可保护和密封整个组件。它即可作为完整长度的材料提供,也可作为单独盖板提供。仅当所有联接组件均处于其初始位置时才可以固定它。它可以为组件提供极佳保护,以防止未经授权的访问,并且不会影响直观检查。 Ø 通过WMC软件进行数据支持的附件选择 通过在魏德米勒WMC软件中提供完整的数据,可特别轻松地选择对安全至关重要的附件,并实现安全合理的产品配置。 Ø 新的强制短路功能 内置刀闸、短接条和操纵杆的组合在一个系统中,保证了电流互感器的二次接线在纵向断开之前发生短路。这种“MBB防开路”的方式可以实现多达四个端子的操作。 Ø 固定组件 所有功能和安全相关组件均牢固地联接到接线端子。这提高了安全和维护工作期间电流和电压互感器的可靠性。 Ø 易于安装 集成的组合支脚(combi-foot)实现了在通用TS32和TS35安装导轨上的灵活简便安装。因此,无需进行代价高昂的安装导轨更换即可更换产品。 Ø 专用的横联通道 开闭点的横联通道可确保安装过程中高度的灵活性。电流互感器的短路功能和测试可能性均不受限制。这样,即使更复杂的电路要求也可使用相同标准附件来实现。 Ø 具有相同轮廓的PE端子 全新TTB系列包括具有相同轮廓的PE接线端子。它可通过标准的横联件将其联接到电流或电压互感器端子。这简化和加速了控制柜中星型节点的接地。 Ø 倾斜式测试插座 倾斜式测试插座可联接4个插头,最大宽度为10 mm。由于采用了交替式布局,因此尽管端子宽度减小,但也可快速进行所有标准测量。 Ø 不同的颜色区分 为了确保安装和维护的安全性,魏德米勒可提供广泛的颜色范围,用于对端子、附件、测试插座和连杆插接件进行颜色编码。 魏德米勒全新Klippon® Connect TTB系列互感器接线端子助您轻松、安全、高效地进行电流和电压互感器接线,减少不必要的损耗并能在整个安装过程中为您带去更多附加值!

摩登3注册平台官网_如何增强汽车设备安全性?

ISO 26262等国际标准强调,“功能安全”的概念对于“在与安全有关的功能和部件发生故障时确保系统安全”至关重要。功能安全要求安装用于检测部件异常等问题的机制(安全装置)将风险降低到可接受的风险水平。 图片来源:iso.org 在这个前提上看看WDT (Watch Dog Timer) 看门狗定时器怎样协助提升“功能安全”。 首先,我们先从什么是看门狗定时器(WDT)入手。 1. 什么是看门狗定时器(WDT)? 看门狗定时器(WDT)是监视微型计算机(MCU)程序是否失控或已停止运行的计时器。它充当监视 MCU 操作的“看门狗”。 微型计算机(MCU)是用于控制电子设备的小型处理器。MCU 安装到各种电子设备中,预装有程序软件,通过运行这些程序来控制电子设备的动作。 如因某种塬因,MCU 程序失控或完全停止运行,电子设备则可能会出现预想不到的动作,在最坏的情况下可能导致损坏或事故。 为了主动防止此类事件,看门狗定时器的作用在于不断监视 MCU 以确保其正常工作。 看门狗定时器功能可以内置在 MCU 内部,但是在这里,我们将介绍“外置”看门狗定时器,这种构成可以得到更高的安全性。 2. WDT 运行:检测 MCU 异常 看门狗定时器以设定的时间间隔与 MCU 通信。如果在一定的期间内没有收到来自 MCU 的输入信号/输入的信号过多或输入信号与预定模式不同,定时器则判定 MCU 发生异常,并向 MCU 发送复位信号。 WDT 使用多种方法(模式)来检测 MCU 异常,并且它能检测到的异常类型会随模式而异。以下是 WDT 动作和特点描述(按模式分类)。 ● 超时模式 在此模式下,如果在设定的时间间隔内未收到来自 MCU 的信号,看门狗定时器判定 MCU 发生异常,并输出复位信号。 超时模式是最普遍的 WDT 监视模式或方法,但有时无法检测到 MCU 异常。 在超时模式下,如果 MCU 在设定的时间内输出多个信号(=双脉冲),WDT 则不会检测到 MCU 异常。 ● 窗口模式 与超时模式相比,窗口模式可以更准确地检测异常。 在窗口模式下,如果在设定的时间间隔内未接收到信号或从 MCU 接收到多个信号(=双脉冲),看门狗定时器会判定 MCU 处于异常状态,并输出复位信号。 可以说窗口模式的看门狗定时器更适合于要求更高安全性的应用,例如车载设备。 ● Q&A 模式 Q&A 模式比前两种模式能够更准确地检测出异常。 在 Q&A 模式下,MCU 将预定数据输出到 WDT。 WDT 根据 MCU 输出的信号是否与预定数据匹配来确定 MCU 是否正常工作。 极高安全要求的设备可能需要 Q&A 模式的 WDT。但是与窗口和超时模式不同,此模式依赖于 MCU 和 WDT 之间的数据通信,使操作更加复杂。 对 WDT 有了概念!决定选择哪种 WDT 之前应考虑的要点。 3. 选择 WDT 的方法 是否需要“外置” WDT?通常 MCU 本身亦搭载有用于检测 MCU 异常的 WDT 功能。为什么在 MCU 已经内置有 WDT 的基础上还需要外置 WDT? 塬因是外置 WDT 为关键系统增加了额外的安全性。…

摩登三1960_芯科技 新生态 共飞腾——2020飞腾生态伙伴大会在天津隆重举行!

2020年12月29日,天津飞腾信息技术有限公司(以下简称“飞腾公司”)在天津举办了2020飞腾生态伙伴大会。大会以“芯科技 新生态 共飞腾”为主题,吸引了包括两院院士、政府领导、业内专家、行业协会、用户单位、软硬件厂商、系统集成商、媒体等1800余人参会,参会单位和企业超过200家。 2020年,是新基建市场需求爆发式增长的一年,万物互联、人工智能、5G通信、数字城市等应用规模兴起,基于底层核心算力、覆盖从端到云的信息产业协同发展和安全可信的体系建设,已成为未来计算产业的发展方向。 作为国内领先的自主核心芯片供应商,飞腾秉承“核心技术自主创新,产业生态开放联合”的发展理念,携手信息系统上下游的千余家企业,正在加速构建起一个庞大、繁荣的自主信息产业生态。为持续推进国产CPU的产业化应用,并全面展示飞腾平台创新成果、先进应用和发展规划,飞腾携手生态伙伴相约天津,共谋产业发展,共同体验“芯”算力创新的新价值,共话“芯”科技推动的计算新时代。 天津市滨海新区人民政府副区长尹晓峰在致辞中表示:“滨海新区在科技创新领域走在了前列,既有首次夺得国际超算桂冠的天河一号,又有飞腾CPU、麒麟操作系统、长城电脑、曙光计算机、360软件、数据库、紫光云、金山云等一大批业内领先的自主创新企业。”在新基建浪潮的推动下,滨海新区将成为自主创新的重要源头、原始创新的主要策源地。 (天津市滨海新区人民政府副区长尹晓峰) 中国电子信息产业集团有限公司党组成员、副总经理陈锡明在致辞中提到,“党的十九届五中全会提出坚持创新在我国现代化建设全局中的核心地位,把科技自立自强作为国家发展的战略支撑,并将其摆在各项规划任务的首位进行专章部署。“CPU芯片作为高端通用芯片的重要组成部分,是坚持科技自立自强、破除“缺芯之痛”痼疾的关键环节,在信息系统中处于极其核心的地位,是办公和业务系统高效、安全运行的基础。 (中国电子信息产业集团有限公司党组成员、副总经理陈锡明) 飞腾公司总经理窦强博士做了题为《海阔芯无界,聚势共飞腾》的主题演讲,分享了2020年飞腾CPU的生态建设和应用成果。据介绍,飞腾目前合作伙伴数量约1600家,完成了423个合作伙伴的924个项目开案设计与支持,与51家厂商的2557款软件完成适配优化与认证;携手生态伙伴发布了90余个行业联合解决方案,覆盖电信、金融、能源、交通、医疗、数字城市、工业制造等行业领域,同时耦合云计算、大数据、5G、AI、区块链等技术方向,给行业信息化建设快速发展提供“芯”动能。 (飞腾公司总经理窦强) 此外,飞腾公司在2020年实现了营收的高速增长,全年销量超150万片,全年营收超13亿元。基于飞腾CPU平台的产品已经广泛应用于我国党政办公系统、重点行业业务系统、云计算、大数据以及金融、能源和轨道交通等关系到国家安全和国计民生的重要领域。飞腾也在今年发力校企合作和技术人才培养,正式发布了飞腾培训认证体系,面向政府部委机关、行业用户、行业协会、集成商、整机商、板卡厂商等企事业伙伴共育人才,共同构筑信息人才的全新生态。 来自华能、百度、日海、联想、文思海辉、天融信和亚信的飞腾生态合作伙伴分别发表了主题演讲,详细阐述了飞腾CPU在电力、人工智能、通信、金融、政务和大数据等领域的应用情况。 会上,飞腾新一代高性能桌面处理器芯片腾锐D2000重磅发布。据介绍,腾锐D2000集成了8个飞腾自主研发的高性能处理器内核FTC663,兼容64位ARMv8指令集,主频2.3-2.6GHz,典型功耗25W,支持飞腾自主定义的处理器安全架构标准PSPA1.0,满足更复杂应用场景下对性能和安全可信的需求。 飞腾公司副总经理郭御风介绍到,腾锐D2000与上一代产品FT-2000/4管脚兼容,客户可以实现现有系统的原位拔插代换,无缝兼容。相比上一代产品,腾锐D2000的性能大幅跃升,SPECint分值为97.45,接近原来的2倍。基于腾锐D2000的台式机、笔记本、一体机、工控机、网安设备等各类型终端产品将于2021年Q1陆续上市。 多家企业在会上发布了基于飞腾CPU的全新服务器和嵌入式产品。长城、浪潮、同方、曙光、中兴通讯等15家国内厂商发布了基于腾云S2500的多路服务器产品群,锐捷、长城金融、中电智能、汉为、恒为、蓝炬等10家国内厂商发布了基于飞腾CPU的嵌入式产品群。据悉,这些产品将用于国内政务和企业办公、云计算、数据中心、金融等多个领域,产品性能、能耗以及自主程度在同类型产品中具备明显优势,能够有效支撑国家核心信息系统转型升级。 为了给行业客户提供更好的售后支持服务,提供更优质的客户体验,飞腾在今年成立了全国新基建综合服务保障平台,也是国内首个由芯片厂家主导的全国服务保障平台。平台为行业客户提供专属服务、各层面资源与解决方案,旨在为全国主要信创保障中心、集成商、整机、适配中心、联合实验室、软硬件厂商等提供培训和技术支持等服务。会上,中软、浪潮、中国系统、太极、东软、航天信息等13家集成商与飞腾签署合作协议,成为飞腾新基建服务保障平台首批战略合作伙伴,共同服务新基建和各行业信息系统转型升级。

摩登3注册网址_17张图看穿synchronized关键字

引子 小艾和小牛在路上相遇,小艾一脸沮丧。 小牛:小艾小艾,发生甚么事了? 小艾:别提了,昨天有个面试官问了我好几个关于 synchronized 关键字的问题,没答上来。 小艾:我后来查了很多资料,有二十多页的概念说明,也有三十来页的源码剖析,看得我头大。 小牛:你那看的是死知识,不好用,你得听我的总结。 小艾:看来是有备而来,那您给讲讲吧。 小牛:那咱们开始! synchronized关键字引入 我们知道,在多线程程序中往往会出现这么一个情况:多个线程同时访问某个线程间的共享变量。来举个例子吧: 假设银行存款业务写了两个方法,一个是存钱 store() 方法 ,一个是查询余额 get() 方法。假设初始客户小明的账户余额为 0 元。(PS:这个例子只是个 toy demo,为了方便大家理解写的,真实的业务场景不会这样。)     // account 客户在银行的存款     public void store(int money){        int newAccount=account+money;        account=newAccount;    }    public void get(){        System.out.print("小明的银行账户余额:");        System.out.print(account);    } 如果小明为自己存款 1 元,我们期望的线程调用情况如下: 首先会启动一个线程调用 store() 方法,为客户账户余额增加 1; 再启动一个线程调用 get() 方法,输出客户的新余额为 1。 但实际情况可能由于线程执行的先后顺序,出现如图所示的错误: 小明存钱流程 小明:咱家没钱了 小明会惊奇的以为自己的钱没存上。这就是一个典型的由共享数据引发的并发数据冲突问题。 解决方式也很简单,让并发执行会产生问题的代码段不并发行了。 如果 store() 方法 执行完,才能执行 get() 方法,而不是像上图一样并发执行,自然不会出现这个问题。那如何才能做到呢? 答案就是使用 synchronized 关键字。 我们先从直觉上思考一下,如果要实现先执行 store() 方法,再执行 get() 方法的话该怎么设计。 我们可以设置某个锁,锁会有两种状态,分别是上锁和解锁。在 store() 方法执行之前,先观察这个锁的状态,如果是上锁状态,就进入阻塞,代码不运行; 如果这把锁是解锁状态,那就先将这把锁状态变为上锁,之后接着运行自己的代码。运行完成之后再将锁状态设置为解锁。 对于 get() 方法也是如此。 Java 中的 synchronized 关键字就是基于这种思想设计的。在 synchronized 关键字中,锁就是一个对象。 synchronized 一共有三种使用方法: 直接修饰某个实例方法。像上文代码一样,在这种情况下多线程并发访问实例方法时,如果其他线程调用同一个对象的被 synchronized 修饰的方法,就会被阻塞。相当于把锁记录在这个方法对应的对象上。     // account 客户在银行的存款     public synchronized void store(int money){        int newAccount=account+money;        account=newAccount;    }    public synchronized void get(){        System.out.print("小明的银行账户余额:");        System.out.print(account);    } 直接修饰某个静态方法。在这种情况下进行多线程并发访问时,如果其他线程也是调用属于同一类的被 synchronized 修饰的静态方法,就会被阻塞。相当于把锁信息记录在这个方法对应的类上。     public synchronized static void get(){        ···    } 修饰代码块。如果此时有别的线程也想访问某个被synchronized(对象0)修饰的同步代码块时,也会被阻塞。     public static void get(){        synchronized(对象0){            ···        }    } 小艾问:我看了不少参考书还有网上资料,都说 synchronized 的锁是锁在对象上的。关于这句话,你能深入讲讲吗? 小牛回答道:别急,我先讲讲 Java 对象在内存中的表示。 Java 对象在内存中的表示 讲清 synchronized 关键字的原理前需要理清 Java 对象在内存中的表示方法。 Java 对象在内存中的表示 上图就是一个 Java 对象在内存中的表示。我们可以看到,内存中的对象一般由三部分组成,分别是对象头、对象实际数据和对齐填充。 对象头包含 Mark Word、Class Pointer和 Length 三部分。 Mark Word 记录了对象关于锁的信息,垃圾回收信息等。 Class Pointer 用于指向对象对应的 Class 对象(其对应的元数据对象)的内存地址。 Length只适用于对象是数组时,它保存了该数组的长度信息。 对象实际数据包括了对象的所有成员变量,其大小由各个成员变量的大小决定。 对齐填充表示最后一部分的填充字节位,这部分不包含有用信息。 我们刚才讲的锁 synchronized 锁使用的就是对象头的 Mark Word 字段中的一部分。 Mark…

摩登3官网注册_全网最通俗易懂SPWM入门教程,快来白嫖

目录 基本原理 自然采样法 规则采样法 单极性 双极性 如何编写程序 总结 基本原理 SPWM的全称是(Sinusoidal PWM),正弦脉冲宽度调制是一种非常成熟,使用非常广泛的技术; 之前在PWM的文章中介绍过,基本原理就是面积等效原理,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同 。 换句话说就是通过一系列形状不同的窄脉冲信号,相对应时间的积分相等(面积相等),其最终效果相同; 所以SPWM就是输入一段幅值相等的脉冲序列去等效正弦波,因此输出为高的脉冲时间宽度基本上呈正弦规律变化; 这里通常使用的采样方法是:自然采样法和规则采样法; 自然采样法 自然采样法是用需要调制的正弦波与载波锯齿波的交点, 来确定最终PWM脉冲所需要输出的时间宽度,最终由此生成SPWM波; 具体如下图所示,这里会对局部①部分进行简单分析,下面进一步介绍; SPWM波形 局部①的情况如下图所示;简单分析一下整个图形的情况; 锯齿波和调制正弦波的交点为 A和 B; 因此 A点所需时间为 T1, B点所需时间为 T2; 所以在该周期内,PWM所需要的脉冲时间宽度 Ton满足: 最终结论就是,只要求出 A点和 B点位置,就可以求出 ; 自然采样法 这里对于求解A,B位置的推导不做介绍,但是计算量比较大,因此在微处理器中进行运算会占用大量资源,下面再介绍另一种优化的采样方法:规则采样法。 规则采样法 根据载波PWM的电压极性,一般可以分为单极性SPWM和双极性SPWM;下面进一步介绍; 单极性 单极性SPWM在正弦波的正版周期,PWM只有一种极性,在正弦波的负半周期,PWM同样只有一种极性,但是与正半周期恰恰相反,具体如下图所示; 下面取正弦波的正半周期的情况进行分析; 单极性SPWM 正弦波的正半周期整体如下所示;由图中我们可以知道以下几点; 载波PWM的周期为 T; 线段 BO为当前这个等腰三角形的垂线; 线段 BO与正弦曲线 相较于点 A; 所以在该周期内 ,PWM所需要的脉冲时间宽度 Ton满足: 单极性正半周期 具体的推导过程如下: 第一步:由于O点的位置比较好确认,因此,线段 第二步:这里载波锯齿波的最大幅值为1,因此线段 第三步:根据初中学过的相似三角形定理,满足: 最终简化得到: 这里对载波的幅值做了归一化处理,如果锯齿波的最大值为 ,正弦波的幅值最大为 ,则 ; 双极性 只要符合面积等效原理,PWM还可以是双极性的,具体如下图所示;这种调制方式叫双极性SPWM,在实际应用中更为广泛。 双极性SPWM 如何编写程序 上面讲到这里PWM的 时间满足: 其中 为正弦波幅值, 为载波锯齿波幅值; 那么下面以STM32为例,介绍以下如何进行程序编写; 首先得先STM32是如何产生PWM? 通过数据手册可以知道,STM32通过TIM输出PWM,这里有几个寄存器; 计数寄存器: CNT 比较寄存器: CCR (决定了占空比,决定了脉冲宽度) 自动重装寄存器: AAR(决定了PWM的周期) 可能这么说,还是云里雾里的,先看下图; STM32的PWM产生原理 STM32中PWM的模式有普通的PWM,和中央对齐的PWM,上图使用的就是中央对齐PWM; 产生PWM的过程可以分为以下几个过程; 第一步:配置好TIM, 通常时基和ARR都会配置好,这时候PWM的周期就已经被设定好了,另外时基决定了CNT计数寄存器增加一次技术所需的时间; 第二步:刚开始, CNT ,并且 CNT开始增加,这时候PWM的输出都是低电平;当 CNT>CCR之后,PWM输出为高电平; 第三步:当 CNT的值等于AAR之后, CNT开始减少,同理 CNT ,PWM的输出低电平;当 CNT>CCR,PWM输出为高电平; 第四步:循环上述三个步骤; 程序中如何实现? 从上述STM32产生PWM的过程中不难发现, 满足; ① 上一节推导的公式如下: ② 结合①式和②式,可以得到: 上面公式中用CCR表示CCR寄存器中的值,ARR表示ARR寄存器中的值; 最后需要做的三件事 计算出ARR,一般配置TIM定时器的时候能在数据手册找到公式; 调制比,也就是 的系数; 根据③式生成正弦表,然后查表(实时计算因为涉及到较多运算量,所以利用查表,空间换时间,提高效率), 利用PWM的事件去触发中断,更新下一次CCR的值; 正弦函数表: const uint16_t indexWave[] = { 0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 89, 98, 107, 116, 125, 133, 142, 151, 159, 168, 176, 184, 193, 201, 209, 218, 226, 234, 242, 249, 257, 265, 273, 280, 288, 295, 302, 310, 317,  324, 331, 337, 344, 351, 357, 364, 370, 376,  382, 388, 394, 399, 405, 410, 416, 421, 426,  431, 436, 440, 445, 449, 454, 458, 462, 465,  469, 473, 476, 479, 482, 485, 488, 491, 493,  496, 498, 500, 502, 503, 505, 506, 508, 509,  510, 510, 511, 512, 512, 512, 512, 512, 512, 511, 510, 510, 509, 508, 506, 505, 503, 502, 500, 498, 496, 493, 491, 488, 485, 482, 479, 476, 473, 469, 465, 462, 458, 454, 449, 445,  440, 436, 431, 426, 421, 416, 410, 405, 399,  394, 388, 382, 376, 370, 364, 357, 351, 344,  337, 331, 324,  317, 310, 302, 295, 288, 280,  273, 265, 257, 249, 242, 234, 226, 218, 209,  201, 193, 184, 176, 168, 159, 151, 142, 133,     125, 116, 107, 98, 89, 81, 72, 63, 54, 45, 36,    27, 18, 9, 0}; 中断服务函数:…