嵌入式开发

嵌入式软件自动化测试的趋势

左心房为你撑大大i 提交于 2020-01-15 03:28:00
现在软件市场越来越推崇敏捷开发和持续交付,要在这样的环境下取得竞争优势,各个企业必须得开发出稳健的应用程序,为用户提供无可比拟的直观体验。而且,这些应用程序还要能够达到组织机构的业务目标。 自动化测试的重要意义 在这个竞争日益激烈的软件市场,能否抢占市场先机对于软件产品能否取得成功可能起着决定性的作用。为了缩短产品的交付时间,企业必须进行严格的自动化测 试。也就是说,软件开发阶段(从创建到部署)的所有步骤都要实现自动化。因为利用自动测试,不仅能够开发出更优质的软件产品,还能够让产品尽快投放市场。 自动化测试能够及时给出反馈,使得开发运营人员能够尽快想办法提高产品的质量。发现问题这一阶段所花费的时间越长,团队付出代价就越高。所以能够尽早发现问题具有十分重大意义,因为只有这样,才能够有足够的时间来修复问题。 要实现自动化测试的效率最大化,企业必须着眼于一些基本要素,尤其是敏捷宣言中的首要原则:“我们的最高宗旨就是通过尽快、持续交付高质量的软件产品,来满足客户的需求。”顾客是上帝,所以企业一定要用更好、更快的服务保证上帝高兴。 自动化测试的关键要素 如今,自动化测试已经成为软件开发生命周期的一个重要组成部分,测试经理和开发团队也越来越依赖于自动化测试。但是,与此同时,他们也面临着一个很现实的 问题:他们不仅要管理很多的测试,还要解读很多的测试结果。所以

图像识别深度学习嵌入式开发板比较

删除回忆录丶 提交于 2020-01-14 18:23:20
嵌入式AI主要用于图像识别和语音识别,图像识别主要用于工业、自动化、医疗等行业。以医疗行业为例,由于医疗保健行业大量使用大数据及嵌入式人工智能,进而精准改善疾病诊断、医疗人员与患者之间人力的不平衡、降低医疗成本、促进跨行业合作关系。此外 嵌入式人工智能 还广泛应用于临床试验、大型医疗计划、医疗咨询与宣传推广和销售开发。嵌入式人工智能导入医疗保健行业从2016年到2022年维持很高成长,预计从2016年的6.671亿美元达到2022年的79.888亿美元年均复合增长率为52.68%。 多家半导体厂商已经推出嵌入式AI平台,比如 华为海思今年4月份发布的Hi3559A,这个样品超过100美金/片 集成寒武纪AI核(遗憾不是最新的版本,因为最近寒武纪又发布最新的AI版本,同时还集成大名鼎鼎Cadence的 4核DSP); 赛灵思Xilinx的FPGA—— Zynq 7020,ZU2CG开发难度大,价格不菲,还有其他家的ARM+FPGA方案也不便宜,开发难度也不小; 英伟达的GPU——JETSON TX2,TX2核心板英伟达自己生产,价格太贵,不适合产品小型化生产; TI 的TDA2x系列和DAVINCI系列最新的DM505,以及后续的版本,专注辅助驾驶ADAS,他的64bit浮点DSP C66X+EYE也支持深度学习(不要小瞧EYE,深度学习一个EYE比2个C66X 浮点DSP还强)

ARM嵌入式开发——基础概念

自作多情 提交于 2020-01-11 01:19:54
文章目录 嵌入式Linux系统组成 嵌入式Linux系统的启动流程 uboot制作 uboot特点 uboot三大功能 硬件初始化功能 引导加载内核 为内核传递启动参数 uboot源码操作 嵌入式Linux系统组成 嵌入式Linux系统软件由三部分组成: BootLoader(uboot)裸板软件,初始化硬件+从闪存加载内核到内存并且启动内核+给内核传递启动参数,告诉内核根文件系统rootfs在什么地方。(上电运行,内核启动后结束) Linux内核(kernel):Linux系统7大功能,管理进程、管理内存、文件系统、设备控制、网络管理。掉电结束。 根文件系统(rootfs): bin:各种命令。 sbin:各种超级用户的命令。 lib:标准系统库。 etc:各种服务的配置(tftpd-hpa,nfs) dev:存放设备文件 sys:存放虚拟文件系统sysfs相关内容 proc:存放虚拟文件系统procfs相关内容 usr:存放其他命令 嵌入式Linux系统的启动流程 上电CPU运行uboot uboot根据bootcmd加载启动内核并且通过bootargs给系统传递参数。 内核启动,完成7大功能。 内核最后根据uboot传递的bootargs到某个地方找到根文件系统rootfs 一旦找到根文件系统rootfs,控制权交给根文件系统。 内核会运行第一号进程/sbin/init

