• 你偷看的小黄片,全被监视了

    写在前面 有没有这样的经历:当用手机搜索一件物品时,APP很快就会给你精准推荐这件物品。这并不不是APP有多懂你,二是你的隐私被APP给监视了。哪怕你用的是无痕模式,后台依然记录你的搜索。在互联网时代,隐私成为了一种奢侈。排版:最码农长夜漫漫,总是让人无心睡眠。你悄悄打开收藏已久的网页,熟练地切换成“无痕模式”。但你以为清理历史记录 切换无痕模式就安全了,就太天真了!今天小白告诉你,网页被谁偷窥了。浏览器难咎其责,之前谷歌就曾因无痕模式泄露隐私,遭到50亿高额索赔。浏览器获取相应内容的过程是这样的:输入关键词 → 记录搜索记录 → 传输到网络运营商主网络 → 再把信息传送到相应的网站服务器 → 最后把搜索到的结果传送给用户。中间这么多流程,你的小秘密早已不保。而且浏览器还会通过Cookie记录用户的输入数据,自动保存用户信息。当用户下次再登录该网站时,网站就可以通过Cookie辨别用户身份,直接登陆。基于用户的这一顾虑, 浏览器推出无痕模式。看似没什么问题,但无痕模式的查看详情里有说明:以下各方可能仍会看到您的活动:您访问的网站您的雇主或学校您的互联网服务提供商。这主要是为了能够收集用户数据,分析用户的喜好,精准投放广告。其次,要怪输入法。输入法用的越久就越来越懂你。输入法会根据用户输入内容,精准推送广告早就不是什么秘密了。虽然开启了无痕模式,但你用公司的网老板会知道,你用学校的网学校会知道,您访问的网站更知道。在这个互联网时代,隐私早已经成为一种奢侈。尼玛,Github上最邪恶的开源项目了!女孩子勿进哦~为什么下载小电影时,经常会卡在99%?自研XPU构架,发布昆仑AI芯片,百度在悄悄逆转芯片跑操作系统时,RTOS和Android该如何选择?

    玩转嵌入式

  • MOS管怎么坏了?几种失效模式分析

    写在前面 MOS管是常用的电子元器件,由于导通内阻小,在电源、电力电子、电机控制等行业应用广泛。既然常用,那么遇到失效的概率就非常大。好在MOS管的失效就那几种情况,今天和大家分享一下MOS管的几种失效模式。失效模式一:雪崩 如果在漏极-源极间外加超出器件额定VDSS的电涌电压,而且达到击穿电压V(BR)DSS (根据击穿电流其值不同),并超出一定的能量后就发生破坏的现象。在介质负载的开关运行断开时产生的回扫电压,或者由漏磁电感产生的尖峰电压超出功率MOSFET的漏极额定耐压并进入击穿区而导致破坏的模式会引起雪崩破坏。典型电路:失效模式二:器件发热 由超出安全区域引起发热而导致的。发热的原因分为直流功率和瞬态功率两种。直流功率原因:外加直流功率而导致的损耗引起的发热●导通电阻RDS(on)损耗(高温时RDS(on)增大,导致一定电流下,功耗增加)●由漏电流IDSS引起的损耗(和其他损耗相比极小)瞬态功率原因:外加单触发脉冲●负载短路●开关损耗(接通、断开) *(与温度和工作频率是相关的)●内置二极管的trr损耗(上下桥臂短路损耗)(与温度和工作频率是相关的)器件正常运行时不发生的负载短路等引起的过电流,造成瞬时局部发热而导致破坏。另外,由于热量不相配或开关频率太高使芯片不能正常散热时,持续的发热使温度超出沟道温度导致热击穿的破坏。失效模式三:寄生二极管损坏在DS端间构成的寄生二极管运行时,由于在Flyback时功率MOSFET的寄生双极晶体管运行,导致此二极管破坏的模式。失效模式四:由寄生振荡导致的破坏此破坏方式在并联时尤其容易发生在并联功率MOS FET时未插入栅极电阻而直接连接时发生的栅极寄生振荡。高速反复接通、断开漏极-源极电压时,在由栅极-漏极电容Cgd(Crss)和栅极引脚电感Lg形成的谐振电路上发生此寄生振荡。当谐振条件(ωL=1/ωC)成立时,在栅极-源极间外加远远大于驱动电压Vgs(in)的振动电压,由于超出栅极-源极间额定电压导致栅极破坏,或者接通、断开漏极-源极间电压时的振动电压通过栅极-漏极电容Cgd和Vgs波形重叠导致正向反馈,因此可能会由于误动作引起振荡破坏。失效模式五:栅极电涌、静电破坏主要有因在栅极和源极之间如果存在电压浪涌和静电而引起的破坏,即栅极过电压破坏和由上电状态中静电在GS两端(包括安装和和测定设备的带电)而导致的栅极破坏哪些把人笑哭的奇葩注释PCB板画废了,才知道阻抗设计这么重要!CAN总线很难吗?CAN总线看不懂是不可能的!怎么看懂芯片的时序图?怎么根据时序图编程?

    玩转嵌入式 MOS管

  • 裸奔,还是上操作系统,两者有啥区别?

    写在前面 刚开始学 51 、STM32单片机,自然还是要从裸机开始跑,但是随着写的裸机软件越来越多,裸机所暴露的问题也越来越多。那么,裸奔和操作系统到底有什么区别呢?裸奔的局限性 1、并发性:程序并发工作效率低在写裸机软件时,不可避免的在主程序中会有一个超级大的 while(1) 循环,这里面几乎包含整个项目的所有业务逻辑。因为每个业务逻辑里面都会有 delay 这样的循环等待函数,这样导致了所有的业务逻辑几乎都是串行起来工作的。这个时候 CPU 就会有很多时间都浪费在了延时函数里,一直在空转,导致软件的并发效率非常差。2、模块化:高内聚、低耦合的原则从软件工程的角度,我们在做软件开发时,都会强调高内聚、低耦合的原则。而裸机的模块化开发难度非常大,模块间的耦合较重,这也导致了无法在大型项目使用裸机来开发。还是刚才 main 函数中大 while(1) 的例子,可以想象到那么多功能都紧紧的挤在一个函数里,不可拆分,模块化开发的困难重重。举一个非常贴切的例子,在一些使用看门狗的项目中,如果使用 delay 延时函数,那得注意点,万一延时过长,主函数来不及喂狗,看门狗就被触发了。最后会产生这样一种感觉,一个简简单单的 delay 还得考虑喂狗功能,裸机开发时操的心太多了,自然无法应用在大型项目中。3、生态:很多高级软件组件,必须依赖于操作系统来实现比如说,我前些年开源过一个基于 FreeModbus 的 Modbus 主机协议栈,因为要考虑各个平台适配问题,原本计划支持各种各样的操作系统,甚至是裸机平台。在各个操作系统上的适配都非常容易,但再去尝试着适配裸机时,发现难度重重,有一些函数在裸机上实现起来非常复杂,而且针对于不同的裸机环境,几乎没有通用性可言,太耗费精力了。所以我最终就放弃了裸机适配,一直到现在,在裸机上还是没法用这个 Modbus 主机协议栈。还有一些软件无法运行在裸机上,比如:乐鑫、Realtek、 ti 和 联发科 提供的 WIFi SOC SDK ,一些蓝牙 SOC 的 SDK 也都是只支持操作系统,所以,如果你不了解、不会使用操作系统,这些芯片也就玩不转了。4、实时性:功能复杂的情况下,实时性无法保证软件的实时性在一些领域会有一定的要求,软件的每个步骤必须在指定的时间被触发。工控领域就是最常见到的场景,如果实时性无法保证,机械设备可能就无法按照指定时序要求去动作,以至于发生机械事故,甚至会威胁到人的生命。回过来接着看裸机软件,如果软件变得庞大以后,可以想象到,主程序中那么大的一个 while(1) 循环,代码耦合严重,到处都是 delay 延时,要保证实时性几乎是不可能的。5、可重用性:软件可重用性差,总是重复造轮子可重用性与模块化程度有直接的关系。相信大家每个人在工作中都不想做很多重复性的工作,同样在写代码时,也想着尽可能少写一些功能相似的代码。但在这个嵌入式碎片化极其严重的时代,各式各样的芯片,想要让同样的代码,在裸机环境下同时适配不同的硬件,难度非常大。这样也就导致了裸机的代码会过多的依赖于底层硬件,重复造轮子的过程也就不可避免。操作系统带来的优势第一次接触操作系统,是在 2010 年左右,那时 STM32 已经开始流行起来,这么强大的单片机,有很多人都在上面跑操作系统,我也跟着移植了 ucos ,在上面还跑了 ucgui ,这个时候写应用完全是一种全新的体验,爽了很多,玩了一年了 ucos ,后来接触到咱们国产的 RT-Thread ,在它上面有很多现成的、拿来即用组件,试用以后发现更爽,就一直用到了今天,大概有 8 年了。操作系统的优越性 1、 模块化使用了操作系统以后,整个软件的工作被拆分成了由多个任务来构成(也会被称为线程),每个线程有自己独立的运行空间,即线程堆栈,这个时候每个线程你玩你的,我做我的,咱们大家互补干涉,模块化程度得到很好的提高。2、 并发性从并发的角度来看,各个线程在使用 delay/事件等待 这类函数时,会自动的让出 CPU 给其他有需要的线程,不仅书写 delay 延时函数操的心少了,整个 CPU 的利用率也得到了提高,最终提升并发性。3、 实时性再来看实时性,像 ucos/RT-Thread 这些 RTOS 本身就被设计为实时的操作系统,各个线程都有不同的优先级别,重要的线程可以设为高优先级,不重要的线程可以降低优先级,做好全局的统筹规划后,这样整个软件的实时性也能得到保证。4、开发效率由于操作系统提供了统一的抽象接口层,方便了可重用组件的积累,提高开发效率。操作系统其实是一群软件大牛们智慧的结晶,他们站在应用软件、底层驱动的开发角度,对很多常见的软件功能进行了封装、抽象,比如:信号量、事件通知、邮箱、环形缓冲区、单向链表/双向链表等等,这些功能拿来即用,对于开发者方便极了还有一些操作系统,比如:Linux 和我们国产的 RT-Thread ,他们这些系统对碎片化的硬件,统一封装了一套标准的硬件操作接口,一般称为设备驱动框架。这样我们的应用软件工程师,就可以专攻应用的工作,再也不用怕更换硬件,又需要重复造轮子了。5、软件生态生态的丰富带来了量变到质变的过程(自己玩->大家一起玩)使用操作系统所带来的软件可模块化、重用性的提升,也使得我们自己在做软件开发时,可以封装一套基于操作系统、适合嵌入式的可重用组件,这些组件不仅可以用在自己的项目中,还能开源出来分享给更多有需要的嵌入式开发者,把软件的价值最大化。个人感觉这是一件蛮有意义事情,我自己本身也是一名开源极客,也有在 GitHub 上开源一些嵌入式软件。说实话在做开源软件前,能够深入交流嵌入式软件的地方非常少,毕竟大家的代码不是芯片不一样,就是硬件不一样,你的代码给了他,也不一定能运行起来。但是自从用了操作系统后,软件的可重用性提高了,能够让更多的人很迅速的用起来我的开源软件,这个时候能够有更多的人可以一起交流,还接触到了很多的大牛们,甚至是国外的朋友。俗话说:水涨船高,我的能力也从此得到了快速的提升。所以总结下来,有一个能一起交流嵌入式软件圈子还是蛮重要的,自己闭门造车,可能都是在重复造轮子。常见RTOS优势对比ucos/freertos/RT-Thread,选择这三款 OS 的原因是,它们的年限都比较长了,在市面上都蛮有知名度,用过的人比较多,更有说服力。1、 基本功能、性能各家 RTOS 差异很小,可比性并不是很大2、 易用性/可读性这块 FreeRTOS 应该说是最差,奇葩的匈牙利命名法,代码实现用了很多宏,可读性非常差。ucos 可读性还可以,注释也很全。这块做的比较好的是 RT-Thread ,它是类 Linux 的代码风格,面向对象的设计模式,代码简洁易懂。在保证了体积(最小 ROM:3K RAM:1.5K)的同时,还借鉴了 Linux 的设备驱动框架、虚拟文件系统、Shell 等功能,设计更加优雅。3、 组件丰富性RT-Thread 比起传统 UCOS、FreeRTOS 不仅仅在基础功能上多而全,多达 50 个以上的可重用软件组件,还有很多物联网组件,对于物联网产品几乎做到开箱即用。RT-Thread 还可以运行 Python、JavaScript、Lua 这些高级语言的脚本,进一步降低开发难度。4、 开发资料这块 ucos 做的最好,还有配套相关的书籍,FreeRTOS 属于后起之秀,网上也有很多相关资料。RT-Thread 这块之前还是略显薄弱的,不过现在 RT-Thread 对这块非常重视,最直观的可以看到官网上的应用笔记越来越多了,还有一些配套教学视频。5、版权ucos 商业是要收费的,FreeRTOS 和 RT-Thread 版权都很宽松,特别是RT-Thread刚刚使用了Apache许可协议。6、 社区生态这三款 RTOS 的社区都比较活跃,现在可以感觉到 ucos 慢慢的用的人越来越少了,RT-Thread 和 FreeRTOS 用的人都在增多。RT-Thread 也是开发者最多的国产 RTOS,并且还拥有国内最大的嵌入式开源软件社区。深度剖析C语言的main函数哪些把人笑哭的奇葩注释MOS管怎么坏了?几种失效模式分析PCB板画废了,才知道阻抗设计这么重要!

    玩转嵌入式 操作系统

  • 干货,从底层深度理解CAN总线

    写在前面 CAN总线由于传输速率高、传输距离远,被广泛的应用于汽车电子、工控、通信等行业。所以,了解CAN总线非常重要。虽然,现在芯片集成度非常高,不需要从底层开始编程CAN部分,但是了解一下CAN的底层也是很有必要的,前面发过一篇关于CAN的文章:CAN总线很难吗?CAN总线看不懂是不可能的!(点击绿色文字可跳转)排版:FPGA之家1、简介CAN总线由德国BOSCH公司开发,最高速率可达到1Mbps。CAN的容错能力特别强,CAN控制器内建了强大的检错和处理机制。另外,不同于传统的网络(如USB或者以太网),CAN节点与节点之间不会传输大数据块,一帧CAN消息最多传输8字节用户数据,采用短数据包也可以使得系统获得更好的稳定性。CAN总线具有总线仲裁机制,可以组建多主系统。 2、CAN标准CAN是一个由国际化标准组织定义的串行通讯总线。最初是用于汽车工业,使用两根信号总线代替汽车内复杂的走线。CAN总线具有高抗干扰性、自诊断和数据侦错功能,这些特性使得CAN总线在各种工业场合广泛使用,包括楼宇自动化、医疗和制造业。CAN通讯协议ISO-11898:2003标准介绍网络上的设备间信息是如何传递的,以及符合开放系统互联参考模型(OSI)的哪些分层项。实际通讯是在连接设备的物理介质中进行,物理介质的特性由模型中的物理层定义。ISO11898体系结构定义七层,OSI模型中的最低两层作为数据链路层和物理层,见图2-1。图2-1:ISO 11898标准架构分层在图2-1中,应用程序层建立了上层应用特定协议,如CANopenTM协议的通讯链路。这个协议由全世界的用户和厂商组织、CiA维护,详情可访问CiA网站:can-cia.de。许多协议是专用的,比如工业自动化、柴油发动机或航空。另外的工业标准例子,是基于CAN的协议的,由KVASER和Rockwell自动化开发的DeviceNetTM。3、标准CAN和扩展CANCAN通讯协议是一个载波侦听、基于报文优先级碰撞检测和仲裁(CSMA/CD AMP)的多路访问协议。CSMA的意思是总线上的每一个节点在企图发送报文前,必须要监听总线,当总线处于空闲时,才可发送。CD AMP的意思是通过预定编程好的报文优先级逐位仲裁来解决碰撞,报文优先级位于每个报文的标识域。更高级别优先级标识的报文总是能获得总线访问权,即:标识符中最后保持逻辑高电平的会继续传输,因为它具有更高优先级。ISO-11898:2003标准,带有11位标识符,提供的最高信号速率从125Kbps到1Mbps。更迟一些的修订标准使用了扩展的29位标识符。标准11位标识符位域参见图3-1,提供2048个不同的报文标识符,扩展29位标识符位域参见图3-2,提供537百万个不同报文标识符。3.1 标准CAN标准CAN只有11位标识符,每帧的数据长度为51 (0~64)=(51~117)位。注:不计位填充(位填充将在本文第5节描述)。图3-1:标准CAN---11位标识符· SOF - 帧起始,显性(逻辑0)表示报文的开始,并用于同步总线上的节点。· 标识符 - 标准CAN具有11位标识符,用来确定报文的优先级。此域的数值越小,优先级越高。· RTR - 远程发送请求位,当需要从另一个节点请求信息时,此位为显性(逻辑0)。所有节点都能接收这个请求,但是帧标识符确定被指定的节点。响应数据帧同样被所有节点接收,可以被有兴趣的节点使用。· IDE - 标识符扩展位为显性时表示这是一个标准CAN格式,为隐形表示这是扩展CAN格式。· r0 - 保留位(可能将来标准修订会使用)· DLC - 4位数据长度代码表示传输数据的字节数目,一帧CAN最多传输8字节用户数据· 数据0~8 – 最多可以传输8字节用户数据· CRC - 16位(包括1位定界符)CRC校验码用来校验用户数据区之前的(包含数据区)传输数据段。· ACK - 2位,包含应答位和应答界定符。发送节点的报文帧中,ACK两位是隐性位,当接收器正确地接收到有效的报文,接收器会在应答位期间向发送节点发送一个显性位,表示应答。如果接收器发现这帧数据有错误,则不向发送节点发送ACK应答,发送节点会稍后重传这帧数据。· EOF – 7位帧结束标志位,全部为隐性位。如果这7位出现显性位,则会引起填充错误。· IFS – 7位帧间隔标志位,CAN控制器将接收到的帧正确的放入消息缓冲区是需要一定时间的,帧间隔可以提供这个时间。3.2 扩展CAN扩展CAN具有29位标识符,每帧数据长度为71 (0~64)=(71~135)位。注:不计位填充(位填充将在本文第5节描述)。图3-2:扩展CAN---29位标识符扩展CAN消息相对于标准CAN消息增加的内容如下:· SRR – 代替远程请求位,为隐性。所以当标准帧与扩展帧发送相互冲突并且扩展帧的基本标识符与标准帧的标识符相同时,标准帧优先级高于扩展帧。· IDE – 为隐性位表示标志位扩展帧,18位扩展标识符紧跟着IDE位。· r1 – 保留4、CAN消息4.1 仲裁典型CAN的基本原理见图4-1所示,从图中可以看出,总线逻辑状态与驱动器输入和接收器输出逻辑是相反的。正常情况下,逻辑高电平为1,逻辑低电平为0,但是CAN总线却是逻辑高电平为0,称为显性,逻辑低电平为1,称为隐性。所以,很多收发器的驱动器输入端都会内置上拉电阻,在没有任何输入时,CAN总线就会表现为隐性(逻辑低电平)。图4-1:反转的CAN总线逻辑在总线空闲时,最先开始发送报文的节点获得发送权。如果多个节点同时访问总线,CAN使用非破坏式、逐位仲裁的方式决定哪个节点使用总线:各发送节点从仲裁域(标识符和RTR域)的第1位开始进行仲裁,连续输出显性电平(0)最多的节点可以继续发送。因此,标识符数值越低的CAN报文,优先级越高。标识符数值为0的CAN报文,具有最高优先级,因为它输出的显性电平最多。4.2 消息类型CAN有四种不同的报文类型:数据帧、远程帧、错误帧和过载帧。5、位填充机制帧起始、仲裁域、控制域、数据域以及CRC校验和域,均通过位填充方法编码。位填充是指,无论何时,发送器只要检测到位流中有5个连续相同逻辑的位,便会自动在位流中插入一个补码位。举例来说,如果连续5个显性位,则在5个显性位之后自动插入1个隐性位。接收器会自动删除这个插入的填充位。数据帧或远程帧的剩余位域(CRC界定符、应答域和帧结尾域)形式固定,不填充。错误帧和过载帧也不填充。CAN网络同步需要足够多的上升沿,这是CAN协议规定位填充的目的之一。位填充的其它作用:确保数据帧不会被当作错误帧(由6个连续的显性或隐性位组成)、确保正确识别帧结束标志(7个连续隐性位)。6、错误检测和故障界定CAN总线具有很高的健壮性,这可能要归功于CAN具有多种错误检查机制。CAN协议制定了5种错误检测方法:三种位于报文层,两种位于位流层。如果一个数据帧出现错误,那么这个帧会被丢弃,并且接收节点还会发送一个错误帧。这会强制发送节点重复发送出错的报文,直到接收节点正确接收。如果同一个报文重复出错,达到一定次数后,发送节点可以关闭发送功能以降低对总线的影响。报文层的错误检测包括CRC和ACK。16位的CRC域包含15位校验和、1位界定符。ACK域包括1位应答位、1位界定符。CRC校验错误很好理解,它对数据域以及数据域之前的位生产CRC校验。由于一帧CAN报文数据流很小(最多8个用户数据),所以15位CRC的侦错能力非常优秀。那么,ACK域是怎么起作用的呢?这是由CAN协议规定的,即发送节点发送一帧数据后,接收节点必须向发送节点应答,如果发送节点没有收到接收节点的应答信号,就会认为自己发送失败,从而重传数据。报文层的第三种错误检查方法是格式检查。这种检查会监控报文中那些一定为隐性位的域,如果这些域中出现显性位,则检测到格式错误。这些域包括SOF、EOF、ACK的界定符和CRC的界定符。位流层的错误检测之一是发送到总线上的每一个数据位,都会被监视,如果发现发送的位和总线上的位不相同时,产生位错误。这种监视机制并不会监视仲裁域的位,这是因为多个节点同时竞争总线时,优先级高的节点可能会覆写总线上的仲裁域位。位流层的另外一个错误检测机制是位填充规则:5个连续相同逻辑位之后,如果第6个位的逻辑还和前五个相同,则产生位填充错误。7、网络拓扑CAN使用差分信号,需要一对信号线,推荐使用双绞线,网络拓扑如图7-1所示。使用差分信号可以抑制共模干扰、能够增加系统可靠性,允许使用更高的速率。高速ISO 11898标准规定了CAN传输最高速率为1Mbps,在这个速率下,传输距离最长40米(挂接30个节点,CAN信号不隔离)。推荐节点分支长度最大为0.3米、推荐使用带屏蔽或不带屏蔽的双绞线,线缆特性阻抗为120欧姆。 图7-1:CAN总线网络拓扑结构图8、终端匹配终端匹配电阻大小等于传输电缆特性阻抗,传输电缆特性阻抗由电缆供应商提供,一般近似为Z=√(L/C)。其中L为电缆单位长度感抗,C为电缆单位长度电容。由于CAN收发器结构,从隐性变成显性由晶体管驱动,所以都是很陡的,但是从显性回到隐性,却需要终端电阻来放电,否则就会由于导线分布电容,缓慢放电,导致位宽错误。所以所谓的近距离、低波特率CAN总线不加终端电阻的做法,都是错误的。RS485与CAN总线不同,由于RS485收发器中一般都内置失效保护电路,在近距离、低波特率下允许不加终端匹配电阻。9、电缆与接线CAN总线采用差分信号传输,如果使用带屏蔽双绞线,屏蔽层应单点接地。图9-11列出带单屏蔽层的CAN电缆剖析与连接线示范。 图9-1:电缆信号分配、接地和终端匹配通常情况下,电缆截面积越小,其分布电容、分布电感和直流电阻越大。当通讯距离较远时,电容、电感和直流电阻会引起信号衰减,波形失真和抖动。一般而言,电缆供应商会提供信号衰减图表。图9-2所示的曲线显示了24-AWG电缆衰减和频率的关系: 图9-2:信号衰减10、差分信号电压幅值如图10-1所示,两条信号线CAN_H和CAN_L静态时均为2.5V左右,此时状态表示逻辑1,称作隐性;CAN_H比CAN_L高表示逻辑0,称为显性,此时通常CAN_H电压3.5V、CAN_L电压1.5V。 图10-1:CAN电平幅值CAN标准规定,CAN总线上的差分电压>0.9V才能被识别成显性电平,0.9V才能被识别成显性电平,现在2号节点只有1V差分电压,其可靠性已经变的较低。为了保证可靠的数据通讯,一个有用的经验法则是:最末端节点差分电压幅值不小于1.2V。需要注意的是,图中故意忽略了分布电容和分布电感的影响,因此传输的波形没有畸变。 图11-1:传输电缆直流电阻分压示意图对于双绞线,假设其终端匹配电阻与电缆特性阻抗相同,则截面积与最大通讯距离可参考表11-1:表11-1:截面积与最大通讯距离关系为了把电缆直流电阻引起的电压衰减降到最小,较大的终端电阻值(150~300欧姆)有助于增加总线长度。比如,使用截面积为1.5 mm2的双绞线电缆,电缆特性阻抗为120欧姆。传输波特率为5kpbs的数据时,使用120欧姆的匹配电阻最远可以传输5km,但使用300欧姆的匹配电阻则可以传输7km!12、波特率、终端匹配电阻与通讯距离上文第11节讲述了传输线截面积与通讯距离的关系,本小节将保持传输线截面积不变,查看其它参数对通讯距离的影响。以截面积为1.5 mm2屏蔽双绞线为例,其波特率、终端匹配电阻与通讯距离的关系如图12-1所示。其中,当波特率较高,通讯距离有限。比如1Mbps,信号隔离后的CAN通讯距离大约为25~30米(大部分的实际项目中都会对CAN通讯模块电气隔离,隔离器件会降低通讯距离)。波特率较低并且将终端匹配电阻增大,可远距离通讯。比如5kbps、终端匹配电阻为390欧姆时,通讯距离可达10km! 图12-1:波特率、终端匹配电阻和通讯距离关系图13、信号延迟与通讯距离高波特率情况下,制约CAN通讯距离的,是信号延迟。信号经过隔离光耦、传输电缆、ESD器件时,都会引起信号延迟。如果CAN的重同步也不足以弥补这个延迟,就会导致采样错误,最终CRC校验错误。图12-1给出了截面积为1.5mm2传输电缆,在不同波特率和终端匹配电阻下的最大通讯距离。其中当波特率为1Mbps时,通讯距离大约为30米。30米的通讯电缆,其传输损耗可以忽略不计,此时影响通讯距离的主要是信号延迟。通常,传输电缆延时为5ns/m、高速光耦延时可达25ns、磁耦合隔离器件延迟3~5ns。在CAN通讯系统中,一个优良的延迟标准是:其中,tl_MAX为最大延迟时间,tBIT为位时间。以1Mbps为例,其位时间为1us,则tl_MAX < 0.245 × tBIT = 0.245 × 1us = 245ns。信号在1.5mm2传输电缆上传输49米就能达到这个延迟时间。另外,再加上信号上升/下降沿时间以及隔离器件、ESD器件、PCB走线延时,实际项目中,1Mbps波特率在1.5mm2传输电缆上只能传输30米。这也是为什么RS485波特率可以达到10Mbps甚至50Mbps,而CAN标准最大速率只有1Mbps的原因。表13-1给出了判定延迟的参考标准,在实际项目中,推荐信号延迟处于良好一栏标准。表13-1:最大延迟参考标准14、节点最小间距CAN总线是分布式参数电路,其电气特性和响应主要由沿物理介质分布的电感和电容所决定。这里物理介质包括连接电缆、连接器、终端和沿总线挂接的CAN设备。空载情况下,传输电缆的特性阻抗近似为Z=√(L/C),其中L为电缆单位长度感抗,C为电缆单位长度电容。随着负载的增加,传输线上的电容增加(负载电容、负载与总线连接线电容),传输电缆特性阻抗相比空载情况下变小。如果负载比较集中,则负载区传输电缆特性阻抗和空闲区电缆特性阻抗相差较大,从而会引起阻抗不匹配。如图14-1所示。 图14-1:负载不均衡的CAN总线原理示意图CAN总线阻抗不匹配会产生信号反射,雪上加霜的是CAN的仲裁机制:在仲裁期间,两个或更多个节点可能同时发送多个显性位。如图14-1所示,当开关S1在t=0时刻从显性状态切换到隐性状态,CAN驱动器差分输出电压为Vs,总线上的差分信号会由显性状态(Vs)变成稳定的隐性状态(0V)。这个信号波形会沿着总线向下传播,到达总线的负载区时,阻抗不匹配引起的反射电压将返回到源端。负载与负载之间的最小安全距离d是设备集总负载电容CL和电缆的单位长度分布电容C的函数,定义如下:设备集总负载电容CL包括CAN收发器引脚、连接器、隔离器件、保护器件、印制电路板走线以及其它物理连线的电容总和。3.3V的CAN收发器一般能达到16pF电容,具体可以参考收发器数据手册;印制板走线一般0.5pF~0.8pF/cm,这取决于电路板的材质和结构;连接器和保护装置(比如ESD器件)的电容值可能范围会很大,具体要参考设备数据手册;非屏蔽双绞线介质的分布电容大约在40pF/m~70pF/m。图14-2给出了更明了的图表显示: 图14-2:最小CAN设备间距15、信号位采样点位置信号位采样点是指CAN节点识别一个电平逻辑的位置。CAN标准把总线上的每一位都细分为不同的阶段,如图15-1所示。在图中可以看到,每个位被分为同步段、传播段、相位缓冲段1和相位缓冲段2四个连续部分。其中,采样点位于相位缓冲段1之后,同步段、传播段、相位缓冲段1和相位缓冲段2的持续时间都是可以编程的,因此采样点位置也是间接可编程的。 图15-1:每一个数据位的分段示意图一般CAN节点是每个位采样一次(也可以采样3次,多用于低速场合),采样点位置都在一个位的50%以后的区域,这是为了让信号电平趋于稳定。采样点越靠后,波形越稳定。但也不是越靠后越好,采样点位置超过95%时,因为传输过程中的位偏差,可能会引起错误。CIA推荐采样点为一个位时间的87.5%处,在实际项目中,一般设置为70%~90%,大部分汽车厂商规定采样点为70~80%。采样点略靠后,比如80~90%,有利于远距离传输。提高节点波特率寄存器中的同步跳转宽度SJW值(加大到3个单位时间),可以加大位宽度和采样点的容忍度。16、波特率偏差由于受到晶振影响,CAN通讯波特率实际值与理论值会有偏差。如果两个节点之间波特率偏差较大,容易造成误码率增大或通讯失败等问题。CAN标准规定,设定的理论波特率与实际波特率偏差不得超过±1%;节点需要容忍的波特率偏差不得小于±3%。17、节点容抗在CAN通讯电路设计过程中,节点容抗是容易被忽略的。节点容抗包括收发器引脚电容、PCB走线电容、ESD器件电容以及其它连线电容。CAN标准对节点容抗有严格定义,容抗影响上升沿下降沿斜率,节点容抗增大,上升沿和下降沿会变缓,导致位时间畸变,误码率增加。上升沿和下降沿变缓会使得信号延迟变大,在高波特率下,影响信号传输质量和通讯距离。节点容抗不易测量,需要专门仪器。在电路设计时,要对结合数据手册中给出的典型值,对CAN接口电路使用的器件总电容值进行估算。对于高波特率情况下,单节点电容推荐

    玩转嵌入式 CAN总线

  • 电源上的“O”和“|”到底代表什么意思

    几乎所有的电器、灯具和插座上只要带有电源开关必然会出现“|”和“O”两个符号如果只看符号判断“|”和“O”到底代表什么含义呢?你能分清哪个是电路联通哪个是电路断开吗?很多人认为“O”是通电,“|”是断电因为英语里开是OPEN很多开关也用ON代表“开”进阶版的认为“|”和“O”这两个符号是英文的“I/O”两个字母是 input/output的缩写翻译过来就是输入和输出所以,当然“|”是通电,“O”是断电了上面的观点看似都很有道理但都不是正确的解释在二战时期,为了保障电气设备稳定运行,工程师们需要编制一套通用的电气设备标准统一海陆空军和民防、后勤等各个领域的电气化设备开关及旋转切换开关的制式。特别是开关的标识,要保证只需短短几分钟的培训,让不同国家的士兵和维修工人都能识别并正确使用。有工程师想到了一个简单的解决办法那就是国际通用的二进制代码二进制中的「1」代表「开启」「0」代表「关闭」于是,有了开关上的“|”和“O”后来国际电器工程委员会(IEC)在1973年编制的技术规范中正式提议将“|”和“O”作为一个电源开闭循环的标识我国的国家标准GB 15092也明确了圆圈“O”代表电路断开(就是“关灯”)直条“|”代表电路闭合(就是“开灯”)运算放大器是线性器件吗?科普文:霍尔电流传感器的测量原理是什么别再烧管子了,线圈两端并一个二极管吧小小蜂鸣器,驱动电路大有学问

    玩转嵌入式 电源

  • 平均年薪60.8万!人才缺口达30万!工程师拿下这个证书有多香?!

    对程序员来说,学历重要还是技术重要?IT圈曾无数次讨论过这个问题。有人说,只要写得出代码,管你大专还是硕士,都是好程序员。反对的人讲,如今学计算机的人数众多,早就不是上个培训班就能找到工作的年代了。那么,IT界的学历到底值不值钱?的确,互联网野蛮生长时代,对求职者的学历背景宽容度极高。然而,如今的技术岗竞争早已非比寻常,不仅科班人才铆足劲进大厂,众多理工科学子也都在努力转码。此番情况下,学历和专业背景,已经成为企业的重要考量因素。HR筛选简历时,总是青睐背景好的人才,因为这类人往往有着更扎实的代码能力和更高的面试通过率。打开招聘网站,搜索处于程序员鄙视链顶端的“算法工程师”职位,多数岗位也明确要求硕士学历及以上。 不少从业者也表示,往往以研究生学历就业的人,能拥有更高的年薪和更广阔的发展空间。看来,虽然学历并不完全等同能力,但在高学历人才遍布的就业市场,没有学历,着实是寸步难行!因此,为了帮大家同时提升学历和能力,2021年,我们推出了一个两全其美的选择——计算机硕士!不管是工作党还是大学生,计算机硕士都能满足你的需求!对工作党来说,可以攻读非全计算机硕士,不论是为了转码程序员还是提升学历、系统学习先进技术,这都是性价比最高的选择。对大学生来说,可以在全日制和非全中二选一,一来拥有高学历光环、二来获得科班背景、三来可以专业化学习。现在就参加「计算机硕士」上岸训练营,领取硕士备考资料,为你的大厂之路打下坚实基础!开课吧「计算机硕士」上岸训练营粉丝优惠价仅需 1  元前100个名额,赠送备考资料立即扫码、抢先一步高学历时代,计算机硕士一旦拿到手,好处不是一点半点!一、面试敲门砖无论是应届生还是在职人员,学历永远会是简历中被关注的重点。HR每天筛选的简历过千个,如果不是985、211等院校毕业,很难进入HR的法眼。而一个研究生学历的求职者,必定将从众多本科竞争者中脱颖而出,受到青睐。二、专业技能提升对程序员而言,项目经验和基础知识的巩固同等重要,而读研不仅有理论知识的学习,更有众多代码项目的实践,完美的契合了程序员技术能力提升的需求。有老师指导学习前沿技术,有同学切磋交流,还有各种实践项目和编程大赛,代码能力的提升是必然结果。三、行业人脉积累计算机读研就好似一个优秀人才筛选机器,把一群对学历、技术能力和未来发展前景有更高追求的人聚在一起。结识优秀的人,无论是在求职大厂时寻求内推,还是利用人脉积累跳槽也是大有助益。而开课吧不仅能带你结识一群志同道合的人才,同时还有一批资深的技术专家全程辅导你的专业课学习!胡光前百度高级研发工程师宿叶露前浪潮信息系统架构师无论你是想提升技术能力和学历背景的工作党,还是有转行意向的非技术人员,或是毕业后想入职大厂技术岗的在校大学生,这里均有满足你需求的计算机硕士项目。现在报名课程,不到一瓶水的价格,就能享受到以下六大服务报名课程,将享受六大服务伴随式编程环境,让你边学边练,每一句代码都有实时反馈名校讲师精心打造课程,科学合理,更具针对性自主研发的择校系统,AI大数据分析助你精准择校1V1带背/带练,教育科学技巧帮你真正理解记忆开放课内所有代码,作业、练习、基础必备代码合集讲师、助教、班班全程三位一体跟踪服务,答疑解惑即刻扫码报名,解锁全部课程福利开课吧「计算机硕士」上岸训练营粉丝优惠价仅需 1  元前100个名额,赠送备考资料立即扫码、抢先一步// 温馨提示报名流程:成功报名→ 根据页面提示添加老师 → 领取课程 → 直播上课购课成功后,请大家务必根据页面提示,添加老师后才能领取课程和资料哦!本直播课程为滚班制,每期课程服务期至少10天

    玩转嵌入式 工程师

  • 电感配置以及特性分析

    关键要点:・电感要尽量配置在IC附近。・铜箔面积不可过大。・电感的正下方不可配置GND层。也要极力避免配置信号线。・电感引脚的布线不要太近。电感首先来稍微回顾一下布局相关的电感特性。当电流流过电感时会产生磁力线。当这种磁力线穿过导体(PCB的导体为铜箔)时,在这部分会产生电涡流。也就是说,如果电感的附近有导体,则可能因电涡流而引发问题。由于电涡流是在抵消磁力线的方向流动,因此会使电感值减小、Q值下降(损耗增加)。顺便提一下,Q是表示电感损耗量的参数之一,“Q值大=损耗小”。另外,如果电感附近的铜箔是信号线,则电涡流可能致使噪声传播到信号,可能对电路工作有不利影响。还有一点,电感属于发热部件。众所周知,当电感有电流流过时,会因卷线的电阻成分和其他损耗而发热。随着电感的温度升高,除元件劣化之外,铁氧体铁芯的情况下,如果超过居里温度,电感值会急剧下降。一般会提供额定电流值和电阻值规格作为参考标准,但在实际安装时需要考虑散热。电感的配置为了将来自开关节点的辐射噪声控制在最低,虽然重要程度仅次于输入电容器,请将电感尽量配置在IC附近。如果为了降低布线电阻散热而过度扩大铜箔面积的话,铜箔可能起到天线的作用,使EMI增加,因此不可过度增加铜箔面积。从EMI的角度出发考虑布线面积的布局示例见Figure6-a,配置了不必要布线的不良示例见Figure6-b。具体的布线宽度可参考电流耐受特性来决定。Figure 5为流过某电流时的导体宽度和自发热导致的温升图表。例如,当2A的电流流过导体厚度35µm的布线时,为抑制20℃的温度上升,0.53mm的导体宽度即可对应。但是,由于布线受外围元器件发热和环境温度的影响,因此,需要具备充分的余量。例如,建议1盎司(1OZ)(35µm)PCB板中每1A导体宽度1mm以上、2盎司(70µm)PCB板中每1A导体宽度0.7mm以上。关于电感外围布线,不可在电感的正下方配置GND层(Figure 6-c)。这正如前面提到的,磁力线穿过导体GND层并产生电涡流,从而受磁力线消除的影响,使电感值下降或Q值下降(损耗增加)。非GND的信号线也有因电涡流使开关噪声传递给信号的可能性,因此应避免电感正下方的布线。不得不布信号线时,请使用漏磁较少的闭磁路电感。但是,必须实际测试并确认是否有问题。另外,还需要注意电感引脚布线间的空间。如Figure 6-d所示,当引脚间的距离近时,开关节点的高频信号经由杂散电容,电容量被诱导至输出。虽然并不仅限于电感,但部件的配置和布线设计常常会成为制约因素。因此,认真将应该注意的要点体现在布局设计中是非常重要的。在结果不理想的情况下,必须进行实测并确认有无问题。END版权归原作者所有,如有侵权,请联系删除。▍

    嵌入式ARM 电感

  • 国产GD32替代:RT-Thread在CotexM23上的起起伏伏

    在如今芯片沉浮的大环境下,中国“芯”一直在暗暗发力,经过卡脖子、等封装、没晶圆的窘境,下一步将会是什么情况不得而知。项目需求下,如果只有PLAN A,风险等级就会被判定为为高。有PLAN B,风险等级也只是“海中一滴水”。如此,PLAN C、PLAN D成了公司立项的常态的趋势,甚至有些朋友将PLAN做到了“N”。此情此景,人人都在暗自“搞备胎”,可想而知,这是到底有多慌。所以有一句话,芯不在手,慌上心头,只有捧在手里才是真“芯”扯了这么多,似乎都是闲话,与本次的内容背道而驰,不过不用着急,好东西不怕晚,下面请出本次的主角:GD32E230C8T6芯片,搭载在GD32E230C-EVAL 开发板上,我们将其称之为DEMO板,按照国际惯例,首先是图片展示:1、GD32E230系列芯片简介ARM架构毋庸置疑,但是核属于CotexM23,MCU世界里面ARM家族的比较通用的是CotexM0,CotexM3,CotexM4等。这CotexM23属于什么东西,很是奇怪,查了一下,属于ARMV8新的体系,百度一下ARMV8与ARMV7的区别,核心的区别是ARMV8为了满足64位的机器,所以进行了更新发展。不过2011年就放出来了,话说也是快10年了,这许多年的发展,可怜我孤陋寡闻,尽然全然不知道这个东西,看来知识体系还是需要不断更新。DataSheet的资源配置,全局呈现如下图所示:纵观资源还是挺丰富,再看看配套DEMO板的裸机SDK,也是该有的都有GPIO、UART、ADC、IIC、SPI、I2S、IR、Timer等等2、RT-Thread不过不过,这些都是裸机的,正如标题,本文重点想说的是RT-Thread在CotexM23上的起起伏伏,CotexM23已经具备,只是RT-Thread还没登场,下面说说RT-Thread,当然百度一搜那也是一堆,RT-Thread优秀自然不用说,但是我的出发点是比较简单,因为他是国产的RTOS(实时操作系统),国产系统配国产“芯”那也算的是真正意义上的中国“芯”,值得鼓励,值得拥有。以下是RT-Thread自言自语,摘抄自RT-Thread官网:RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 官方于2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。3、RTThread起起伏伏NANO版本裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源,还是比较惊艳,相较与其他的RTOS还是很酷的,FreeRTOS就达不到如此小巧简洁,大道至简,适用的场景就会更加丰富,一路通吃。本次就用NANO版本试验喽。3.1 RTThread试验移植官方的移植教程,清晰明了。优秀的团队出来的也是优秀的作品。以下是官方权威链接。https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil3.2 RTThread起起伏伏3.2.1起起伏伏第一幕起伏现象:原因分析:rt_show_version()正常显示,突然就直接报错,挣扎许久,仔细分析了一番,RTThread超前初始化完成之后,便开始了主函数(main)线程的运行,因此可能是main线程出问题,是不是main线程的栈太小了,查看main线程栈大小,一看是256Bytes,上面的一行Default:512。解决方案:将main线程栈改为512编译、烧录、验证果然不错了,果然是内有乾坤呀。至此起起伏伏第一幕完成。3.2.2 起起伏伏第二幕起伏现象:承上启下,层层递进,RTThead控制台能正常运行,Finsh没有,no fish,无鱼(语)。为什么就没有Finsh组件,观工程,Finsh组件加载了,char rt_hw_console_getchar(void)函数也有了,神马情况,还有坑???? 百度分析一番,还是没有结果,百度如是说:难道真的是这个原因(搞不清到底是个啥),添加上,试验一下,结果还是唏嘘不已,看来也不全然是这个问题,那就只能再静静思考一下。原因分析:根据现象看本质,首先看看MSH的配置,栈的大小1024比较大了,应该是没问题的,那难道是线程优先级的问题,优先级21,这是个什么等级,估计都被遗忘了,抢都抢不到执行的权利吧,可怜呀。解决方案:试验一下,提升一下地位,修改一下等级,加入抢占的行列梯队,于是修改了优先级保存、编译、烧录,哎呦MSH出来了,看来真是这个坑呀!至此起起伏伏第二幕完成。2.3 起起伏伏番外没有伏,只有起,help一下,蹦出不少东西,至此为RT-Thread在CotexM23上的起起伏伏暂告一段落。此文如有不恰当出处,敬请谅解,路漫漫其修远兮,中国“芯”路历程,我们一起见证起起伏伏,最后附上工程代码。 GD32E23x_Demo_RTT.rar (1.28 MB, 点击“阅读原文”内下载文件)END本文系21ic论坛资深网友yanzhengxin1原创撰写▍

    嵌入式ARM RT-Thread

  • 拓展 | Rust语言在嵌入式领域的应用

    关注、星标公众号,直达精彩内容来源:IT创客学院今天看到一篇关于Rust语言的文章,分享给大家,可以扩展下视野。开卷有益,恭喜你又进步了一点点。Rust语言是二十一世纪的语言新星。Rust被人广泛承认的一点,就是因为它能运行在多样的目标上,从桌面和服务器设备,到资源有限的嵌入式设备。我们可以用适合来评价一门语言和技术。Rust非常适合开发嵌入式应用,它是一种和C相仿的、能应用于嵌入式设备开发的编程语言。操作系统都是从裸机设备开始运行的,Rust语言的这一点也意味着,它能很好地用于编写操作系统。无论是应用层还是内核本身,Rust都是极富竞争力、值得投入时间的技术选项。二十一世纪的裸机编程语言在这个互联网全面普及、性价比设备应用更广的时代,安全和可靠性成为一门语言必须考虑的因素。Rust语言采用移动语义,拥有严格的代数类型系统以及生命周期、所有权模型;相比传统的编程语言,这些模型能在合适的时候释放所用资源,减少漏洞的出现。此外,通过语义检查,Rust能在编译期有效寻找内存和线程安全问题,降低开发和测试的负担。Rust语言是的运行效率高、开发效率好、适用范围广。作为一门编译型语言,它直接编译输出到汇编代码,通常公认裸机的Rust语言性能在C语言级别,拥有较高的运行效率。Rust语言的开发效率很高,文档完善、编译器提示有帮助,能节省软件开发所需的时间。它能应用在多个平台和指令集中,这包括裸机平台;处理核、操作系统厂家还可以提供自己的编译目标,无需厂家自己重新开发、提供工具链。Rust语言出彩的地方在于,它向嵌入式平台引入了大量新的编程技术。这包括了闭包、过程宏等传统上用于函数式编程的技术,和多态、虚函数表等面向对象语言的技术。新编程技术的引入,扩充了开发者的选择。即使彻底理解Rust的编程概念有一定难度,但这些易用的新技术,让开发者只需阅读实例代码,便可快速进入开发状态。这些新技术的引入,是嵌入式平台从未有过的,Rust能提高开发者的工作效率,降低平台间迁移的学习时间和成本。裸机上的过程宏传统用于嵌入式平台的编程,我们加快开发速度使用的宏,常常基于语法字符串的替换和修改。Rust语言扩充了宏的概念,提出了基于语法树的“过程宏”编程方法,让宏语法更容易使用、编写更方便。“过程宏”是接收Rust代码作为输入,操作这些代码,然后产生另一些代码的过程。它和字符串的替换不同,是从语法树到语法树的替换。开发一个过程宏,可以使用简单的定义过程,或者有工作量的属性宏定义过程。简单的定义中,我们编写代码,给出宏的输入有哪些,要翻译到哪些输出代码,这样就完成了一个宏的定义。属性宏定义则允许完成语法树分析、代码生成甚至代码优化的过程,就需要编写专门的“属性宏库”,借用Rust编译器的一部分,完成宏代码的转化和输出。过程宏是基于语法树的分析过程,借助“树”的结构我们能理解它的一些特点。因为Rust语法树的子树也是Rust代码,所以宏的定义内也可以完成语法分析,这就为代码编辑器的提示和补全提供了便利。一个语法项目不可能同时属于两颗不是亲子关系的子树,因为如果属于两颗子树,将和语法树的树根产生环,就和语法树的定义相违背,所以语法项目都是独立的,宏内代码的解析不会影响外界代码的解析。这样的独立性也就是“卫生宏”思想的提出,Rust的过程宏可以理解为代码的“内部展开”,不影响代码的上下文。正因为Rust过程宏产生完整的语法子树,它的定义不需要额外的界符,因此只需要满足Rust语法就可以了。在过程宏的定义之外,Rust语言提供了大量便于嵌入式开发的标签。“align”标签定义内存对齐的方式,“link_section”标签给定代码要链接到的段或区。这样,过程宏可以包装各种各样的标签,Rust语言的用户可以方便地使用,而不需要深入宏了解代码的具体要求。Rust语言定义的过程宏可以导出到包外,给其它的库使用,这有利于嵌入式Rust生态的搭建和共享。Rust语言宏灵活的特性,让宏在更多的领域有可用之处,更好地服务嵌入式平台的开发工作。嵌入式中的模块化编程Rust语言拥有很好的模块化编程概念。传统平台的Rust语言中,社区总结出了“模块-包-项目”的模型。这个模型也适用于嵌入式平台,增加协作开发的效率,更好地共享生态。Rust的模块化编程分为模块、包、项目三级。模块是Rust语言可见性分划的最小单位,语言中提供了专门的关键字,来区分不同模块的代码和可见性,是由Rust语言本身确定的。在Rust语法中,“mod”是定义模块的关键字,“pub”是定义可见性的关键字。包是Rust项目的二进制目标,这个等级是由Rust工具链给定的。每个包有版本号、作者和许可协议等元数据,要依赖和使用的库也要登记到包中,以便共同编译。库的特性有点像传统语言的条件编译,也是以包为单位规定的,每个包使用的库可以开启不同的特性,但库在同一个包中开启的特性是相同的。“项目”这一层并非由Rust语言给定;人们开发软件时,发现一个解决方案中包含多个二进制目标是非常好的,总结之后就出现了项目的抽象模型。项目由核心和外围包组成,或者是功能相近的一组包,它通常由同一个团队组织和维护,可以在项目上添加扩展。项目在习惯上由核心包到功能包,以依赖的形式构成。实践中,“项目”可以放在同一个工作空间里,以统一管理和发布编译版本。Rust将模块化编程引入到嵌入式开发中,也可以方便地编写测试和性能检测代码。模块化编程能提高Rust嵌入式开发者的工作效率,适应现代化嵌入式软件的需求。搭建Rust嵌入式生态生态是软件工业不可或缺的一部分。从编译器到软件支持,嵌入式Rust目前已经拥有良好的基础生态。此外,操作系统内核也是嵌入式编程的重要部分,嵌入式Rust和内核开发也有较好的相容度。Rust语言的嵌入式生态你的架构和指令集嵌入式Rust的应用支持分为两个部分:一个是目标处理核的支持,一个是芯片外设的支持。针对目标处理核,首先我们要编译Rust到这个指令集架构。Rust语言提供丰富的编译目标,主流的编译目标都有很好的支持;此外,如果有自主研发的指令集架构,可以为Rust添加自己的编译目标。编译完成后,还需要编写微架构支持库和微架构运行时。微架构运行时提供最小的启动代码实现,能搭建一个适合Rust代码运行的环境。微架构支持库简单包装汇编代码,允许应用代码操作寄存器、运行特殊的指令,作为编译器系统的补充。这之后,Rust对这个指令集架构的代码运行支持就完成了。嵌入式应用定义了各有特点的中断控制器,有些是指令集架构定义的,有些是芯片设计厂家自己定义的。嵌入式Rust要支持这些中断控制器,需要在微架构运行时中添加处理和封装部分,或者作为通用架构的补充,在专用架构的支持库中添加专有架构的中断运行时。架构虽然定义了标准,但基地址、中断数量等配置可能相互不同。这些元数据配置可以放在外设访问库的中断部分,和架构支持库共同构成中断控制器的支持。目标的处理核定义了调试接口和闪存烧写算法,我们需要在调试器软件中编写这些算法。社区通用的软件“probe-rs”是很好的调试器实现,可以替代OpenOCD,作为非常好的Rust语言调试软件。如果自己的操作系统有软件调试接口,可以添加操作系统调试器的载荷,共同完成调试软件的部分。只要处理器厂商实现了调试接口,提供相关的文档,配套的Rust软件可以尽快完成,方便各种技术的开发者调试和使用。嵌入式生态的标准起初嵌入式开发者会为每个芯片都编写一次代码。随着生态的发展,大家认识到,需要提供一个基本的抽象,大家都围绕着抽象去编写,就能省下为大量外设反复编码的时间。embedded-hal就是这样的标准,它是Rust语言的嵌入式外设抽象,支持大量的片内和片外外设,包括传感器等,很好地扩充了嵌入式的生态。embedded-hal是统一的Rust语言标准,它是针对外设功能本身的抽象,是抽象的集合,具体实现由实现库去完成。它的扩展性很好,比如“SPI-GPIO扩展器”外设输入SPI接口抽象,输出GPIO的抽象,很多模块都是抽象到抽象的过程,就可以方便的极联、衔接和嵌套,整合更多的项目;这就非常容易为新的芯片编写支持库。市场上海量的芯片都支持embedded-hal标准。K210、GD32V和BL602系列的芯片都提供很好的embedded-hal实现库。要编写embedded-hal标准的支持库,只需要机器生成外设库,然后编写中间层库,就能完成对此标准的原厂支持。Rust与操作系统内核操作系统也是嵌入式应用。常见的操作系统如按是否包含虚拟内存区分,有不含虚拟内存的实时系统,和包含虚拟内存传统操作系统。基于微架构的支持库和运行时库,操作系统内核可以很方便地编写。社区中提供了大量成熟的操作系统运行时。如rCore系列操作系统是第一个基于RISC-V架构的完整Rust操作系统,尤其适合教学使用。RTIC框架是中断驱动的异步实时系统,完全针对应用使用Rust的宏语法生成,拥有极高的效率。Tock系统是针对微处理器的安全实时系统,已经用于手表、智能路标和加密狗等产品。针对操作系统和应用程序开发,Rust是适合编写硬件驱动的语言。如果使用有产权的代码,可以以混合链接的形式,与Rust代码联合编译为二进制使用。系统模块、插件和动态链接库等等都能受益于Rust语言内存安全的特性,适合现在对安全敏感的开发需求。物联网系统要求嵌入式的操作系统能够连上网络。Rust嵌入式社区也在探索射频连接的技术标准,包括蓝牙、WiFi等硬件标准。smoltcp是社区提供的非常好的TCP协议栈实现,它可以代替lwip,在嵌入式系统领域高效、安全地完成网络传输。搭配缓冲区和协议库,物联网操作系统就可以连上网了。RustSBI:新型操作系统引导软件我们在开发操作系统内核时,有的内核直接运行在裸机上,有的还依托于一个运行环境。在RISC-V上,“SBI”就是这样的运行环境。它除了引导启动内核,还将常驻后台,提供操作系统需要的实用功能。RISC-V标准中,“SBI”意味着“操作系统二进制接口”,运行在其上的操作系统会通过环境调用“ecall”指令,陷入到二进制接口的实现中,由其调用具体硬件的实现功能。这种实现被称作“SBI实现”,社区常用的实现有开源的OpenSBI。RustSBI是鹏城实验室“rCore代码之夏-2020”活动提出的SBI实现,它是全新的操作系统引导软件。实现与模块组成RustSBI由几个功能模块组成。硬件环境接口实现了RISC-V SBI v0.2版本的接口,能运行支持此版本的操作系统。硬件运行时则是SBI实现运行在裸机环境的必要模块,它将由硬件启动,开始运行所有的RustSBI模块。SBI的初始化完成后,将进入引导启动模块,这里将发挥SBI标准“引导启动”的功能,最终启动操作系统内核。另外,兼容性模块能完成硬件到硬件间的支持,能模拟旧版硬件不存在的指令、寄存器,进一步延长操作系统的生命周期。去年12月,RustSBI的0.1版本在深圳的Rust中国社区2020年年会上发布。使用目前最新的0.1.1版本,RustSBI已经支持大量SBI标准提出的功能,支持大量自定义的扩展功能;完全使用安全的Rust语言编写,提高开发效率。开发Rust语言的操作系统内核,可以统一编译工具链。另外,RustSBI已经被RISC-V组织收录入RISC-V SBI标准,它的实现编号为4。RustSBI是一个库,它以库的形式设计的初衷是,便于平台开发者“积木”式地引入库的模块,为自己的硬件目标开发SBI支持。虽然RustSBI提供了QEMU、K210平台的参考实现,但应用开发者不应当将自己的目标也加入参考实现中,而是在自己的仓库里引用RustSBI的模块,可以选择参考这些实现的内容,最终完成完全可控的开发过程。这两个平台的使用范围较广,参考实现也会长期维护,以发现RustSBI本身可能的少量问题,并及时修补完善。为什么用Rust开发RustSBI呢?我们认为,相比使用C语言,嵌入式Rust的生态圈在协调发展阶段,它容易支持新硬件,Rust语言较强的编译约束也提高了硬件代码的安全性。硬件到硬件的兼容性RISC-V是快速更迭的指令集规范。我们为新版RISC-V硬件编写软件,会遇到与旧版硬件不兼容的情况。硬件和硬件之间的兼容性,也能通过软件完成——这是RustSBI提供的功能与亮点之一。RustSBI实现的硬件兼容性,是靠捕获指令异常完成的。例如,K210平台实现的是1.9.1版本的RISC-V特权级标准,它规定了旧版的页表刷新指令;而目前最新的1.11版标准,规定的是新版的刷新指令。为新标准编写的操作系统内核,使用新版刷新指令,会因为K210硬件无法找到新版指令,抛出非法指令异常。这个非法指令异常被RustSBI捕获,它解析后,发现是新版的页表刷新指令,便直接在硬件上运行旧版的指令,完成指令的页表刷新功能。这种硬件兼容性,目前能支持新增的指令和寄存器。一切情况下,指令、寄存器在仍然存在,但新版中修改了它们的功能和意义。只靠RustSBI软件本身,就不足以提供兼容性支持了。如果RISC-V芯片实现提供特定的兼容性外设,比如这个外设能拦截特定CSR寄存器的访问指令,就可以在功能修改的寄存器访问时,产生一个可供软件捕获的中断。这样的外设设计之后,使用RustSBI软件,将能支持功能修改的指令和寄存器,将进一步提升操作系统内核的硬件兼容性。兼容旧硬件,也是兼容未来新硬件的过程。未来的RISC-V标准快速发展,将与目前的硬件标准产生一定的差异;在硬件不变的前提下,未来软件能对当前的硬件兼容,就能延长软件的生命周期。或许,我们未来升级RISC-V上的操作系统,只需要更换硬件中的RustSBI固件,就能完美兼容最新标准的操作系统了。升级原有系统的硬件也非常容易,替换RustSBI固件就能达到升级效果。另外,硬件兼容性也意味着实现硬件上缺少的指令集。当这些指令集运行时,就会陷入到软件中,由RustSBI软件模拟这些指令,最终返回,这个过程应用软件不会有感知。当然,这种软件模拟过程可以满足正确性,效率不如新版的硬件,但临时运行一个新版的软件、体验新版的指令集还是足够的。当模拟指令的过程多到影响性能时,也就是硬件该升级的时候了。RustSBI与嵌入式Rust生态在RustSBI的实现中,多次使用“embedded-hal”的实现完成编写过程。“embedded-hal”是Rust嵌入式的外设规范,它对大量厂家的外设提供了软件支持。只要厂家的硬件支持“embedded-hal”,只需要编写部分抽象接口代码,RustSBI支持就可以快速地开发完成。硬件处理核和SoC系统的开发也受益于设计好的RustSBI软件架构。“RustSBI很快速地实现了仿真环境的双核测试,”华中科技大学的社区贡献者车春池说,“这能为处理核提供丰富的测试环境,在开发高性能RISC-V处理核中非常重要。”无论硬件和软件,我们都乐于看到各个应用领域积极互动,嵌入式Rust生态的发展过程得到加快。“embedded-hal”本是裸机外设的标准,RustSBI将这个标准运用在引导软件上,能加速裸机外设的开发和建设,也能更快适配SBI标准到平台上。借这个项目,我们很高兴能参与嵌入式领域Rust语言的建设,希望这些微小的技术更新和迭代,最终能回馈到未来物联网行业更轻便、更安全的开发体验中去。免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。欢迎关注我的视频号:点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    技术让梦想更伟大 嵌入式

  • 精选汇总 | freertos从基础到高级篇系列

    关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥本文已获取「CSDN」作者独家授权,请勿二次转载,请获取作者授权。声明:本公众号授权转载本文仅传播相关知识,无任何盈利和商业行为,部分内容有删改。 原文地址:https://blog.csdn.net/zhzht19861011/category_9265276.htmlhttps://blog.csdn.net/zhzht19861011/category_9265965.html 作者:zhzht19861011    为了大家更加方便的学习并巩固知识,特意从我的公众号『 技术让梦想更伟大』整理出来部分文章,帮助大家了解,同时也谢谢大家的支持。FreeRTOS系列第1篇---为什么选择FreeRTOS?FreeRTOS系列第2篇---FreeRTOS入门指南FreeRTOS系列第3篇---FreeRTOS移植指南FreeRTOS系列第4篇---FreeRTOS编码标准及风格指南FreeRTOS系列第5篇---FreeRTOS在Cortex-M3上的移植FreeRTOS系列第6篇---FreeRTOS内核配置说明FreeRTOS系列第7篇---Cortex-M内核使用FreeRTOS特别注意事项FreeRTOS系列第8篇---FreeRTOS内存管理FreeRTOS系列第9篇---FreeRTOS任务概述基础篇FreeRTOS系列第10篇---FreeRTOS任务控制FreeRTOS系列第11篇---FreeRTOS任务应用函数FreeRTOS系列第12篇---FreeRTOS内核控制FreeRTOS系列第13篇---FreeRTOS任务通知FreeRTOS系列第14篇---使用任务通知实现命令行解释器FreeRTOS系列第15篇---可视化追踪调试FreeRTOS系列第16篇---FreeRTOS队列基础及API函数FreeRTOS系列第17篇---FreeRTOS信号量FreeRTOS系列第18篇---FreeRTOS信号量API函数FreeRTOS系列第19篇---FreeRTOS列表和列表项FreeRTOS系列第20篇---FreeRTOS任务创建分析FreeRTOS系列第21篇---FreeRTOS调度器启动过程分析FreeRTOS系列第22篇---FreeRTOS任务切换分析FreeRTOS系列第23篇---FreeRTOS队列分析FreeRTOS系列第24篇---FreeRTOS信号量分析FreeRTOS系列第25篇---FreeRTOS内存管理分析FreeRTOS系列第26篇---FreeRTOS任务通知分析FreeRTOS系列第27篇---FreeRTOS系统延时分析FreeRTOS系列第28篇---系统节拍时钟分析FreeRTOS系列第29篇---FreeRTOS空闲任务分析······  关注公众号『技术让梦想更伟大』,后台回复关键字:『Qt』『C语言基础』『C语言难点』『C 』『Linux』『freertos』『指针』『数据结构与算法』『经验技巧篇』『疑问篇』『基础理论篇』『实战篇』『架构篇』『模块化编程』『状态机』『实用工具』『心声社区』『期刊』『视频』······等,查看更多精选内容。 关注我的微信公众号,回复“加群”按规则加入技术交流群。这是我另一个技术号,程序员的编程学习基地,注重编程思想,欢迎关注!点击“阅读原文”查看更多分享。

    技术让梦想更伟大 os

  • 从 Python 到 Go 再到 Rust,谁是后端开发之王?

    关注、星标公众号,直达精彩内容来源:csdn【CSDN 编者按】作为一种简单易上手的面向对象的动态类型语言,Python 在近两年的技术圈中,可谓是炙手可热;而另一种素有 Google “亲儿子”之称的 Go 语言,被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言,其自从诞生起,就备受业界关注;最后来自 Mozilla 开发的系统编程语言 Rust,在安全性上表现尤为突出,且在过去三年间连续获得了 StackOverflow 开发者调查中“最受喜爱编程语言”的 Top 1。  在此,如果这三种语言同置于后端开发之中时,将会为开发者带来什么样的体验?而谁又会更胜一筹?作者 | allomedia译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)以下为译文:说起后端语言,我很自然地从Python切换到了程序员们的新宠:Go,但仅一个星期之后,我意识到换成Go只是此次旅行的一半路程。尽管Go比Python更能满足我的需要,但远远比不上我期待中的开发体验,就像我在前端使用Elm时的体验。所以我尝试了一下Rust。离开Python在过去三年的后台开发中,我主要使用Python 3。从管理员脚本开始,后来开始写机器学习脚本,到Flask/Django应用程序,我最近大部分时间都在使用Python,但总觉得它不是那么舒服。说实话,我并不是从某个“完全随机的时间点”开始感觉不对劲,而是因为我喜爱上了Elm这个强类型语言。我很喜欢一句名言:“能通过编译就能用”,一旦你体会到了这一点,就再也回不到过去了。你可以尽情尝试,只要按照编译器给出的友好错误信息改代码,然后就能神奇地使用了!我开始意识到,我希望的“最佳”后端语言应该拥有以下特性:静态类型,强类型大多数检查在编译时进行(而且,没有异常!)没有null没有可修改性能漂亮地处理并发我知道你会说:“嗨,这不就是Haskell嘛!”是的,没错,但不知出于什么原因,我从未能用Haskell完成过什么东西(尽管我尝试了许多)。也许只有我这样吧,但从一个外行的角度来看,Haskell的思维方式过于精英化,也没有太多文档和示例,所以很难入门。《学习Haskell做正确的事情》这本书当然很好,但它太长了,而且对于我来说过于抽象(整本书没有构建任何实际的东西)。“嘿,那Scala怎么样?”Scala是什么?更好的Java?还是Scalaz的函数式编程语言?还是那个需要4GB JVM才能运行,而且不确定是否会在java.lang.NullPointerException上出现运行时错误的那个面向对象的函数式编程语言?我在几年前尝试过,显然,它并不适合我。在与一些人讨论之后,我决定试试Go语言。它有编译器,没有异常,没有null(但有null值),而且能很好地处理并发。尝试Go我决定用Go语言重写一个用Python写的内部项目,目的只是为了感受两者之间的差异。第一感觉:学习Go非常容易。我只花了一个晚上,就编译出了该项目的原型版本,实现了最基本的功能,还写了一些测试。能够快速添加功能的感觉非常好。编译器的错误信息也非常有用 ,一切都很好。结果痛苦开始了。我需要在某个结构体中添加一些字段,于是我修改了结构体,正要打算根据编译器错误找出这个结构体在哪儿用过的时候……我编译了代码,结果……没有错误信息。一切正常。嗯?但我在结构体中添加了字段啊,编译器应该指出我的代码有错误,因为这些字段并没有初始化!问题在于,Go语言认为不给结构体提供值是正常的。值的默认初始值就是零,能通过一切编译。这一点我坚决不能接受。我认为,编译器不能在我犯错误的时候替我收拾残局。于是我想:如果Go的编译器并不比Python和mypy更好,那我为什么要学Go语言呢?当然Go语言的并发处理要好得多,但无法依赖编译器的缺点对于我来说太严重了。不要误会,我依然认为Go能与Python并驾齐驱,如果有人要从两者中选择一个,我依然会推荐学习Go而不是Python。但就我个人而言,我已经学会了Python,只是想要一些更安全的东西,Go并没有给我足够的理由去学习。尝试Rust所以,我不会再考虑Go语言,因为我发现我真正想要的是更有帮助的编译器,这个编译器不应该默认我懂得如何编程(大量事实证明我的确不懂)。正因为如此,我开始尝试Rust。Rust并不是我的第一选择,因为它标榜自己为“系统语言”,而我本身更倾向于Web开发,而不是系统开发。但它有许多非常好的卖点:没有null值,二是提供了Option类型(编译时检查)没有异常,但提供了Result类型(编译时检查)变量默认是不可修改的设计时考虑了并发设计时考虑了内存安全,不使用垃圾回收器我决定重写之前用Python和Go写过的那个项目。Rust入门比Go语言难多了。像Go一样,我试着上手写代码,但发现非常困难:我需要理解许多Rust特有的概念,比如ownership、lifetimes,才能理解我在StackOverflow上看到的代码。所以我只好去阅读《Rust Book》,花了两个星期才能写出一点代码(别忘了Go语言我只花了一个晚上就能写代码了)。但度过了初期陡峭的学习曲线之后,编写Rust代码变成了一种享受,我现在依然很喜欢编写Rust代码。有了Rust,我不再需要相信自己,只要跟着编译器的指示即可,只要代码能通过编译,那基本上就能用。这正是我一直在寻找的编程感觉。当然,Rust也有许多缺点:它非常新,一切发展都很迅速。我的项目中使用了futures-rs和hyper.rs,想找一份好的文档非常困难(感谢irc.mozilla.org#rust-beginners的人提供的帮助)。它会强迫你思考在使用高阶语言时从未思考过的问题:内存管理(包括lifetimes和ownership的概念)。编译器的消息有时并不是太容易懂,特别是将futures和它们超长的类型结合在一起时。可修改性是允许的,所以有时候副作用会让你抓狂。但是,它也有许多优点:非常快工具链非常好(cargo,rustfmt)大多数东西都在编译时检查你几乎可以用它做任何事,可以编写浏览器,编写Web应用,甚至还能编写游戏。社区非常友好由Mozilla支持总结Go语言非常酷,但并没有为我提供足够的类型安全。如果不需要并发,那么我宁可继续使用Python及其生态环境,而不会去冒险采用Go重写一切。如果需要并发,那我也不会使用Go,因为它缺乏类型安全,这个炸弹肯定会爆炸。Rust非常适合并发和安全,尽管futures-rs的“箱子”(Rust里函数库叫做“箱子”)依然非常新。我认为,以后Rust会成为许多后台的默认语言。关于Go和Rust更深入的区别的文章和讨论,可以参考Ralph Caraveo(@deckarep)的这篇文章:为Go开发者准备的Rust编程范式(https://medium.com/@deckarep/paradigms-of-rust-for-the-go-developer-210f67cd6a29)。至少,我认为Rust是我最喜欢的后台语言。原文:https://tech.allo-media.net/point/of/view/2018/03/22/from-python-to-go-to-rust.html本文为 CSDN 翻译,转载请注明来源出处。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。欢迎关注我的视频号:点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    技术让梦想更伟大

  • 整理汇总了一份常用的 Linux 软件!

    关注、星标公众号,直达精彩内容来源:gitbooks音频Airtime - Airtime 是一款用于调度和远程站点管理的开放广播软件Ardour - 在 Linux 上录音,编辑,和混音Audacious - 开源音频播放器,按你想要的方式播放你的音乐,不占用你其它任务的电脑资源。Audacity - 免费,开源,跨平台的声音录制、编辑软件。Audio Recorder - 简单的声音录制软件,就在 ubuntu ppa。Clementine - 播放无数的有损和无损音频格式。Google Play Music - 非官方但很漂亮的跨平台 Google Play Music 桌面客户端。Hydrogen - GNU/Linux 上的高级电子鼓。K3b - K3b - Linux 上的 CD/DVD 创建工具 - 为 KDE 特别优化。Kid3Qt - 编辑多媒体文件的标签,如一个专辑所有 mp3 文件的艺术家,专辑,年代,流派。KxStudio - KXStudio 是专业声音创作应用和插件的集合。Let's make music - 在你的 PC 上制作音乐,创造旋律和节拍,合成,混音,编曲小样以及更多内容。Lollypop - Lollypop 是一款新的 GNOME 音乐播放应用。Mixxx - 免费的 DJ 软件,给你一切现场混音所需要的,名副其实的 Traktor 替代品。OSD Lyrics - 与你最爱的媒体播放器显示歌词。Rhythmbox - 来自 GNOME 的音乐播放器。SoundJuicer - CD 抓取工具,for GNOMETomahawk - 一种新的音乐播放器,集合你所有的流媒体,下载,音乐云存储,播放列表,电台等。聊天客户端GhettoSkype - Skype 的开源 web 封装。HexChat - HexChat 是一款基于 XChat 的 IRC 客户端,但和 XChat 不一样的是它对 Windows 和 Unix-like 系统都是完全自由的。Jitsi - Jitsi 是一款免费,开源的多平台语音,视频会议以及即时通讯应用,在 Windows, Linux, Mac OS X 和 Android 上可用。Messenger for Desktop - Facebook messenger 应用。Pidgin - 一款通用聊天客户端。qTox - 一款简单的分布式,安全的通讯软件,支持音频和视频聊天。ScudCloud - 一款 Linux 下的 Slack 客户端。Skype - Skype 让世界保持沟通,免费的。Telegram - 一款专注于速度和安全的消息应用,它非常快,简单而且免费。Viber - Viber for Linux 让你在任何设备,网络和国家给其他 Viber 用户免费发送消息和通话。Weechat - WeeChat 是一款快速,轻量级,可扩展的聊天客户端。Whatsie - Whatsapp ubuntu/linux 非官方客户端。数据备份与恢复Borg Backup - 一款不错的的备份工具。Photorec - PhotoRec 一款数据恢复应用,为恢复硬盘,CD-ROM 上包括视频,文档以及归档等文件而设计,以及数码相机存储中丢失的相片(Photorec 的由来)。Qt4-fsarchiver - qt4-fsarchiver 是 fsarchiver 的图形化界面,能够保存/恢复分区,文件夹和 MBR/GPT 分区。这个程序是基于 Debian 的系统,Suse 以及 Fedora 适用的。System Rescue CD - SystemRescueCd 是一款 Linux 系统急救盘,提供可启动的 CD-ROM 或 U 盘,用于管理系统在崩溃后修复系统和数据。Test Disk - TestDisk 是一款强大的免费数据恢复软件!它主要设计用于帮助回去丢失的分区和/或修复由软件错误导致的硬盘无法启动引导。Timeshift - TimeShift 是一款系统还原工具,它用 rsync 和硬链接创建系统的增量快照。快照可以在一段时间后用于恢复,撤销快照生成以来所做的所有更改。快照可以手动生成或用定时任务自动生成。桌面个性化Adapta Theme - 一款自适应的 Gtk 主题,遵循 Material 设计指南。Arc Icon Theme - 一款可以和 Moka 图标主题一同使用的现代图标主题。Arc Theme - 带有透明元素的扁平化主题 。Compiz Config settings manager - OpenCompositing 项目带来的提高 X Window 系统可用性和生产力的 3D 桌面视觉特效。Conky - Conky 是 X 下一款免费,轻量的系统监视器,可以在你桌面显示任何类型的信息。Flatabulous - 一款扁平化主题,适用于 Ubuntu 以及其它基于 Gnome 的 Linux 系统。Flatabulous Arc Theme - 我最爱的 ubuntu 主题。Gnome Extensions - Gnome 桌面环境扩展插件。Gnome Look - 大量社区创建的图标,shell 主题,字体,以及其他更多的可用来个性化你的 Gnome 桌面环境的资源,都在这一个站点。FreewareIrradiance Theme - 一款受 OSX Yosemite 启发的 Unity 主题,基于 Radiance。Numix Icon Theme - Ubuntu 最好的图标主题之一。Numix Theme - 一款很流行的主题。Paper Icon Theme - Paper 是一款现代 freedesktop 图标主题,它的图表设计注重强烈的色彩和简单的几何形状。Papirus Icon Theme - Ubuntu 最好的图标主题之一。Unity Tweak Tool - Ubuntu unity 个性化必备应用。Yosembiance theme - 一款受 OSX Yosemite 启发的 Ambiance 改款主题。开发Android studio - Android 的官方 IDE:Android Studio 提供在各种类型的安卓设备上构建应用最快的工具。Aptana - Aptana Studio 利用了 Eclipse 的灵活性并且专注于让它成为强大的 web 开发引擎。Arduino IDE - 开源的 Arduino 软件(IDE)让编写代码和上传代码到开发板变得简单。BlueJ - 一款为新手设计的免费 Java 开发环境,世界范围内数百万人使用。Clion - 一款强大的跨平台 C 以及 C IDE。Code::Blocks - Code::Blocks 是一款为满足大部分用户需求构建的免费的 C,C 以及 Fortran IDE。它可扩展并且可配置性强。Codelite - 一款免费,开源,跨平台的 C,C ,PHP,以及 Node.js IDE。Eclipse - Eclipse 以 Java 集成开发环境而闻名,但它的 C/C IDE 和 PHP IDE 同样出色。Fritzing - Fritzing 是一个开源硬件项目,它让电子部件变成人人都能接触到的创造性材料。Geany - Geany 是一款基于 GTK 的文本编辑器,带有基本的集成开发环境特性。它的开发是为了提供一个小型并且快速的 IDE,对其它包只有很少的的依赖。Genymotion - Genymotion 是一款可以用来替代默认安卓模拟器的第三方模拟器。Git - Git 是一款免费和开源的分布式版本管理系统,被设计用来快速和高效地处理从小项目到大项目的一切内容。IntelliJ IDEA - 强大的 Java IDE。Ipython - 强大的 Python shell。Jupyter Notebook - 开源,交互式数据科学和科学计算,支持超过 40 种编程语言。KDevelop - 免费,开源 IDE,全功能,支持插件扩展的 C/C 以及其它编程语言 IDE。Komodo Edit - 免费,开源的多语言开发环境。MariaDB - 最流行的数据库服务器之一。由原 MySQL 开发者打造。MonoDevelop - 跨平台的 C#,F# 以及更多语言的 IDE。Nemiver - Nemiver 项目编写集成到 GNOME 桌面环境的独立图形调试器。Netbeans - NetBeans IDE 让你快速而且容易地开发 Java 桌面,移动以及 web 应用,还有基于 HTML,JavaScript 以及 CSS 的 HTML5 应用。NodeJS - Node.js® 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境。Oh-my-zsh - 一个由社区驱动,优雅的 zsh 配置管理框架。Postgresql - PostgreSQL 是一款强大,开源的对象-关系型数据库系统。Postman - Postman,帮助我们快速测试 API。PyCharm - 强大的 Python IDE。QT Creator - 全功能跨平台集成开发环境,轻松创建互联设备,用户界面以及应用程序。Rabbit VCS - RabbitVCS 是一个图形工具的集合,提供一个与你使用的版本控制系统简单而直接的访问方式。Sqlite Browser - 可视化创建,管理,以及查看 sqlite 数据库文件。Swift - Swift 是一个通用编程语言,基于更现代的安全,性能,和软件设计模式为目标设计。Ubuntu-SDK - Ubuntu 官方 SDK。Zsh - 一款强大的命令行 shell。电子书工具Calibre - 难以置信的丑但很强大的电子书管理和转换软件。Evince - Evince 是一款支持多种格式的文档查看器。Evince 的目标是用一个简单的应用取代已经存在于 GNOME 桌面的多种文档查看器。FBReader - 最流行的电子阅读应用之一。Foxit - Foxit Reader 8.0——获得殊荣的 PDF 阅读器。Lucidor - Lucidor 是一个阅读和处理电子书的电脑软件。Lucidor 支持 EPUB 格式的电子书和 OPDS 格式的目录。MasterPDF editor - Master PDF Editor 一款方便而智能的 Linux PDF 编辑器。MuPDF - 一款轻量级的 PDF 和 XPS 查看器。Okular - Okular 由 KDE 原始开发的通用文档查看器。Okular 可以在多个平台上工作,包括但不限于 Linux,Windows,Mac OS X,*BSD 等等。qpdf - qpdfview 是一款标签页式文档查看器。Sigil - Sigil 是一款多平台 EPUB 电子书编辑器。编辑器Atom - 21 世纪的可 hack 文本编辑器。Bluefish - Bluefish 是一款面向程序员和 web 开发者的强大编辑器,带有很多编写网站,脚本和代码的选项。Brackets - 懂 web 设计的现代文本编辑器。Emacs - 可扩展,可个性化,免费/自由的文本编辑器——还有更多。Geany - Geany 是一款使用了 GTK 工具集的文本编辑器,带有基本的集成开发环境功能。它的开发是为了成为一个小型又快速的 IDE,对其它包仅有不多的依赖。Gedit - gedit 是 GNOME 文本编辑器。尽管以简单易用为目标,gedit 仍然是个强大的多功能编辑器。Kate - Kate 是一个多文档编辑器,从 KDE 2.2 开始就是 KDE 的一部分了。Lighttable - 下一代代码编辑器!支持实时编码。Sublime - 有史以来最好的编辑器之一。Vim -Vim 是一个高级文本编辑器,寻求以更完整的功能集提供事实上的 Unix 编辑器“Vi”的强大功能。无论你已经在使用 vi 或其它编辑器,它都十分有用。VSCode - Visual Studio Code 是一款轻量但强大的代码编辑器,提供 Windows,OS X 以及 Linux 版本。它内置了 JavaScript,TypeScript 以及 Node.js 支持,并且对其它语言(C ,C#,Python,PHP)还有丰富的插件系统和运行环境。教育BibleTime - BibleTime 是一款基于 Sword 库和 Qt 工具集的圣经学习应用。Celestia - 免费的空间模拟器,让你在三维空间中探索我们的宇宙。Chemtool - Chemtool 是一款在 Linux 上绘制化学结构的小程序。Epoptes - 一款开源的计算机实验室管理和监视工具。Gcompris - GCompris 是一款高质量教育软件,由无数适合 2 到 10 岁儿童的活动组成。Geogebra - 图形计算器,支持函数,几何,代数,微积分,统计以及 3D 数学。GNU Typist - 基于 ncurses 的免费打字教学软件 。GNUKhata - 开源会计软件。Google Earth - Google Earth 是一款虚拟地球,地图以及地理信息程序。GPeriodic - GPeriodic 是一个 Linux 上的元素周期表应用。ITalc - iTALC 是一款为老师准备的实用并且强大的教学工具。它让你有多种方式查看和控制你网络中的其它计算机。KDE Edu Suite - 基于 KDE 技术的免费教育软件。MAPLE - Maple 是一款数学软件,它结合了世界上最强大的数学引擎以及一个让它十分易于分析,探索,可视化以及解决数学问题的界面。MATLAB - MATLAB 平台专为剞劂工程和科学问题优化。MATLAB 让你的想法不仅仅停留在桌面。你可以在巨大的数据集上进行你的分析并按比例增加你的集群和云。Maxima - Maxima 是一个处理符号和数值表达式的系统,包括微分,积分,泰勒级数,拉普拉斯变换,常微分方程,线性方程组....Moodle - Course management system for online learning.OpenEuclid - OpenEuclide 是一款 2D 几何软件:数据由描述形式化的几何约束动态定义。OpenSIS - 学校管理软件。Scipy - SciPy 是一个基于 Python 的开源软件生态系统,面向数学,科学,以及工程学。Scratch - 有了 Scratch,你可以编程你自己的互动故事,游戏,以及动画——并且在在线社区和其他人分享你的创造。Stellarium - Stellarium 是一个为你电脑准备的免费开源天文馆。Tux4Kids - Tux4Kids 为孩子们开发高质量软件,目标是将乐趣和学习结合到一起。UGENE - UGENE 是一款免费开源,跨平台,基于图形界面的生物信息学软件。电子邮件Evolution - Evolution 是一款个人信息管理应用,集成了邮件,日历以及地址簿功能。Geary - Geary 是一款为 GNOME 3 构建的电子邮件应用。它让你可以在一个简单,现代的界面上阅读和发送邮件。Mailnag - Mailnag 是一个向 POP3 和 IMAP 服务器检查新邮件的守护程序。N1 - 在现代 web 上构建的可扩展桌面邮件应用。Sylpheed - 轻量化,用户友好的电子邮件客户端。Thunderbird - Thunderbird 是一款免费的电子油价客户端,设置以及个性化简单方便,功能强大。Wmail - Gmail

    技术让梦想更伟大 软件

  • Qt 的开源版本与商业版区别及 LGPL 与闭源程序

    关注、星标公众号,直达精彩内容整理:李肖遥Qt许可证Qt 有两个许可证:LGPL 和商业协议。这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 QtSingleApplication 这个库)。所以现在对于普通开发人员和部分商业公司来说,使用 LGPL 版本的 Qt 可以节省很大的开销。这两个版本最大的区别在于,前者是免费的,后者是收费的。既然代码都是一致的,所以费用就要是用来购买 Qt 的售后服务和培训等等相关服务。Qt版权问题现在我们是来说一下版权的问题。LGPL 是一个开源协议,因此,有人会担心 LGPL 能否用于开发闭源程序,能够拿来卖钱。尽管现在国内有些公司不是很重视这方面的问题,不过,如果你违反了协议,某一天被别人发来一纸律师函的时候,真的是欲哭无泪了哦。所以,我们还是先来研究一下这个协议,LGPL 究竟能不能用于开发闭源程序。以下内容是我查找了 N 多网站总结出来的,但是毕竟不是律师,所以 LGPL 协议基本看不懂。究竟怎样去理解这个协议,还是希望能够有专业人士说出来。这里就算做是一种抛砖引玉吧!尽管没有十分的确定,但是这里所说的理解基本也是八九不离十的了。至于什么是 LGPL 协议,这里就不再多说了,我们关心的是,如果使用 LGPL 协议开发商业程序。请注意,这里所说的闭源程序,是指不以某种形式开放源代码,也就是说,用户(包括其他开发者)不能获取其源代码的程序。首先说明一点,LGPL协议是一个商业友好的协议。这里的含义是,你可以用 LGPL协议开发商业程序,当然也可以是非商业的闭源程序。但是,它是有一些限制的。这就是我们要讨论的重点。怎么解决?既然我们已经对其定性,那么我们直接进入主题:使用 LGPL 协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式发布你的应用程序,商业的、非商业的、开源的、非开源的,随你。如果你因某种原因必须静态链接一个基于 LGPL 协议发布的库(一下我们简称为 LGPL 库),那么,你有义务进行下面的工作:你必须在你的文档中说明,你的程序中使用了 LGPL 库,并且说明这个库是基于 LGPL 发布的;你必须在你的应用程序发布中包含一份 LGPL协议,通常就是那个文本文件;你必须开放使用了 LGPL 库代码的所有代码,例如某些封装器。但是,其他使用这些封装器的代码就不需要开放了;你必须包含你的应用程序的余下部分的目标文件(通常就是我们所说的 .o 等等),或者是其他等价的文件。源代码并不是必须的。是不是很难理解呢?我们详细的说一下。第一条很容易理解;第二条也很容易理解,你可以在这里找到 LGPL 协议的内容,复制下来随你的程序一起发布就可以了。第三条就不那么好理解了。简单来说,LGPL 协议要求,如果你的类使用了 LGPL 库的代码,那么必须把这个类开源。例如,如果你的程序 app.exe 每个源文件都使用了 LGPL 库的代码,那么你的所有源代码都要开源。为了避免这种情况,我们通常编写一个封装器,把 LGPL 库的代码封装起来,这样就只需要开放这个封装器的代码,而其他使用了这个封装器的代码就不需要开放。第四条是对第三条的一种补充:那些使用了封装器的程序不需要开源,但是你必须把你编译的那些中间文件开放出来,Windows 下就是那些 .o 文件。你很奇怪,为什么 LGPL 协议要这样规定呢?LGPL 所做的工作是,它保证了用户能够有这样一种能力:修改你使用 LGPL 库函数的方式(那些封装器就是你使用 LGPL 库的方式,那些已经开源了),重新编译这些代码,然后重新对程序进行连接(连接所需要的目标文件也是包含了的,这是第四条规定的),就可以得到一个新的可执行程序。实例好了,如果你还不明白如何使用,我们来看一个例子。假设我们使用一个名为 Lib 的库,这个库是基于 LGPL 协议发布的。如果你使用 Lib.dll 做动态链接(Windows 下),好,一切 OK。无论你的程序怎么样,你都可以做你所做的事情。我们主要是来看,如果你要使用静态链接,那么你需要如何组织你的代码。如果你有一个 main.cpp(我们假设所有 Lib 库的函数都是用了 lib_ 前缀):// main.cpp int main() {     lib_init();     lib_do_something();     lib_done();     lib_close();     return 0; }现在你已经完成了 main.cpp,但是你必须把它开源!因为它使用了 LGPL 库的代码。这是上面第三条规定的。我不想把它开源,怎么办呢?好,我们建一个新的文件 lib_wrapper.cpp:void my_lib_init() {     lib_init();     } void my_lib_do_something() {     lib_do_something(); } void my_lib_done() {     lib_done(); } void my_lib_close() {     lib_close(); } 在 main.cpp 中,我们做相应的修改:int main() {     my_lib_init();     my_lib_do_something();     my_lib_done();     my_lib_close();     return 0; } 现在,main.cpp 不再是直接使用了 LGPL 库的代码了,因此它不需要开源,而我们的封装器 lib_wrapper.cpp 必须开源。好,编译一下我们的程序,你会得到 main.o(Windows 下)这个目标文件。在最终程序的发布中,你需要包含一下文件:一份文档,其中声明:这个程序使用了 Lib库,这个库是基于 LGPL 协议发布的;LGPL.txt;lib_wrapper.cppmain.o这样,用户可以通过修改 lib_wrapper.cpp  的内容改变你使用 LGPL 库的方式,例如:void my_lib_done() {     lib_done();     lib_close(); }  void my_lib_close() {     // lib_close(); } 然后编译这个 lib_wrapper.cpp,最终重新链接。一个新的可执行程序诞生啦!好了,这就是在使用 LGPL库开发闭源程序所需要遵守的东西了。还是建议大家能够遵守协议,尊重作者的劳动成果哦~参考:https://blog.51cto.com/devbean/313477版权归原作者所有,如有转载,请联系作者,谢谢。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。欢迎关注我的视频号:点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    技术让梦想更伟大 开源 源程序

  • 为什么UWB定位能够做到如此高的精度

    关注、星标公众号,直达精彩内容来源:网络素材整理:李肖遥随着UWB技术不断完善,市场需求增加,室内定位公司迎来春天。UWB定位系统是目前业界精度最高的商用无线定位系统,可实现较高的实时定位精度与定位容量,通常能够在现实环境中获取高达10cm~20cm的二维定位精度,世界大范围内开始了UWB的应用。UWB室内定位系统如何能够做到如此高的精度?下面来为大家全面解析,定位精度可达厘米级的UWB定位,不会像GPS一样把你带到沟里!相比本文要讲的UWB定位,GPS定位应该已被大家广泛熟知,因为我们生活的方方面面都离不开定位、导航!但是,你们有没有遇到这种情况:自驾游时,找停车位给带去了沼泽地?树林里又哪来的加油站?最捉急的莫过于找酒店,你让人睡沟里吗?……景色虽美,但不是车主要去的地方,这难道不是GPS的硬伤?“STOP GPS ERROR.”告别错误定位。不同于GPS,UWB定位主要应用于室内高精度定位,用于在一定空间范围内获取人或物的位置信息。可以说,近几年,室内定位在零售、餐饮、物流、制造、化工、电力、医疗等行业均展现出了广阔的市场前景。在此背景下,蓝牙定位、Wi-Fi定位、UWB定位、RFID定位等技术纷纷进入市场,为不同行业的室内定位需求贡献了诸多行之有效的位置服务方案。其中UWB定位(超宽带)的市场关注度和接受度在最近几年明显提高。UWB定位的应用场景也越来越广,监狱看守所、综合性医院、工厂、机场、停车场等场所对于定位和导航的需求也逐渐增多。监狱看守所希望能够借助UWB定位技术来实现监狱犯人智能化监控,例如实时获取犯人位置信息,越界自动报警,人数只能清点等。医院养老院希望对医疗设备进行实时定位,便于需要时快速调用;希望能对老人、特殊病患进行定位监护,防止其发生意外。高危化工厂需要对人员、设备的位置信息进行定位管理,防止发生安全事故等。什么是超宽带?超宽带(Ultra Wide-Band,UWB)是一种新型的无线通信技术,根据美国联邦通信委员会的规范,UWB的工作频带为3.1~10.6GHz,系统-10dB带宽与系统中心频率之比大于20%或系统带宽至少为500MHz。UWB信号的发生可通过发射时间极短(如2ns)的窄脉冲(如二次高斯脉冲)通过微分或混频等上变频方式调制到UWB工作频段实现。UWB定位的主要优势有,低功耗、对信道衰落(如多径、非视距等信道)不敏感、抗干扰能力强、不会对同一环境下的其他设备产生干扰、穿透性较强(能在穿透一堵砖墙的环境进行定位),具有很高的定位准确度和定位精度。为啥说UWB定位的定位精度能够达到厘米级呢?UWB-TDOA定位原理:UWB定位系统采用TDOA(到达时间差原理),利用UWB技术测得定位标签相对于两个不同定位基站之间无线电信号传播的时间差,从而得出定位标签相对于四组定位基站的距离差。使用TDOA技术不需要定位标签与定位基站之间进行往复通信,只需要定位标签只发射或只接收UWB信号,故能做到更高的定位动态和定位容量。UWB定位指标另外,高精度的定位不仅需要高精度的时间测量技术,还需要稳定可靠的基准时间,由于晶振、锁相环等模拟电路的不确定性,需要高精度的同步技术解决UWB-TDOA定位中的频率同步和时间同步问题。通俗地讲,时间同步类似于将两块手表的时刻调整到相同时刻,但是由于两块手表机械的差异性导致的运行快慢会使两块表运行一段时间后出现偏差,此即需要频率同步来解决。目前同步技术分为有线同步和无线同步两种,有线同步指使用光纤、网线等线缆将定位基站直接相互连接或接入同步控制器实现定位基站之间的同步;无线同步指通过无线电实现定位基站之间的同步。通常有线同步精度较无线同步高,而由于有线同步需要额外铺设线缆导致有线同步成本较无线同步高。无线同步技术深入无线电发射接收链路导致不同步的因素本质,使无线同步达到有线同步相同的定位精度。厘米级高精度定位为什么更倾向于UWB?首先其他定位技术可以达到的定位精度有限,即使能达到UWB定位技术同样的定位精度,其系统的复杂程度和成本也太高。其次,像RFID、ibeacon虽然在定位上有很多场景可做,但现在已经有很多企业都在做了。而UWB是一种比较新的技术,有很多优势,也有很多潜在的应用市场尚待开发。来源整理于网络素材,版权归原作者所有,如有侵权,请联系删除,谢谢。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。欢迎关注我的视频号:点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    技术让梦想更伟大 精度 UWB

  • 谁还不是个新生代农民工

    关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥2021年8月16日,人社部一条“码农实锤”的新闻,不少互联网从业者纷纷点赞,引起了广大网友的广泛关注与讨论,由此引发了人民对受过高等教育的大学生们是否也属于新生代农民工的热议!码农到底算不算农民工?农民工这个称谓泛指户籍在农村的进城务工群体,听着可能会有一些歧视感吧。而新生代农民工这个名词是2010年中央一号文件正式提出的,泛指出生于20世纪80年代以后,年龄在16岁以上,在异地以非农就业为主的农业户籍人口。随着这次人社部的引用报告,其中提到集中于劳动密集型行业,从事信息传输、软件和信息技术服务业的**新生代农民工**,我们互联网从业者都对号入座,自然而然引起了轩然大波了。。但准确一点来说,上述指的不一定就是码农,前提要有农村户籍,如果你在城市入了户口买了房,其实也算是脱离农民工的范畴了。新生代大学生农民工是从新生代农民工群体中分化出来的新社会职业群体,是新生代农民工群体的特殊子集,是农民工的上流阶层,兼有大学生和新生代农民工的双重身份。一般来说,从出身上大部分来自于农村并且考上大学,接受过高等教育,寄希望于改变自己的命运,从事的职业上看大部分也是在城市中进入次级劳动力市场的人群。当然了,我也是属于这个范畴,标准的来自农村的新生代大学生农民工。新生代大学生农民工有什么群体特征?新生代大学生农民工具有一般的新生代农民工和城市籍大学毕业生的共性,又具有不同于他们的特殊性,我按照自己的了解大概说几点吧。成长环境的多样性一般来说新生代大学生农民工成长环境主要有两种类型:一类是土生土长的农村人,考上大学才到城市生活。另一类是跟随进城务工的父母在城市长大,但没有所在城市的户籍或者房子。受教育程度较高一般来说大学生农民工是新生代农民工群体中文化程度最高的一部分,具有大专及以上的学历,接受过正规的高等教育,学习了某一专业领域的知识,较高的智商和情商,易于接受新事物和新观点,具有具有较强的可塑性。自我发展意愿强一般来说大学生农民工学历层次较高,具有一定的专业知识结构,有远大的理想与抱负,对自己有较高的精神需求,融入城市不仅仅是为了生存,而是为了有更广阔的发展空间。虽然目前的生活境遇与新生代农民工相同,但不满足于现状,希望通过努力在未来会有更好的发展,内心对未来发展的期望要比一般的新生代农民工更高。但是同时当怀揣梦想,离开农村进入大学直到步入社会,与进城打工的父兄汇流,回归原有身份,重新站在同一起跑线,生活境遇甚至不如具有一技之长的其他农民工。面对残酷的现实,就会会产生巨大的心理反差,心理问题可能比较突出。因此,面对日益激烈的就业竞争,需要我们很大一部分的大学生们及时调整好心态,不能再以天之骄子自居,而要脚踏实地,接受新的称谓新时代大学生农民工,成为一个能够不断学习不断创造的劳动者。总结随着我国高等教育从精英化向大众化的转变和当前大学生不断增大的就业压力,新生代农民工正在逐渐成为城市中一个庞大的社会新群体。我们眼中固有的农民工和受过大学教育的我们,其实一直以来并没有任何的本质区别,只是一个社会职业群体的称呼而已,社会地位也是平等的,切勿认为我们就高人一等。总之劳动最光荣,大家都是在劳动,都只是身处不同的岗位,其本身是没有任何高低贵贱之分的,而我们要做的就是仰望天空脚踏实地,成为我们想要的那一个人,与君共勉。‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。欢迎关注我的视频号:点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    技术让梦想更伟大

发布文章