• 特殊器件PCB布局的一些要求

    编排 | strongerHuang 微信公众号 | 嵌入式专栏 PCB器件布局不是一件随心所欲的事,它有一定的规则需要大家遵守。除了通用要求外,一些特殊的器件也会有不同的布局要求。 压接器件的布局要求 1)弯/公、弯/母压接器件面的周围3mm不得有高于3mm的元器件,周围1.5mm不得有任何焊接器件;在压接器件的反面距离压接器件的插针孔中心2.5mm范围内不得有任何元器件。 2)直/公、直/母压接器件周围1mm不得有任何元器件;对直/公、直/母压接器件其背面需安装护套时,距离护套边缘1mm范围内不得布置任何元器件,不安装护套时距离压接孔2.5mm范围内不得布置任何元器件。 3)欧式连接器配合使用的接地连接器的带电插拔座,长针前端6.5mm禁布,短针2.0mm禁布。 4)2mmFB电源单PIN插针的长针,对应单板插座前端8mm禁布。 热敏器件的布局要求 1)器件布局时,热敏器件(如电解电容、晶振等)尽量远离高热器件。 2)热敏器件应紧贴被测元件并远离高温区域,以免受到其它发热功当量元件影响,引起误动作。 3)将本身发热而又耐热的器件放在靠近出风口的位置或顶部,但如果不能承受较高温度,也要放在进风口附近,注意尽量与其他发热器件和热敏器件在空气上升方向上错开位置。 带有极性器件的布局要求 1)有极性或方向性的THD器件在布局上方向一致,排列整齐。 2)有极性的 SMC在板上方向尽量一致;同类型的器件排列整齐美观。 (带有极性器件包括:电解电容、钽电容、二极管等。) 通孔回流焊器件的布局要求 1)对于非传送边尺寸大于300mm的PCB,较重的器件尽量不要布置在PCB的中间,以减轻由于插装器件的重量在焊接过程中对PCB变形的影响,以及插装过程对板上已经贴放的器件的影响。 2)为方便插装,器件推荐布置在靠近插装操作侧的位置。 3)尺寸较长的器件(如内存条插座等)长度方向推荐与传送方向一致。 4)通孔回流焊器件焊盘边缘与pitch≤0.65mm的QFP、SOP、连接器及所有的BGA的之间的距离大于20mm。与其他SMT器件间距离>2mm。 5)通孔回流焊器件本体间距离>10mm。 6)通孔回流焊器件焊盘边缘与传送边的距离≥10mm;与非传送边距离≥5mm。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang PCB PCB布局

  • 电路稳定性设计的十个误区,你都了解吗?

    电路设计不仅有很多技巧,同样也存在很多误区。本文将介绍电路稳定性设计当中的十个误区。 误区1 产品故障=产品不可靠 产品出现问题,有时候并不是研发的问题。曾经有案例,面向国内中等以上发达地区的设备,因为在国内用的不错,所以出口到了哥伦比亚,但在那里频频故障,原因就在于中国大陆中等以上发达地区的海拔都比较低,所以高海拔地区,设备的气密性受到了挑战,设备内外压差增大泄露率增加。 项目立项时只考虑了低海拔,所以人家的设计是没问题的,您老总就这样要求的嘛,谁决策了拿这个型号出口哥伦比亚,他才是罪魁祸首。如果管研发的老总参与决策而没提出反对意见,他简直就是最大的罪人,毕竟销售的高管决策不懂技术还是可以原谅的,技术副总的错误则是无能。 产品可靠性是“规定的时间、规定的条件下,完成规定功能的能力”。读者一定细细品味这个定义,格物致知,看看谁在格这个定义的时候能达到更多的致知。使用现场的条件常常超过了规定的条件,而这个超出很大可能是隐含的。 误区2 过渡过程=稳态过程 在企业里做技术工作,我们常遇到一种现象,在厂子里产品一点问题也不出现,到了用户现场,就频频遭遇故障。还有一种现象,在开关机时或电网波动的应用场合,设备的故障率偏高。作为一个常见现象,不知是否有过关于此的更深入思考。这里面涉及到了一个技术思维方法论的关键性概念 —— 过渡过程。 任何事物都有稳态和动态两种情况,在事物从一个稳态跳变到另一个稳态的过程中,并不是一下子跳变完成的,而是都要经历一个变化的过程,这个道理谁都理解,说时迟那时快的电光石火之间,那也是需要时间的。这个过程就是过渡过程,那么这个过渡过程的变化状态是什么样的呢?其过程波形如。 学过《自动控制原理》的读者会觉得这个波形有点面熟,对了,它就是二阶系统的阶跃响应曲线,在这条曲线里,上升时间tr和超调量δ是一对矛盾,tr越小,则δ越大,反之,tr越大,则δ越小。 误区3 降额很容易做到,没啥问题 降额谁都会,如画画,谁都会,但不是谁都能靠画画生存。这里仅作一简单总结: 同功能、但不同工艺的器件降额系数不同; 可调器件和定值器件降额系数不同; 负载不同,降额系数不同; 同规格导线在多匝和单匝应用时降额系数不同; 部分参数不可降额; 结温降额不可遗漏。 误区4 Ta,器件可放心使用 器件损坏为何常被称之为“烧”?原因就是器件失效大都是热失效,具体注意事项有:器件环境温度≠整机环境温度,器件环境受到机箱内其他器件散热的影响,一般器件环境温度比整机环境温度要高。 误区5 电子可靠性跟机械、软件专业无关 安装、布线、布局、喷涂的处理都会影响电气性能;电磁兼容、虚焊、散热、振动噪声、腐蚀、接地都和结构有关;软件的防错、判错、纠错、容错处理措施可避免机械和电子缺陷问题。 误区6 简单器件Datasheet有没有无所谓 做设计时一定要拿到所有器件的Datasheet,然后阅读其上的所有图形图表和参数,最后是在设计上和这些曲线建立联系。如二极管的V-I特性曲线,设计时需要谨慎确认该器件在我们电路中的静态工作点。 误区7 可维修性跟我无关 电子产品可靠性的目的是什么?是赚钱。赚钱靠什么?开源和节流。开源难,节流易,不要总想着从材料费上省,材料费省了,维修费高了,从早死换成了晚死,早晚还是死,何必呢?莫不如早死早托生。最好的方式就是重视可维修性,省掉这部分费用。这是货真价实的利润。 误区8 制程控制不好是没有好的工艺人员 制程控制不好不仅仅是工艺人员的问题,这是一条价值链的建设过程。设计工程师对器件的要求、采购工程师的厂家选择、检验环节的控制内容以及设计上对器件关键指标的部分。 检测方法不应引入元器件的失效机理和损伤、装配环节也不应引入损伤(波峰焊炉温控制,手工焊接台面的防静电处理等)、出厂检验环节应该检查器件参数漂移可能会导致产品故障的部分内容、维修环节不应引入失效。 由上可以看出,出现问题哪是区区两位工艺工程师能保证得了的。所以总结出具体的做法是建立一致性,一致性的前提是设计人员提供充分、有主次的技术信息,工艺仅仅是依据设计图纸和设计文件来保障制造可靠性无限逼近于设计可靠性。 误区9 MTBF与单台机器的故障率的关系 MTBF是宏观、统计的概念,单台机器故障是微观、具体的概念。客户最喜欢问一个问题“你这个产品的MTBF值是10000小时,那我买你的这一台是不是10000h内就不会出现问题?”这是一个关公战秦琼谁更厉害的概念,让我说他俩的换算关系,您先告诉我是1km大还是1kg大? 误区10 加强测试就可解决可靠性问题 此问题既然能名列十大误区之一,其定义自然是错误的。总结有三: 有些问题通过模拟测试实验根本测不出来; 测试手段=工程计算+规范审查+模拟试验+电子仿真; 通过温度加强试验的结果计算不出对应的低温工作时间

    嵌入式ARM 稳定性 电路 误区

  • 3D打印机Marlin固件串口功能解析和程序移植

    原版Marlin固件硬件平台基于arduino,采用C++类对串口操作函数函数进行了封装,代码注释中介绍了这些函数的功能。MarlinSerial.h文件中类的定义,此处的类只保留的框架结构,留存的这些函数基本上是要一直到STM32平台要实现的函数。 class MarlinSerial //: public Stream {   public:     MarlinSerial();     void begin(long); //串口初始化设置,配置串口波特率     void end();       //禁止串口传输函数     int peek(void);   //读串口缓存中下一字节的数据(字符型),但不从内部缓存中删除该数据。     int read(void);   //读取串口数据,一次读一个字符,读完后删除已读数据     void flush(void); //等待输出数据传送完毕     int available(void);//返回的是缓冲区准确的可读字节数     void checkRx(void) }; extern MarlinSerial MSerial; //外部声明,实例化一个串口对象MSerial MarlinSerial.cpp文件中定义了具体函数的实现方式,通过实例化的对象便可以操作这些串口函数 。 循环队列简介 该串口操作函数用到了数据结构中循环队列的算法,下面先介绍一下循环队列: //定义队列 #define MaxSize  50  //定义队列中元素的最大个数 typedef struct {     int  data[MaxSize]; //存放队列元素     int front, rear; //队头指针和队尾指针 }SqQueue 把存储队列元素的表从逻辑上看成一个环,称为循环队列。当队首指针Q.font = MaxSize-1后再前进一个位置就会自动到0,这就可以利用除法取余运算来实现。 具体循环队列的实现请参考数据结构 循环队列部分。(后面整理这一部分) 为什么要在串口接收部分创建环形缓冲区? (引用)串口数据处理机制是数据接收并原样回发的机制是:成功接收到一个数据,触发进入中断, 在中断函数中将数据读取出来,然后立即处理。这一种数据处理机制是“非缓冲中断方式”,虽然这种数 据处理方式不消耗时间,但是这种数据处理方式严重的缺点是:数据无缓冲区,如果先前接收的的 数据如果尚未发送完成(处理完成),然后串口又接收到新的数据,新接收的数据就会把尚未处理 的数据覆盖,从而导致“数据丢包”。串口接收部分创建环形缓冲区便可以很好的避免因收发速度不 一致产生的数据丢包。 串口缓冲区的实现 接下来具体分析下Marlin串口缓冲区的实现(下面分析的代码为移植到STM32上的实现代码,原理一致。): .h头文件 #define RX_BUFFER_SIZE 128   //定义串口缓冲区的大小 //定义环形缓冲区结构体 typerdef struct {   unsigned char buffer[RX_BUFFER_SIZE];  //存放接收到的字符   int head;  //队头指针   int tail;    //队尾指针 }ring_buffer; 注意:这里的头和尾的定义恰与循环队列里面的头和尾定义相反,在理解上将head当作rear,将tail当作front即可 .c文件 ring_buffer rx_buffer  =  { { 0 }, 0, 0 }; //定义结构体类型的接收缓冲区并初始化 void store_char(unsigned char c)  //将接收到的数据存入缓冲区 {   int i = (unsigned int)(rx_buffer.head + 1) % RX_BUFFER_SIZE;   //如果我们应该存储的接收到的字符的位置刚好在尾端的前面   //(意味着头部将要进入尾端的当前位置),这样将会溢出缓冲区,   //因此我们不该存入这个字符或使这个头前进 if (i != rx_buffer.tail)  //缓冲区没有存满   {     rx_buffer.buffer[rx_buffer.head] = c;     rx_buffer.head = i;   } } unsigned int MSerial_available(void)  //返回串口缓存区中数据的个数 { return (unsigned int)(RX_BUFFER_SIZE + rx_buffer.head    - rx_buffer.tail) % RX_BUFFER_SIZE;   } uint8_t MSerial_peek(void) { if (rx_buffer.head == rx_buffer.tail)     { return 0;     } else { return rx_buffer.buffer[rx_buffer.tail];     } } uint8_t Mserial_read(void)  //按存入顺序逐个读取缓冲区的数据 {   uint8_t c;    /*如果头不是在尾的前面,将收不到任何字符*/ if (rx_buffer.head == rx_buffer.tail)  { return 0;   } else {     c = rx_buffer.buffer[rx_buffer.tail];     rx_buffer.tail = (unsigned int)(rx_buffer.tail + 1) % RX_BUFFER_SIZE; return c;   } } void MSerial_flush(void)  //等待串口数据传送完毕 {   // RX  //不要颠倒这个否则可能会有一些问题,如果接收中断发生在读  //取rx_buffer_head之后但在写入rx_buffer_tail之前  //之前的rx_buffer_head值可能被写到rx_buffer_tail  //使它呈现缓冲区是满的而非空的状态*/   rx_buffer.head = rx_buffer.tail; } 后面还有有什么不太理解,可以检索“循环队列” 、“串口环形缓冲区”等关键字来增进理解。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式云IOT技术圈 串口 3D打印机 Marlin

  • 想成为硬件设计高手?需要这些基础

    END 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式ARM ARM 嵌入式 单片机

  • 分享一份汽车电子行业的C标准

    排版整理 | 嵌入式大杂烩 之前给大家分享过 MISRA C 相关的内容,今天给大家分享一份汽车电子行业的MISRA C标准。 什么是MISRA? MISRA (The Motor Industry Software Reliability Association),中文名称为汽车工业软件可靠性联会,是英国的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。 其核心使命是为汽车工业提供服务和协助,帮助厂方开发安全的、高可靠性的嵌入式软件。MISRA C则是由MISRA提出的针对嵌入式C语言开发标准,目的是提高嵌入式系统的安全性、可读性和可移植性。 MISRA C一开始主要是针对汽车产业,后面他产业也逐渐开始使用MISRA C,包括航天、电信、国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。通常认为,如果能够完全遵守这些标准,则该嵌入式C代码就是易读、可靠、可移植和易于维护的。 因此,很多嵌入式开发者都以MISRA C来衡量自己的编码风格,比如著名的uC/OS就称自己99%的代码遵循MISRA C编码规范标准。 因此,作为嵌入式开发者,不论哪个行业,都应以产品安全性为前提,保证可靠性、可读性、可移植性,也就是保证自身代码尽可能符合MISRA C。 MISRA C应用在越来越多领域,作为嵌入式开发者,编码过程规范应该尽可能遵循MISRA C规则,但也分特殊情况,有的时候为了严格按规范做可能会严重提高工作量或者降低系统性能,此时需要衡量一个平衡点。 关于MISRA C,本人的几点体会。 1)编码过程尽可能遵循MISRA C规范,提高代码可靠性、可读性、可移植。可靠性(稳定性)是前提,可读性、可移植是衡量一个程序员编码水平的因素之一。 特别是对于嵌入式程序员,与硬件相关的编程,考虑到成本、供应链等问题,硬件可能会经常变动或者需要兼容多种硬件,此时,可移植性就体现出优势了,大大减少重复的编码工作。 2)特殊情况下,是可以打破规则的。比如,其中禁止使用goto语句,也是相关标准要求禁止的。有些时候是可以使用的,而且使用其他会使得程序逻辑更清晰。但,如果“特殊情况”出现非常频繁,那就得考虑自身的程序架构是否合理了。 3)可以借助一些工具进行MISRA C检查。如IAR中,就有支持MISRA C规则检查。以下为MISRA C 2004规范标准。 环境 规则1.1(强制):所有的代码应该遵守 ISO 9899:1990“Programming Language C” 规则1.2(强制):只有当具备统一接口的目标代码的时候才可以采用多种编译器和语言。 规则1.4(强制):检查编译器 / 连接器以确保支持 31 一个有效字符,支持大小写敏感。 语言扩展 Rule 2.1(强制):汇编语言应该封装起来并且隔离。 例如:#define NOP asm( “NOP”) 规则2.2(强制):源代码只能采用 /* …  * /风格的注释。 规则2.3(强制):字符序列 /* 不能在注释中使用。 注: C 语言不支持注释的嵌套即使一些编译器支持这个语言扩展。 规则2.4(建议):代码段不能注释掉。 注:应采用 #if 或者#ifdef 来构成一个注释,否则代码里如果有注释会改变代码的作用。 文档化 规则3.3(建议):编译器对于整数除法运算的实施应该写入文档。 例: -5/3 = -1 余-2 有些编译器结果是 -2 于+1。 字符集 规则4.1(强制):只能使用 ISO 标准定义的字符集。 标识符 规则6.5 (强制):在内部范围的标识符不能和外部的标识符用同样的名字,因为会隐藏那个标识符。例: int16_t i: void f() { int16_t i;      i=3 ; } 规则5.2(强制):typedef 名称只能唯一,不能重复定义。 规则5.4(强制):标记名应该是唯一的标识符。 规则5.7(建议):标识符不能重复使用。 类型 规则6.1(强制):char 类型只能用来存储使用字符。 规则6.2(强制):signed 和 unsigned char 只能用来存储和使用数据值. 规则6.3(建议):对于基本数据类型,必须使用typedef显式标识出数据长度。 例: typedef signed char int8_t; typedef unsigned int uint16_t; 约束 规则7.1(强制):禁止使用八进制数(0除外)或者八进制转义字符。 注:整型常数以 0开始会被认为是八进制。例: code[1]=109 code[2]=100 code[3]=052 如果是对总线消息初始化,会有危险。 声明和定义 规则8.1(强制):函数都应该有原型声明,且相对函数定义和调用可见。 规则8.2(强制):无论何时一个对象和函数声明或者定义,它的类型应该明确声明 。 规则8.3(强制):函数声明中的参数类型应该和定义中的类型一致。 规则8.4(强制):如果对象或函数被声明了多次,那么它们的类型应该是兼容的。 规则8.5(强制):头文件中不应定义对象或者函数。 规则8.6(强制):函数应该声明为具有文件作用域。 规则8.7(强制):如果对象的访问只是在单一的函数中,那么对象应该在块范围内声明。 规则8.8(强制):外部变量或者函数只能声明在一个文件中。 规则8.9(强制):具有外部链接的标识符应该具有准确的外部定义。 规则8.10(强制):在文件范围内声明和定义的所有对象或函数具有内部链接,除非是在需要外部链接的情况下。 规则8.11(强制):static存储类标识符应该用于具有内部链接对象和函数的定义和声明。 规则8.12(强制):数组声明为外部,应该明确声明大小或者直接初始化确定。 初始化 规则9.1(强制):所有变量在使用之前都应该赋值。 规则9.2(强制):应该使用大括号一指示和匹配数组和结构的非零初始化构造。 规则9.3(强制):在枚举列表中,”=“不能显式用于除首元素之外的元素上,除非所有的元素都是显式初始化的。 数学类型转换(隐式) 规则10.1(强制):整型表达式不要隐式转换为其他类型。 1)转换到更大的整型。 2)表达式太复杂。 3)表达式不是常数是一个函数。 4)表达式不是一个常数是一个返回表达式。 规则10.2(强制):浮点数表达式不要隐式转换为其他类型。 1)转换到更大的浮点数。 2)表达式太复杂。 3)表达式是一个函数。 4)表达式是一个返回表达式。 数学类型转换(明确) 规则10.3(强制):整型表达式的值只能转换到更窄小且是同样符号类型的表达式。 规则10.4(强制):浮点表达式的值只能转换到更窄小的浮点表达式。 规则10.5(强制):如果位运算~和<<应用在基本类型为unsigned char 或unsigned short的操作数,结果应该立即强制转换为预期操作数的基本类型。例: uint8_t a = 0x5a; uint8_t b; b = ((uint8_t)(~a))>>4; 数学类型转换 规则10.6(强制):所有的 unsigned 类型都应该有后缀“U”。 规则11.1(强制):指针不能转换为函数或者整型以外的其他类型。 表达式 规则12.2(强制):表达式的值应和标准允许的评估顺序一致。例: x=b[i] + i++; 不同的编译器给出的结果不一样,b[i] 是否先执行?应:x=b[i]; i++; 比如: x=func(i++,i); 规则12.3(强制):sizeof 操作符不能用在包含边界作用(side effect) 的表达式上。例: int32_t=i; int32_t=j;  j=sizeof(i=1234); 表达式并没有执行,只是得到表达式类型int的size。 规则12.4(强制):逻辑操作符 && 或者||右边不能包含边界作用 (side effect)。 例: if(ishight) && (x== i++)) 如果 ishight =0 那么 i++不会评估 规则12.5(建议):++和- - 不能和其他表达式用在一个表达式中。 例: u8a=++u8b + u8c–; 控制语句表达式 规则13.1(强制):赋值语句不能用在一个产生布尔值的表达式中。 例: if((x=y)!=0) … if (x=y) … 规则13.3(强制):浮点表达式不应该测试其是否相等或者不相等。 规则13.4(强制):for控制表达式中不要包含任何浮点类型。 规则13.6(强制):数字变量作为for循环的循环计数不要在循环体内部被修改。 例: flag=1; for(i=0;(i<5)&&(flag==1);i++)  {      flag=0;      i=i+3;  } 控制流 规则14.1(强制):不要有执行不到的代码。 例: swich(event)  { case 0;       do_wakeup(); break;      do_more();  …  } 规则14.4(强制) :goto 语句不能使用。 规则14.5(强制):continue 不能使用。 规则14.6(强制):函数应在函数结束有一个出口。 规则14.7(强制):witch、while do 、while for 语句体应是一个混合语句。 规则14.10(强制):所有if else if 结构都应该由 else 结束。 switch(x)  { uint8_t var; /* 违反*/ case 0:   …  } 函数 规则16.2(强制):函数不能直接或者间接的调用自己。 例:系统不能用递归,超出堆栈空间很危险。 规则16.8(强制):non-void 类型函数的所有出口路径都应该有一个明确的return 语句表达式。 指针和数组 规则17.1(强制):指针的数学运算只能用在指向数组的地址上。 规则17.3(强制):>,>=,<,<= 不能用在指针类型,除非指向同一个数组。 规则17.5(建议):禁止使用 2 级以上指针。 结构和联合 规则18.4(强制):禁止使用union(共用体)。 预处理指令 规则19.1(建议):#include 语句的前面只能有其他预处理指令和注释。 规则19.2(建议):#include 指令中的头文件名称不能包含非标准的字符。 规则19.5(强制):宏不能在函数体内定义。 规则19.8(强制):类函数宏调用时不能没有它的参数。 标准库 规则20.1(强制):标准库中的保留标识符,宏和函数不能定义,重定义和undefined。 规则20.4(强制):动态内存分配不能使用。 例:不能使用malloc、calloc、free、realloc。 规则20.9(强制):输入输出库 (stdio.h) 不能用在产生嵌入式系统中。 规则20.12(强制):时间处理函数 time.h不能使用。 运行时故障 规则21.1(强制):通过使用以下手段确保把运行时故障最小化。 1)静态分析工具/技术。 2)动态分析工具/技术。 3)编写明确的代码避免运行时错误。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang 约束 MISRA

  • 议程揭晓,MATLAB EXPO 2021 中国用户大会即将起航!

    中国 北京,2021 年 5 月 12 日 —— MathWorks 今天宣布,MATLAB EXPO 2021中国用户大会将分别于 5 月 25 日上海、6 月 8 日北京两地举行。此次大会将涵盖超过 30 余场技术演讲和 20 多个来自 MathWorks 及其合作伙伴的产品方案展示,内容包括人工智能与大数据、电气化系统仿真、虚拟整车、自动驾驶、无线通信和芯片设计等诸多热门领域,在活动现场用户可以亲身参与 MATLAB® 和 Simulink® 演示与实践。 MATLAB EXPO 2021 用户大会为众多工程师、研究员和科学家提供了一个技术交流平台,用户可在此处共享知识、畅谈趋势并通过真实的用户案例与实践演示对 MATLAB® 和 Simulink® 建立更深层次的了解。会上,MathWorks 权威专家、业界和学术界的领导者将分享使用 MATLAB® 和 Simulink® 进行人工智能算法开发和基于模型设计的最新趋势。 MATLAB EXPO 2021 中国议程亮点: 面对突如其来的疫情,全世界的科学家和工程师都展开了行动,投入到数字化转型的进程之中。MATLAB® 和 Simulink® 作为基本工具,从病毒检测到疫情缓解,再到病人治疗等诸多环节中帮助研发人员实现技术创新。会上 MathWorks 中国区总经理曹新康将为我们带来“科学济世,工程扶危——致敬抗疫科技工作者”的主题演讲。在演讲中将重点介绍在抗击疫情过程中出现的变革性项目与创新性应用,以及 MATLAB® 和 Simulink® 在其中扮演的重要角色。 在 MATLAB EXPO 2021 上海站中,MathWorks 将邀请施耐德电气(中国)有限公司全球爱迪生专家李宁带来题为“将数字模型应用于电气设备开发的全生命周期”的精彩演讲。之后广西玉柴机器股份有限公司的技术总师田翀将带来“数据科学在商用车柴油机标定开发中的应用”的演讲内容。 在之后的北京站上,中国科学院国家天文台 FAST 运行和发展中心结构机械工程部主任李辉博士将带来主题为“MATLAB 在 FAST 天文望远镜的应用”的精彩演讲(FAST 天文望远镜被誉为“中国天眼”)。在李辉博士之后,宝洁公司的研发科学家吴刚将带来“无所不在的数据分析-企业数据分析平台建设”的演讲分享。武汉精测电子集团股份有限公司显示事业群研发中心副总经理郑增强将分享“半导体智能制造:基于模型的显示量测仪器快速开发实践”。 此外,来自中信保诚基金管理有限公司、中国银河证券股份有限公司、中国电力科学研究院、上海电气集团中央研究院、江森自控日立全球工程技术中心、海尔智家股份有限公司、福特汽车工程研究(南京)有限公司、东风汽车集团有限公司技术中心、亚马逊云科技和英伟达的资深用户和合作伙伴将在分会场上带来精彩的实际案例分享。 本次会议还将介绍 MATLAB® 和 Simulink® 在 R2021a 版本中的全新功能,这些新功能将会有效地支持技术人员的研究、设计和开发工作流程。 分会场设置: 除了上述精彩演讲外,本次大会还将以“大数据与人工智能”、“电气化系统仿真、设计与实现”以及“智能车辆与轨道交通”(北京)、“新架构下的虚拟整车与自动驾驶”(上海)为主题设立技术分会场,并开设“无线通信与芯片”闭门会议。 灵活参与: 用户可根据个人行程安排,选择注册并亲临上海站或北京站会场,聆听精彩演讲,观看并深入了解 20 多个来自 MathWorks 及其合作伙伴的产品和方案展示。此外,在MATLAB EXPO 2021 北京站举办期间还会为大家带来部分专题的视频直播,敬请期待!

    MathWorks MathWorks MATLAB Simulink

  • 嵌入式学RTOS到底有哪些作用?

    嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现系统功能。当软件设计变得庞大且复杂时,设计师应该考虑使用实时操作系统。 下面给大家分享使用RTOS的8个理由: 1.硬实时响应 基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。 2.系统性能最大化 针对大型的、复杂的嵌入式应用,使用一个事件驱动的RTOS,来替代基于轮询的超循环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。 3.降低复杂度 RTOS允许应用划分为一个个小的自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。 4.高峰负载管理 RTOS提供了为管理系统高峰活动提供了一个有效的方法。更高的优先级分配给执行峰值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟。 5.紧密集成的中间件 RTOS的模块化设计使得它可以很容易的增加中间件。中间件组件以任务和驱动的方式增加。他们使用RTOS提供的资源与其它任务通信。基于相应的事件被RTOS调度。 6.更大的开发团队 每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号量等)来定义输入输出。将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目。 7.易于调试和验证 系统划分为功能明确的任务,不依赖其它任务。在整个系统集成之前,可以很容易的调试和验证每个任务。 8.代码重用 RTOS系统中的模块化设计,鼓励将软件功能创建为独立的、验证过的任务。其独立性使得在其它设计中重用这些模块变得很简单。

    嵌入式ARM 嵌入式 RTOS

  • Verilog HDL常用的仿真知识

    ①综合中的语法,都适用于仿真,在仿真中,Verilog语句是串行的,其面向硬件的并行特性则是通过其语义(语言含义)来实现的,因此并不会丢失代码的并行含义和特征。 ③仿真时间:指由仿真器维护的时间值,用来对仿真电路所用的真实时间进行建模。0时刻被称为仿真起始时刻。当仿真时间推进到某一个时间点时,该时间点就被称为当前仿真时间,而以后的任何时刻都被称为未来的仿真时间。 仿真事件都是严格按照仿真时间向前推进的,如果在同一个仿真时刻有多个事件要执行,那么首先需要根据他们之间的优先级来判定谁先执行。优先级相同,可能随机执行,也可能按照代码的顺序来执行。 ·定义过的门级或者线传输延时; ·“#”的事件控制; ·“wait”的等待语句 VerilogHDL的分层事件队列为: 当前仿真时间事件 活跃事件(顺序随机或者按照代码出现的顺序) 连续赋值; 原语输入计算和输出改变; 非活跃事件 Verilog的PLI call back例程 非阻塞赋值产生一个非阻塞更新时间,被调度到当前仿真时间 $monitor和$strobe系统任务,监控时间不能生成任何其他的事件,这是也要注意的。 将来事件 ⑦系统任务的使用: A、显示任务(display task); C、时间标度任务(timescale task); E、时序验证任务(timing check task); G、实数变换函数(conversion functions for real); 由于时间关系,我不进行详述记录了,用到的时候再进行记录。 (1)信号的初始化问题 ①代码中的变量的初始化可以用initial进行初始化,也可以在定义的时候进行初始化。 ③在Verilog HDL 中,有两种不同的原因可能导致信号值为x。第一种原因是,有两个不同的信号源用相同的强度驱使同一个节点,并试图驱动成不同的逻辑值,这一般是由设计错误造成的。第二种原因是信号值没有初始化。所以在设计组合逻辑时,需要将不确定的输入转化成确定输入,然后再完成组合逻辑。 (2)时钟信号的生成 所谓的普通时钟信号就指的是占空比为50%的时钟信号,也是最常用的时钟信号。 普通时钟信号可通过initial 语句和always 语句产生,其代码如下: parameter clk_period = 10; reg clk; initial begin   clk = 0; forever     # (clk_period/2) clk = ~clk; end ---基于always 语句的方法: ②自定义占空比的时钟信号 parameter High_time = 4, Low_time = 6; //占空比为High_time/( High_time+ Low_time) reg clk; always begin clk = 1; #High_time; clk = 0; #Low_time; end 这里由于直接对clk 信号赋值,所以不需要initial 语句初始化clk 信号。当然,这种方法也可以用于产生普通时钟信号,只是代码行数较多而已。 相位偏移是两个时钟信号之间的相对概念。 首先通过一个always 模块产生参考时钟clk_a,然后通过延迟赋值得到clk_b 信号,其偏移的相位可通过360*pshift_time%(High_time+Low_time)来计算,其中%为取模运算。 parameter High_time = 5, Low_time = 5, pshift_time = 2; reg clk_a; wire clk_b; always begin clk_a = 1; # High_time; clk_b = 0; # Low_time; end assign # pshift_time clk_b = clk_a; ④固定数目的时钟信号 parameter clk_cnt = 5, clk_period = 2; reg clk; initial begin clk = 0; repeat (clk_cnt) # clk_period/2 clk = ~clk; end (3)复位信号的产生 异步复位信号的实现代码如下,代码将产生低有效的复位信号rst_n,其复位时间为100 个仿真单位: 同步复位信号的实现代码如下: 在需要复位时间为时钟周期的整数倍时,可以将rst_repiod 修改为时钟周期的3 倍来实现,也可以通过下面的代码来完成。 数据的产生这里就不进行描述了,在以后关于常用的仿真模块中进行记录。 三、提高仿真时间的注意点 仿真代码的层次越少,执行时间就越短。这主要是由于参数在模块端口之间传递需要消耗仿真器的执行时间。 由于门级建模属于结构级建模,自身参数建模已经比较复杂了,还需要通过模块调用的方式来实现,因此建议仿真代码尽量使用行为级语句,建模层次越抽象,执行时间就越短。引申一点,在行为级代码中,尽量使用面向仿真的语句。例如,延迟两个仿真时间单位,最好通过“#2”来实现,而不是通过深度为2 的移位寄存器来实现。 例如包含`timescale 1ns / 1ps 定义的代码执行时间就比包含`timescale 1ns / 1ns 定义的代码执行时间长。 代码中的语句块越少仿真越快,例如将相同的逻辑功能分布在两个always 语句块中,其仿真执行时间就比利用一个always 语句来实现的代码短。这是因为仿真器在不同进程之间进行切换也需要时间。 Verilog HDL 语言包含一些系统任务,可以在仿真器的控制台显示窗口输出一些提示信息。虽然其对于软件调试是非常有用的,但会降低仿真器的执行效率。因此,在代码中这一类系统任务不能随意使用。本质上来讲,减少代码执行时间并不一定会提高代码的验证效率。 关于仿真的其他入门知识,比如一些无规律信号的生成、测试结果的存储和显示等问题,我会在后面进行记录,主要是以代码模块的形式记录。

    嵌入式ARM 仿真 时钟信号 功能验证

  • 实践 | 分享一个INI文件解析器(附代码)

    大家好,我是ZhengN。本次给大家推荐一篇关于INI文件解析器的文章: 1、简介 开源项目 inih ( 1.3K star ): https://github.com/benhoyt/inih inih (INI Not Invented Here 的缩写) 是一个简单的用 C 语言编写的 INI 文件解析器。 INI 文件一般用于保存配置信息,它的格式很简单: [section1] name1 = value1 [section2] name2 = value2 name3 = value3 ... 在 Linux 系统中也经常能看到 INI 文件: $ cat /etc/systemd/logind.conf [Login] #NAutoVTs=6 #ReserveVT=6 #KillUserProcesses=no ... 代码简介 inih 只有几页代码,并且设计紧凑小巧,因此对嵌入式系统非常有用。 它或多或少与 Python 的INI 文件的 ConfigParser 样式兼容,包括 RFC 822样式的多行语法和 name: value 条目。 要使用它,只需给 ini_parse() 一个 INI 文件,它将为每个解析的 name = value 对调用一个回调函数,通过回调函数返回 section,name 和 value 字符串。之所以采用这种方式 ( "SAX style",SAX 是 Simple API for XML的缩写),是因为它在低内存嵌入式系统上运行良好,而且还因为它可以做到 KISS ( Keep it Simple and Stupid)。 用户也可以: 调用 ini_parse_file() 直接从 FILE * 对象进行解析; 调用 ini_parse_string() 从字符串中解析数据; 调用 ini_parse_stream() 以自定义 fgets-style reader 函数去解析自定义数据流; 2、使用ini.h 2.1 测试例子 ini_example.c 定义数据结构: #include "../ini.h" typedef struct { int version; const char* name; const char* email; } configuration; 程序主干: int main(int argc, char* argv[]) {     configuration config; if (ini_parse("test.ini", handler, &config) < 0) { printf("Can't load 'test.ini'\n"); return 1;     } printf("Config loaded from 'test.ini': version=%d, name=%s, email=%s\n",         config.version, config.name, config.email); free((void*)config.name); free((void*)config.email); return 0; } 用户自定义处理函数: static int handler(void* user, const char* section, const char* name,const char* value) {     configuration* pconfig = (configuration*)user; #define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0 if (MATCH("protocol", "version")) {         pconfig->version = atoi(value);     } else if (MATCH("user", "name")) {         pconfig->name = strdup(value);     } else if (MATCH("user", "email")) {         pconfig->email = strdup(value);     } else { return 0; /* unknown section/name, error */ } return 1; } INI 文件: $ cat test.ini  ; Test config file for ini_example.c and INIReaderTest.cpp [protocol]             ; Protocol configuration version=6              ; IPv6 [user] name = Bob Smith       ; Spaces around '=' are stripped email = bob@smith.com  ; And comments (like this) ignored active = true ; Test a boolean pi = 3.14159           ; Test a floating point number 运行效果: $ cd inih/examples $ gcc ../ini.c ini_example.c -o ini_example $ ./ini_example Config loaded from 'test.ini': version=6, name=Bob Smith, email=bob@smith.com 2.2 更多的编译参数 有 3 种类型的编译参数可用: Syntax options,用于配置 INI 文件语法,例如指定注释行的字符; #define INI_START_COMMENT_PREFIXES ";#" #define INI_ALLOW_NO_VALUE 0 ... Parsing options,用于配置解析行为,例如解析错误时是否马上停止解析; #define INI_STOP_ON_FIRST_ERROR 0 #define INI_HANDLER_LINENO 0 ... Memory options,内存相关的配置,例如最大的行长度 / 使用 heap 还是 stack 来保存行数据; #define INI_USE_STACK 1 #define INI_MAX_LINE 200 ... 3、内部实现 3.1 整体把握 核心代码就是 ini.c 和 ini.h。 分解 ini.c: 4 个公共函数: int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, int ini_parse_file(FILE* file, ini_handler handler, void* user) int ini_parse(const char* filename, ini_handler handler, void* user) int ini_parse_string(const char* string, ini_handler handler, void* user) 5 个私有函数: static char* rstrip(char* s) static char* lskip(const char* s) static char* find_chars_or_comment(const char* s, const char* chars) static char* strncpy0(char* dest, const char* src, size_t size) static char* ini_reader_string(char* str, int num, void* stream) 剩下的就是一些宏定义,没有任何公共变量和全局私有变量,非常简洁。 3.2 核心 API 的实现 1) ini_parse_stream() 是关键函数,用于解析数据流: int ini_parse_stream(ini_reader reader, void* stream,ini_handler handler, void* user) 2) ini_parse_stream() 的参数: ini_reader reader:函数指针,提供了读取一行文本的操作; typedef char* (*ini_reader)(char* str, int num, void* stream); void* stream:待解析的文本数; ini_handler handler:函数指针,指向用户提供的回调函数。 typedef int (*ini_handler)(void* user, const char* section const char* name, const char* value); void* user:用于保存解析后的数据; 3) ini_parse_stream() 实现思路: 读取1行数据: 处理1行数据: 去掉行末尾的空格: rstrip(); 跳过行首的空格: lskip(); 忽略以 ;或# 开始的注释行: if (strchr(INI_START_COMMENT_PREFIXES, *start)) 判断是否是 section: if (*start == '[')       find_chars_or_comment(start + 1, "]"); 判断是否是键值对:find_chars_or_comment(start, "=:"); 调用用户指定的处理函数,一般是用于保存解析到的数据: handler(); 更多的源码细节,请各位自行阅读源码吧~~~ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 INI 文件解析器

  • NI收购monoDrive加速自动驾驶汽车的开发;同期宣布与Ansys战略合作满足高级仿真需求

    NI收购monoDrive加速自动驾驶汽车的开发;同期宣布与Ansys战略合作满足高级仿真需求

    2021年5月4日,NI宣布完成对monoDrive的收购。monoDrive是用于先进驾驶辅助系统(ADAS)和自动驾驶汽车开发的超高保真仿真软件的领导者。此次收购扩大了NI在ADAS和仿真市场的影响力,助力NI的汽车客户加速开发、测试和部署更安全的自动驾驶系统。 ADAS的设计周期非常复杂,汽车OEM和供应商们需要能够简化仿真、实验室测试和物理测试环境之间转换的系统,最终制造出更安全的车辆。如今,不同的工具会造成互相孤立的流程、上市时间延迟、并导致更高的成本,从而降低创新速度并妨碍先进技术的质量。 NI将利用monoDrive在信号处理和高级仿真领域的专长,通过模拟众多传感器和数千种实时场景的高保真驾驶环境的能力,帮助客户加速ADAS的交付。这一方法结合NI软件连接的系统,将帮助汽车客户实现简化仿真、基于实验室的测试环境和物理测试环境之间的转换,最终NI能帮助汽车制造商和供应商们加速迈向自动驾驶汽车时代。 NI副总裁兼汽车业务事业部总经理Chad Chesney说:“我们欢迎monoDrive员工加入NI,期待共同加快我们对汽车业务的增长雄心。monoDrive的先进软件与NI在ADAS领域的强大地位相结合,将使我们客户的软件验证工作流程实现平稳过渡。反过来,这也将提供更高的测试效率、更广的覆盖范围和更现实的测试场景,帮助汽车制造商们更快地将安全可靠的自动驾驶汽车带到路上。” monoDrive首席执行官Celite Milbrandt表示:“ monoDrive团队很高兴加入NI的汽车事业部,加速我们高保真仿真产品的部署。在过去五年中,monoDrive在车辆仿真领域取得了领导地位。我们相信NI和monoDrive产品的组合将帮助我们的客户加速实现部署更安全的车辆的目标。” 在此次收购的同时,NI还宣布了与工程仿真全球领导者Ansys的战略合作。Ansys行业领先的仿真方案使传感器供应商能够从设计到制造模拟其雷达、激光雷达和摄像头的基本物理原理。NI和Ansys将一起帮助客户解决重建真实世界仿真模型过程中的复杂挑战,以验证传感器并将数据实时注入测试中的软硬件。通过更多精确的数据和结果,将仿真的虚拟世界和现实环境物理测试的世界联系起来,这一共享的关注将为客户提供关键的产品洞察,了解其在市场上的性能表现。 “Ansys致力于在开放的生态系统中构建世界一流的产品。与NI的合作补充了这一战略,使Ansys能够为客户的工程挑战提供更全面的解决方案。”Ansys企业发展和全球合作伙伴关系副总裁Matt Zack说:“将Ansys的基于物理场景的传感器仿真方案与NI的驾驶仿真和测试架构相结合,将使我们共同的客户能够更快地开发出更安全的ADAS技术。”

    NI 自动驾驶 NI monoDrive

  • 远程升级单片机程序设计思路

    来源 | 嵌入式技术开发 之前给大家分享过IAP升级APP的例子,今天为大家分享一下远程升级单片机的设计思路。 在物联网应用中,远程IAP升级MCU的程序是一项非常有用的功能。当设备出现程序问题或者需要更新程序时,只需要在服务器上对设备进行升级,不需要在有专门的人员去现场进行升级,节省人力物力。 嵌入式专栏 1 远程升级的基础功能 要实现远程升级,首先要实现以下几个基本功能: 1.Flash读写 不管是本地IAP还是远程IAP,这都是最基本的功能。 2.无线通讯 可通过WIFI、4G、以太网等多种方式来实现,根据实际项目需求选择。 3.通讯协议 常用的通讯协议有TCP、HTTP、FTP、MQTT等。其中HTTP、FTP和MQTT都属于应用层协议,都是基于TCP(传输层)来实现的。用户也可以自己基于TCP编写简单的通讯协议来实现。 远程IAP与本地IAP的设计思路是一致的,都需要设计BOOT程序和APP程序。但也有一些需要注意的地方。主要是远程升级需要考虑网络延迟甚至网络中断的问题。体现在以下几方面: 嵌入式专栏 2 设计程序缓存区 在内部 或外部存储器开辟一块区域,用于存储分包接收到的程序数据。 等到全部数据接收完毕后再一次性写入到Flash进行升级。 这样做有以下2点好处: 1.直接升级时间可能会比较长,影响用户正常使用,增加缓存区设计可以大大减少升级时间。 2.直接升级时,如果网络出现问题,可能导致设备无法正常启动变砖。增加缓存区设计后,即使升级数据传输失败,也不影响设备的正常使用。 嵌入式专栏 3 健壮的通讯协议 本地升级时数据传输出错的概率比较小, 但远程设计时就需要多考虑一些,比如前后两包数据可能同时达到等。 因此,设计通讯协议时,就要更严谨,服务器发送的指令和数据都需要设备的确认回复。 同时,最好有一定的校验信息。,比较校验和,CRC校验等。 嵌入式专栏 4 程序备份设计 即使有上面的各种设计的保障,也不能保证升级过程不会失败。 最好能够设计一个程序备份区,在程序升级失败时运行备份区程序。 下面介绍一种简单的远程升级的步骤: 服务器发送升级请求指令。 设备回复收到请求升级指令。 服务器发送程序升级数据。(一般包含包头、包号、总包数、分包的程序数据、校验) 设备收到程序数据后,确认校验无误,存储到程序缓存区,并按包号回复服务器,防止出现传输包错乱。 服务器收到回复后再发送下一包数据,直至结束。 程序数据发送完成后,服务器发送升级结束指令。 设备收到结束指令后,回复服务器。并在Flash指定位置写入升级标志,重启进入BOOT程序。 BOOT程序读取升级标志,若需要升级,则读取程序缓存区数据,写入到Flash中。 升级完毕,跳转到Flash指定地址运行。

    strongerHuang MCU 远程升级 单片机

  • 一看就懂!动画讲解LC振荡器的工作原理

    电感器是由电线线圈组成的设备,包裹在磁性材料上。电容器是包含两个金属板的设备。如果我们在电路中将电感器和电容器连接在一起,电流和电压会振荡,我们称这些振荡的频率为该电路的“谐振频率”。该频率由电感的感值和电容的容值决定。由于电线线的电阻,振动幅度将逐渐减小。如果该电路中的导线没有电阻,这些振动将永远持续下去。 另一方面,假设我们的电路是仅由一个电容器和一个电阻器组成。一旦电容器放电,电阻两端的电压将为0。一旦电阻两端的电压为0,就不会有电流流过。如果没有电流流过,那么电容器将永远无法充电。但是,与电阻不同,电感是一种试图防止流过它的电流量发生任何变化的器件。如果电流试图停止流动,电感将施加力以保持电流通过。 在包含电阻的电路中,当电容器完全放电时,电流降为0;如果我们用电感代替电阻,那么当电流试图减小时,电感将施加力以保持电流流动。然后,该电流将以相反的方向给电容器充电。然后,电容器将要放电,并且此循环将重复进行。 假设交在该电路旁边,有一个交流电压源,具有与这些振荡完全相同的频率。如果我们添加一个电阻,电阻两端的电压始终相等,这意味着电阻两端的电压降始终为0。如果电阻两端的电压降始终为0,那么就没有电流通过。从交流电压源的角度来看,电感器和电容器的并联为开路。且可以用开路代替。而交流电压源不会知道两者之间的差异,因为无论哪种情况,电流都不会流过交流电源。 现在,假设我们采用与以前相同的电感器和电容器,我们将它们串联。由于此电路中所有组件都是串联连接的,因此每个点流过的电流量完全相同。电感与电容组合的谐振频率,仍和以前一样。在组件串联的情况下,电感器电容器组合就像短路一样。该串联的电感器和电容器可以替换为短路,而交流电压源不会知道两者之间的差异,因为会流过完全相同的电流,像以前一样流过交流电压源。然而,仅当电压源的频率恰好等于谐振频率。电压源的频率越接近谐振频率,电感器与电容器的串联组合越像短路,并且,电流的幅度将更大。如果电感器与电容器并联,则情况相反,电压源的频率越接近谐振频率,电感器与电容器的串联组合越像开路,并且流过电压源的电流越低。

    嵌入式ARM 工作原理 振荡器 LC振荡器

  • 为什么我不建议你给领导回复“收到”?

    1 当你回复“收到”时 领导在想什么? 很多人问我,怎样才是最快的成长方式? 有人说,领导最喜欢听话的员工,把领导说的全部落实到位,就一定能够得到领导的信任。 如果你也这么认为,那就要注意了。 刚入职一到两年,确实可以这么做,如果奔三了还这么操作,那你就别想升职加薪了。 我是一个实战经验非常丰富的创始人,很多具体工作,我都有了解,我会视轻重缓急,在公司群里,经常给员工一些具体的分析和看法。 这些分析和看法,其实是偏引导性的,希望帮助业务同事更好地理解公司业务,帮助他们完成各自的目标。 但我发现,每当我讲完一些工作思路后,经常会收到这样不冷不热的回复: “好的”、“好”、“收到”、“嗯”、“行”… 然后,我给负责人说了这样一番话: “如果各位负责人是我的老板,为我的部门目标提供思路,而我的员工在群里这样回复消息,看似听话照做,实则毫无信息量,毫无精神状态。 我会直接把这个员工叫出来,然后问他: 你和老板说话能精神一点吗? 老板说了那么多,都是很有用的思路和信息,你倒高冷了,只回一句“嗯”、“好”、“收到”。 你当你自己是老板吗?” 你以为你回复“收到”,体现的是你的执行力,但实际上,老板更关心的是你对目标的理解和计划。 老板给你建议,给你布置任务,就是为了帮助你完成目标,他最想知道的是: 这个建议对你有没有用?你是否完全理解了?你对目标有没有信心? 而不是一句什么都看不出来的、冷冰冰的“收到”。 回复“收到”可以,但你要时刻知道老板最关心的是什么。 这考验的,是你的职场底层逻辑。说实话,大多数员工真的不具备最基本的职场底层逻辑。 一个人的工资高低,根本不取决于是否努力、是否听话,而是你有没有尊重常识?有没有掌握最底层的职场逻辑? 如果不知道这个,其他一切都是扯淡。 接下来的内容,只要你坚持读完,一定会影响你一生。 2 从月薪2000元到身价2亿 我靠的全是底层逻辑 我是普通农村家庭长大的,没什么家庭背景,也没有什么高人指路,走到今天,全都是我一脚一脚走出来的。 毕业第一年,月薪2000元,毕业第三年,涨到6500元,毕业第五年,有人愿意给我25000元的offer。 毕业第六年,创办公司,身价超过2亿,到现在,我手下的90后员工,也开始年薪百万了。 靠的,全是这些最底层的工作逻辑。 我想和你分享,我人生中的2次选择。这2次选择,都有人希望我“听话”,但我最终都没有听话,那是因为,我有我自己明确的目标,我知道自己想去哪里,想要什么。 一次,发生在2012年,当时我在深圳华润集团工作,正在考虑创业。 以我当时的实力,立即创业还不太现实,但我从来没忘记这个目标。 就在这时,我收到了北京高速发展的明星企业「正和岛」的邀请;同时,深圳一家央企也向我抛来了橄榄枝:去做一个文职岗位,月薪25000元。 是拿25000元月薪,去央企做文职?还是接受15000元月薪,去当时发展快速的明星创业公司「正和岛」? 当时有人劝我,乖乖留在深圳,25000元的工资,在深圳都能活得非常滋润,何必去创业公司里受罪? 但我实际上一点也没有犹豫,因为我的目标是创业。 正和岛是一家高速发展的创业公司,这时候加入,能够亲历一家公司的成长;而且,加入正和岛,接触到更多更优秀的企业家,能够向这些企业家近距离学习,更有助于实现我的目标。 事实证明,我是对的。 在这段工作期间,我接触到多位商业大佬,比如: 联想集团创始人柳传志先生; 万科集团创始人王石先生; 复星集团董事长郭广昌先生; 新东方教育集团创始人俞敏洪先生; 奇虎360创始人周鸿祎先生; 中坤地产董事长黄怒波先生等…… 这些经历,对于我来说,帮助真的太大了,我从这些优秀的人身上,学到了太多太多的东西。 而第二次选择,甚至可以说,直接开启了我的事业。 28岁那年,我正式决定创业。这时,一位朋友推荐我去一家公司做高管。这家公司的老板前后找了我5次,我都没有答应。 为什么?还是因为我的目标。 我说:要不这样,我不要钱,免费帮你干3个月,帮你梳理好重点,因为这对我思考创业内容也有帮助。我只有一个条件,你帮我交一下公积金和社保就行。 于是,我花3个月帮他梳理工作,3个月后,他挽留我,但我态度很坚决,一定要去创业。 他被我的坚持打动了: 我从来没有见过对目标这么坚定的人! 我相信你,一定能够成功! 于是,他给了我一笔投资,100万。半年后,他又找了一位朋友给了我50万,两个人加起来150万,这就是我创业的启动资金,公司估值1000万。 这也成为了故事的开端,后来我的企业不断发展,到现在,公司估值3亿,我的个人身家也超过了2亿。 看来,不仅仅是领导,命运也更喜欢完成目标的那个人。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    strongerHuang 职场 底层逻辑

  • Achronix宣布其业界性能最高的Speedster7t FPGA器件现已开始供货

    中国深圳市,2021年4月 – 高性能现场可编程逻辑门阵列(FPGA)和嵌入式FPGA(eFPGA)半导体知识产权(IP)的领导性企业Achronix半导体公司今日宣布:公司已开始提前向客户交付其采用7nm工艺的Speedster®7t AC7t1500 FPGA芯片。Speedster7t系列产品是专为处理人工智能/机器学习(AI/ML)、5G基础设施、网络处理、计算存储、测试和测量等一系列多样化应用中的高带宽工作负载而设计;在这些应用中,Speedster7t FPGA消除了传统FPGA具有的关键性能瓶颈。 Speedster7t FPGA系列产品采用了台积电(TSMC)的7纳米工艺技术,为网络处理、存储和计算加速等应用提供业界最高的性能。Achronix首席执行官Robert Blake表示:“Achronix的Speedster7t FPGA芯片为客户提供了当今可用的FPGA芯片所能提供的最高带宽,并包含创新性的架构特性,从而使其成为数据加速应用的理想选择。” “我对Achronix团队所取得的成就感到非常自豪。该器件的运行符合我们的预期,同时首批芯片的硬件验证也提前完成,使得我们能够将该产品的上市时间从数月缩短至数周,这得益于我们的代工合作伙伴台积电(TSMC)领先的工艺技术和在制造领域内的专业性。” AC7t1500 FPGA芯片为高带宽应用进行了优化,它包括业界首个双向带宽容量超过20 Tbps的二维片上网络(2D NoC),以及112 Gbps SerDes、PCIe Gen5、400G以太网和外部存储器带宽为4 Tbps的GDDR6接口;它还包括一个全新的、创新性的机器学习处理器(MLP)模块阵列,该模块阵列非常适合AI / ML应用中所需的各种高性能工作负载。Speedster7t FPGA由Achronix的工具套件提供支持,该套件包括Synplify Pro综合工具以及ACE布局布线和时序工具。这些经过行业验证的设计工具现已可供客户使用来评估和设计Speedster7t FPGA器件。 Speedster7t FPGA的主要架构性创新之一是拥有业界首个2D NoC片上网络。2D NoC覆盖了整个FPGA逻辑阵列并提供专用的高带宽路径,从而使所有的功能单元模块和外围I/O之间以及其与FPGA逻辑阵列之间可以实现互连。2D NoC消除了传统FPGA中存在的复杂的布线瓶颈,并且可以在遍布整个FPGA中的80个节点的每个节点上发送或接收512Gbps的带宽,从而产生大于20Tbps的双向总带宽。这种结构简化了布局布线并加快了时序收敛,从而支持设计人员去使用所有可用的逻辑处理和存储器资源,以在其设计中实现差异化。 供货计划 目前正在向客户提供AC7t1500 FPGA的工程样片。Achronix预计将在2021年下半年完成对FPGA逻辑阵列、硬IP和外部接口的全器件验证,并将在2021年底前开始出货量产器件。 2021年1月,Achronix与ACE Convergence Acquisition Corp.达成了最终合并协议,使得Achronix在纳斯达克上市。预计该交易将于2021年上半年完成。

    Achronix半导体 FPGA 人工智能 Achronix

  • 解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革

    解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革

    内容重点: ● Arm Neoverse V1 平台是 Arm 新型计算系列的第一个平台,也是 Arm 设计的首款支持可伸缩矢量扩展(SVE)的内核,可为高性能计算与机器学习提供 50% 的性能提升 ● Arm Neoverse N2 平台是第一个基于 Armv9 架构的平台,可为多样工作负载提供 40% 的性能提升 ● Arm Neoverse CMN-700 是业界最先进的 mesh 互连技术,能充分发挥 Neoverse V1 和 N2 平台的性能与每瓦性能优势 在去年 9 月更新的产品路线图基础上,Arm 近日公开了Arm® Neoverse™ V1 和 N2 平台的产品细节。为满足基础设施应用的各种需求,这两个平台的设计旨在解决当前正在运行的各种工作负载和应用问题,并分别带来 50%¹和 40%¹的性能提升。此外,Arm也同时发布了CMN-700,作为构建基于Neoverse V1和 N2 平台高性能SoC的关键部件。 Arm基础设施事业部高级副总裁兼总经理Chris Bergey表示:“展望下一个计算时代,我们想要改变行业对部署基础设施的思维。每一个创新者都不应该被要求在性能与能耗之间进行抉择, Neoverse 平台提供了两者兼得的最佳解决方案,促使从云到边缘的广泛应用能够实现。” Neoverse V1:带动高性能计算的变革 与N1相比,Neoverse V1带来了 50%¹ 的性能提升、1.8倍的矢量工作负载优化、以及4倍的机器学习工作负载优化,同时,Neoverse V1也是Arm强调性能优先的新型计算系列的第一个平台。Neoverse V1使芯片合作伙伴能灵活地为高度依赖CPU性能和带宽的应用构建计算能力,并为其提供 SoC 设计的灵活性。 秉持性能至上的思维,Neoverse V1 的设计理念创造了Arm迄今为止设计过的最宽微架构,以便容纳更多运行中的指令,支持高性能和百万兆级计算等市场应用。Neoverse V1宽而深的架构,加上 SVE功能将使其在单核性能和通过SVE延长代码存活期等方面占据领先优势,并为芯片设计人员提供可实现的灵活性。在法国芯片公司 SiPearl 和韩国电子通信研究所( ETRI )的高性能计算 SoC 中都能看到这些设计要件的优势。 Neoverse N2:引领从云到边缘应用的性能 Arm在几周前发布了Armv9架构,以满足全球对无所不在的专用处理能力的需求。Neoverse N2平台是第一个基于Armv9架构的平台,在安全性、能耗以及性能方面都有全面的提升,正在为基础设施核心铺平道路。 相比于N1,Neoverse N2在保持相同水平的功率和面积效率的基础上,单线程性能提升了40%¹。Neoverse N2 具备良好的可扩展性,可以横跨从高吞吐量计算到功率与尺寸受限的边缘和5G应用场景,并在这些应用中带来优于N1的表现,例如,在云端上提升 1.3 倍的NGINX,在 5G 和边缘应用上提升 1.2 倍的DPDK 数据包处理。 Neoverse N2平台提供了优异的单线程性能和业界领先且能为用户减少TCO的每瓦性能表现。Neoverse N2是第一个具备SVE2功能的平台,该功能可为云到边缘的性能效率带来巨大的提升。在诸如机器学习、数字信号处理、多媒体和5G等广泛应用场景中,SVE2除了带来大幅性能提升外,还带来 了SVE 具备的编程简易性及可移植性等优势。 打造异构SoC 基于CMN-600的成功基础,CMN-700在每个矢量上进一步提升了性能——从内核的数量、缓存的大小,到附加内存及 IO 设备的数量和类型。 CMN-700 赋能了多芯片、内存扩展和加速器的下一代应用场景实现。通过Arm对CCIX和CXL持续不断的投入,更多的定制选项应运而生,进而使合作伙伴的解决方案具备总线和高核数的可扩展性特色。这将为突破传统的硅限制提供新的机遇,并为紧密耦合的异构计算提供更大的灵活性。 关于CMN-700的特色与功能,可点击Neoverse V1博客和Neoverse N2博客。 Arm基础设施生态系统:持续增长、势头强劲 Neoverse产品路线图在去年9月的更新,证明了Neoverse在Arm生态系统中受到了广泛的关注与采用,以下列举了Arm合作伙伴基于Neoverse的新功能,为基础设施市场带来了卓越的产品性能、 每瓦性能和TCO等优势: ● Marvell发布了基于Neoverse N2 的OCTEON系列网络解决方案,并预计于2021年底前试产。相较于前一代的OCTEON解决方案,其性能提升高达3倍。 ● 印度电子信息技术部(MeitY)已宣布将加入法国芯片公司 SiPearl 和韩国电子通信研究所( ETRI)的行列,采用Neoverse V1驱动国家级百万兆级高性能计算项目。 ● 甲骨文计划在Oracle云基础设施上采用Ampere® Altra® CPU,为各种工作负载提供最佳的性价比。 ● 由Arm技术驱动的AWS Graviton2通过稳定的增长与区域扩展,正持续快速地扩张其EC2的覆盖。 ● 阿里云在即将上线的基于Arm架构ECS 实例上完成了测试,结果显示在 SPECjbb® 的测试数据中获得了惊艳的表现,且基于Arm架构运行的 DragonWell JDK 性能提高了 50%。 ● 腾讯在硬件测试和软件支持方面持续投入,使其在云应用上能采用 Arm Neoverse 技术。 这些合作伙伴正充分利用 Neoverse 平台的特色。对于基础设施工作负载能获得的效益、以及合作伙伴如何计划实施并推出基于 Neoverse IP 的产品,这些案例仅是冰山一角。 合作伙伴证言: Cloudflare “Cloudflare为全球100个国家、超过200个城市提供网络支持,且覆盖范围正在持续增长。为了确保以经济实惠的方式扩展Cloudflare的网络服务,强劲的CPU性能和能效至关重要。基于Arm Neoverse平台的 CPU展示了业界领先的性能和能效,同时,我们也期待Arm在Neoverse V1和N2平台所带来的发展方向。” Cloudflare全球基础设施高级副总裁 Nitin Rao 韩国电子通信研究所ETRI “韩国电子通信研究所在过去40多年来一直为韩国在电子计算领域的领导地位做出贡献。为了追求先进的人工智能、大数据、云计算和物联网,ETRI正基于Arm Neoverse V1内核开发K-AB21“人工大脑” CPU。我们看中了Neoverse V1的高性能和低功耗等优势,相比于替代的HPC和AI加速器技术,它将帮助我们实现2.5倍性能提升和60% 功耗降低的目标。” 韩国电子通信研究所 AI处理器研究部主任Youngsu Kwon博士 Marvell “Neoverse N2提供了业界最高的每瓦计算能力,对比于当前的产品,其计算性能可提升3倍,每瓦SPECint可提升4倍。我们的下一代OCTEON DPU系列将采用 Arm Neoverse N2 内核,为从5G、存储、到信号处理和安全性等关键基础设施应用提供动力。” Marvell处理器业务部执行副总裁Raj Singh 印度电子信息技术部 “在电子信息技术部(MeitY)和科学技术司(DST)的支持下,我们正努力在国家超级计算任务(NSM)中实现超级计算技术的全面本土化。我们在NSM的下一个目标就是开发本土设计的HPC处理器SoC,以此在印度建立百万兆级计算能力。 为此,我们选择了结合高端CPU和矢量性能与强大能效的Arm Neoverse V1平台,为我们的SoC和系统设计人员带来优化CPU、内存和IO功能的自由度,以应百万兆级计算的独特需求。” 印度先进计算发展中心 总干事Hemant Darbari博士 NVIDIA “随着GPU驱动的AI和机器学习技术在跨产业的出现和采用,NVIDIA一直处于席卷整个数据中心市场巨大变革的最前沿。在从云到边缘的整个计算基础设施中,我们也看到了类似的转变正在发生,我们相信Arm既是这种转变的催化剂,也是解决方案。 当前客户对专用芯片的采用是前所未有的巨大,而NVIDIA和Arm正处于这一趋势的核心。” NVIDIA加速计算副总裁兼总经理Ian Buck 甲骨文 “我们相信从边缘到云,Arm将会无处不在。我们看到基于N1的处理器提供了云用户所需要的性能一致性、可扩充性和安全性。通过与Ampere Computing和领先的ISV合作,Oracle正在Arm服务器方面开发出一流、简单且经济高效的解决方案。” 甲骨文云基础架构计算高级副总裁Bev Crair 红帽 “红帽与Arm的合作横跨从技术架构、标准制定到生态系统支持。作为全球领先的企业Linux平台,红帽企业Linux为客户提供了架构的选择,并且为基于Arm Neoverse平台的云到边缘运行的各种处理器提供支持。我们期待将这种支持扩展到基于Armv9架构的未来Neoverse V系列和N系列的处理器,这将通过“机密领域”功能进一步支持零信任架构。” 红帽杰出工程师Jon Masters SiPearl “SiPearl肩负重任,正在设计和推出一个驱动欧洲第一台百亿亿次超级计算机的CPU技术。由于Arm Neoverse V1的高性能和效能,及Arm对SVE的支持,SiPearl选择了Arm Neoverse V1内核作为通用处理元件。我们对于Arm计算带动HPC与加速机器学习应用的潜能感到振奋,并期待以此为科学界做出贡献。” SiPearl首席执行官兼创始人Philippe Notton SUSE “SUSE 在 Arm 生态系统中扮演了重要而积极的角色。 从早期基于 64 位 Arm 的企业级 Linux 开始,基于Arm架构的SUSE Linux 企业服务器便提供了一套安全、可靠和可适的操作系统,并在横跨Raspberry Pi到高性能计算环境的Arm基础设施中广泛使用。通过与Rancher的结合,SUSE在数据中心到边缘的容器化工作负载实现了广泛的Arm应用。SUSE期待与Arm持续合作,通过优化的Arm架构解决方案,包括下一代Arm Neoverse处理器内核,帮助企业缩短实现价值的时间,使客户能够随即进行创新。” SUSE首席技术和产品官Thomas Di Giacomo 更多资源请访问官方网站。 ¹此处的IPC提升是基于相同的处理工艺和频率

    Arm ARM Neoverse

发布文章