ARM嵌入式开发中的GCC内联汇编__asm__

旧街凉风 提交于 2020-01-05 09:57:14
在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择。但如果完全通过汇编代码实现,又会过于复杂、难以调试。因此,C语言内嵌汇编的方式倒是一个不错的选择。然而,使用内联汇编的一个主要问题是,内联汇编的语法格式与使用的编译器直接相关,也就是说,使用不同的C编译器内联汇编代码时,它们的写法是各不相同的。下面介绍在ARM体系结构下GCC的内联汇编。GCC内联汇编的一般格式: asm( 代码列表 : 输出运算符列表 : 输入运算符列表 : 被更改资源列表 ); 在C代码中嵌入汇编需要使用asm关键字,在asm的修饰下,代码列表、输出运算符列表、输入运算符列表和被更改的资源列表这4个部分被3个“:”分隔。下面,我们看一个例子: void test(void) { …… asm( "mov r1,#1\n" : : :"r1" ); …… } 注:换行符和制表符的使用可以使得指令列表看起来变得美观。你第一次看起来可能有点怪异,但是当C编译器编译C语句的是候,它就是按照上面(换行和制表)生成汇编的。 函数test中内嵌了一条汇编指令实现将立即数1赋值给寄存器R1的操作。由于没有任何形式的输出和输入,因此输出和输入列表的位置上什么都没有填写。但是,在汇编代码执行过程中R1寄存器会被修改,因此为了通知编译器,在被更改资源列表中

[嵌入式操作系统] 嵌入式操作系统复习

好久不见. 提交于 2020-01-04 09:38:44
嵌入式系统的定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统的特点: 系统资源受限的系统-面向特定应用的 大多要求低功耗 要求较高的可靠性和稳定性 有实时约束 需要专用工具和特殊方法 开发工具和方法: 资源有限,不具备自主开发能力,产品发布后用户也不能对软件进行修改,必须有一套专门的开发环境。 专门的开发环境包括专门的开发工具(设计、编译、调试、测试等工具),采用交叉开发的方式进行。 嵌入式操作系统的重要指标: 实时性(中断响应时间、任务切换时间等) 尺寸(可剪裁性) 可扩展性(内核、中间件) 微处理器结构: 嵌入式操作系统体系结构:体系结构是操作系统的基础,它定义了硬件与软件的界限、内核与操作系统其他组件的组织关系、系统与应用的接口。 体系结构是确保系统的性能、可靠性、灵活性、可移植性、可扩展性的关键。 目前操作系统的体系结构可分为: 单块结构 层次结构:硬件无关层、硬件抽象层、硬件相关层 微内核结构 ucos:一种专门为嵌入式设备设计的,基于优先级的可抢占式的硬实时EOS内核 实时系统的要求: 计算的逻辑正确性 产生结果的时间 硬实时:系统要确保最坏情况下的服务时间,对于事件的响应时间的截止期限无论如何都必须得到满足。 软实时:从统计的角度来说,一个任务能够得到有确保的处理时间

嵌入式行业知识结构导航

拈花ヽ惹草 提交于 2019-12-23 09:29:32
第一部分:Linux平台搭建与环境熟悉 了解linux系统;区分各种版本的Linux系统,以便于拓展 Linux视野。 1、Linux 简介; 2、Linux 系统的主要特点; 3、Linux 的组成; 4、主要的 Linux 版本; 5、嵌入式 Linux简介与发展 第二部分:虚拟机安装和LINUX系统安装 1、虚拟机安装; 2、Linux系统的安装; 3、Linux系统的常用软件的安装; 4、Linux快速入门 5、 熟悉运用 Linux环境下,常用命令的操作与系统设置,如常用的 Shell;掌握基本的Shell 应用 第三部分:嵌入式LINUX环境搭建 1、 建立嵌入式 Linux开发环境 2、 熟悉嵌入式开发平台 3、 嵌入式 Linux开发工具 4、 Linux下的调试技巧 5、 MAKE工程管理器 6、 硬件环境的搭建;arm-linux-gcc与 gcc安装配置 第四部分:U-Boot 了解 U-Boot 的作用及工作流程;了解Bootloader 的代码结构、编译过程;移植U-Boot;掌握常用的U-Boot命令。 1、 Bootloader介绍 2、 u-boot工程介绍 3、 u-boot的编译使用 4、 u-boot源码分析 5、 u-boot资源分配 6、 配置编译u-boot 7、 u-boot移植过程 8、 u-boot常用命令操作 9、 添加u

ARM+LINUX嵌入式学习路线

别说谁变了你拦得住时间么 提交于 2019-12-17 23:48:11
我是本科就开始学习Linux,参考了很多资料,其中一直在更新的目前看也只有韦东山老师了,当然还不得不提就是原子哥开始做Linux开发板,还是一样的配方(卖板子,资料全部免费,简单粗暴的模式),感觉韦东山老师的压力估计又大了些。补充:火哥也开始做Linux开发板了,火哥也是我学习STM32路上的榜样,之前还经常在论坛互动,不过工作后由于方向的转换也是很久没去论坛了。 下边分享的是我从之前买的韦东山老师的教程翻出来的,讲的很好(虽然我完全没有照做。。。) ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。 从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。 (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。 (3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。

嵌入式开发的四大职业发展方向,仅供参考

亡梦爱人 提交于 2019-12-12 12:18:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 近几年来,随着移动互联网、物联网的迅猛发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用;随着嵌入式技术及相关产品不断渗透到人们日常生活,大大小小公司对于嵌入式开发人才招聘需求猛增。 介绍嵌入式开发职业发展方向之前,先了解一下嵌入式设备的本质。嵌入式设备的本质就是一台专用的、微型计算机,所以就像计算机一样由三个层次的东西组成: 1)硬件,包括cpu(如ARM)、存储(如flash)、I/O(显示模块、通讯模块、视音频模块、I/O控制电路等)。 2)系统级软件,主要是操作系统也就是OS,以及I/O软件如LCD、蓝牙、wifi、CDMA、声音等子系统。 3)应用软件,如基于linux的应用开发,基于Android的应用开发,基于iOS的应用开发等。 事实上,所有带有数字接口的设备,大到飞机火箭,小到手机,电脑,甚至组成普通PC终端设备的键盘、鼠标、硬盘,目前市场上各种智能硬件产品等都使用嵌入式系统。嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物。嵌入式系统无疑是当前最热门最有发展前途的 IT应用领域之一。 嵌入式开发的发展方向有很多,门槛高低不一样。下面主要介绍四大职业发展方向: ARM + Linux/Android开发 据统计,全世界99

嵌入式入门:嵌入式领域的职业发展方向是什么?

断了今生、忘了曾经 提交于 2019-12-12 11:59:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 嵌入式入门:嵌入式领域的职业发展方向是什么? 在如今的IT市场上看,嵌入式的发展的应用都是广受欢迎的,在嵌入式入门学习中,我们可以发现嵌入式的发展方向有很多,门槛高低不一样。下面就由信盈达学院小编为大家介绍: 1.单片机:工控程序(不跑os)--入门容易,无外乎就是掌握汇编和c,能够根据datasheet来写,发展前景一般,也没有太大的技术难度,除非你在算法上面有优势,比如智能车会各种PID,模式识别上会神经网络,优化上会遗传算法等等,但是这些复杂的控制一般就不会裸奔了(除非环境恶劣),肯定是处理器强悍,带os的;硬件制作--就是数字电路,涉及单片机的外设,感觉难度也不高。 2.ARM:软件上就是写底层驱动,这个入门,深入都不容易,需要对硬件及os有较深的了解,发展还是很不错;其操作系统-比较复杂,linux,android等,你看现在很多手机厂商推出的操作系统也就是修改内核,就业还是很容易的;ARM的应用程序方面,就是android开发或者Linux上应用开发(QT等),做的人很多,就业容易待遇也不错,需要掌握c++/java。ARM的硬件方面,就像手机一样在处理器上做整体的电路,比单片机入门难的多,做成技术大牛了不缺钱。 3.FPGA:就是硬件编程,入门很简单,做深很难

浅谈嵌入式软件设计

岁酱吖の 提交于 2019-12-05 05:28:54
[TOC] 浅谈嵌入式软件设计 本文在21IC的公众号文章《多年嵌入式编程工程师经验分享:换个角度来编程》基础上结合自己理解而写,部分图片以及文字说明均来自互联网。 前后台模型 模型介绍 当开发过程中不使用OS时,几乎所有的嵌入式程序归根结底都是一个由无法停止的循环为结构构成的,即常见的 while(1) 或 for(;;) ,用流程图表示就是这样: graph TD stop[结束] start[查询IO或外设状态] --> section1[执行相关业务逻辑] section1 --> conditionA{退出无限循环?} conditionA -- YES --> stop conditionA -- NO --> section1 start_sub[业务逻辑]-->subconditonA{执行业务逻辑A?} subconditonA{执行业务逻辑A?}--YES-->subsection1[子功能A] subconditonA{执行业务逻辑A?}--NO-->subconditonB{执行业务逻辑B?} subconditonB--YES-->subsection2[子功能B] subconditonB--NO-->stop_b[结束] interp[触发中断]-->baoliu[保护现场] baoliu-->interp2[执行中断服务函数] interp2--