嵌入式系统设计

嵌入式设备系统有无操作系统的区别

会有一股神秘感。 提交于 2019-12-02 14:50:16
随着通信、电子物联网的飞速发展,每天都有各种各样的芯片被研发出来,而要想知道这些芯片怎样工作以及工作后的作用,则离不开软硬件工程师的努力,任何一个计算机系统都是系统中软硬件协作的结果,没有硬件的软件是空中楼阁,没有软件的硬件是一堆废铁,硬件是软件运行的基础。软件上所有操作最终都会被硬件以硬件工作的时序进行工作,硬件建造出来是固定的,而软件则很灵活,可以根据场景适应多种应用,两者相辅相成,缺一不可。 设备驱动,顾名思义就是"驱使硬件设备行动",设备驱动直接与硬件打交道,按照硬件datasheet要求的方式上下电、读写寄存器、中断处理、通信、DMA搬运等等。驱动充当着硬件和应用之间的桥梁,所以驱动有时候既要和硬件工程师沟通设备的运行方式,又要和应用工程师讨论调用方法。 一、无操作系统 在早期的软件中,程序不在复杂的情况下工作比较单一,控制着不太复杂的系统,例如食堂刷卡机、公交刷卡机、微波炉、冰箱等,功能都比较简单,并不需要多任务调度、文件系统、内存管理等复杂功能,单任务架构完全可以很好地支持它们的工作。可能一个无限循环加上按键、中断的处理就能完成功能设计。在这种情况下,应用和驱动分割的不是那么清楚,一般可能就是一个人完成了应用和驱动,每种芯片可能根据工作方式写了一组接口,比如A芯片读寄存器AreadReg,B芯片读寄存器BreadReg,应用需要根据芯片使用进行接口调用,在这种情况下

学习嵌入式开发——简介及搭建开发环境

旧城冷巷雨未停 提交于 2019-12-01 23:56:52
嵌入式技术的发展经历了单片机(SCM)、微控制器(MCU)、系统级芯片(SoC)3个阶段。 SCM——随着大规模集成电路的出现及其发展,计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机。 MCU——MCU的特征是满足各类嵌入式应用,根据对象系统要求扩展各种外围电路与接口电路,突显其对象的智能化控制能力。实际上,MCU、SCM之间的概念在日常工作中并不严格区分,一概以单片机称呼。随着能够运行更复杂软件(比如操作系统)的SoC的出现,“单片机”通常是指不运行操作系统、功能相对单一的嵌入式系统,但这不是绝对的。 SoC——SoC的特征是实现复杂系统功能的VLSI;采用超深亚微米工艺技术;使用一个以上嵌入式CPU/数字信号处理器(DSP);外部可以对芯片进行编程;主要采用第三方IP进行设计。 嵌入式处理器种类繁多,有ARM、MIPS、PPC等多种架构。但由于ARM处理器的文档丰富,各类嵌入式软件大多支持ARM处理器,使用ARM开发板来学习嵌入式开发是一个好选择。 基于ARM的处理器以其高速度、低功耗、价格低等优点得到非常广泛的应用,它可以应用于以下领域:为无线通信、消费电子、成像设备等产品提供可运行复杂操作系统的开放应用平台;在海量存储、汽车电子、工业控制和网络应用等领域提供实时嵌入式应用;安全系统,比如信用卡、SIM卡等。

嵌入式02 STM32 实验01 端口复用和重映射

此生再无相见时 提交于 2019-11-30 14:36:12
端口复用 :   STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个内置外设使用的时候,此时是不可以作为外部外设使用的,此时这个端口就叫做被复用了。   比如一个端口可以作为输入输出(使能端口时钟),同时它也可以作为串口使用(使能串口时钟),此时就说明这个端口被复用了    端口复用是重点,只要使用stm32就要用到外设,外设是与gpio引脚共用(复用)的,即某些引脚既可以单纯作为输入输出,又可以作为具有一定功能的内设(如ADC, 串口等等)的引脚端口。 实现方法:   1、使能端口时钟   2、使能复用功能的时钟   3、按照数据手册配置端口模式 1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //①IO时钟使能 2 3 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //②外设时钟使能 4 5 //③初始化IO为对应的模式 6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 7 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 8 GPIO_InitStructure

嵌入式开发之C基础学习笔记10--总结

人走茶凉 提交于 2019-11-29 13:38:36
嵌入式C总结 一.学习编程语言的一些建议 1)多动手 学习编程唯一方法就是编写调试程序。看再多的书,效果也比不上设计调试一个简单程序 2)养成良好的编程习惯 3)注意细节 4)了解开发环境 在学习编程语言的同时,也许要了解编程语言的开发,使用环境。如硬件平台(51,MSP430,PC),操作系统(nCOS,linux,DOS),集成开发环境(Keil C,Borland C)等 5)多看书,勤思考 二. 可移植性 我们建议类似下面的类型定义来替代 typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned int INT16U; typedef signed int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef float FP32; typedef double fp64; 在变量无需用到负数时,明确定义其为unsigned char或者是INT8U 在变量可能用到负数时,明确定义其位singed char或者是INT8S 三. 参考书籍和资料 1) 《C程序设计语言》 2) 《C Primer Plus中文版》 3)《C和指针》 4

作为一个新人,怎样学习嵌入式Linux ?(韦东山)

不羁的心 提交于 2019-11-28 01:48:02
作为一个新人,怎样学习嵌入式Linux ?(韦东山) 被问过太多次,特写这篇文章来回答一下 。 在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会) 。 C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序 、 输入数字求和什么的。 学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析 。 以前我是用 VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C 、 纯数学、纯逻辑的题目,不涉及界面这些东西, 很适合煅炼你的编程能力。 回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统 、 应用开发。 如果你是想做应用开发,那么你去把C语言、数据结构 、 JAVA什么的学好吧。嵌入式应用开发和PC上的 应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序 和PC上的程序开发没什么差别 。 另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子, 比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT 、 Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话

作为一个新人,怎样学习嵌入式Linux,(韦东山)

為{幸葍}努か 提交于 2019-11-28 01:47:45
还有一个比较好的文章,写的是具体的怎么按照韦东山的书和视频进行学习的。网址 https://www.zhihu.com/question/47881392 很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看。 在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。 C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。 学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用 VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西, 很适合煅炼你的编程能力。 回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。 如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。嵌入式应用开发和PC上的 应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序 和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子, 比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android

韦东山嵌入式Linux学习笔记05--存储管理器

只愿长相守 提交于 2019-11-28 01:47:34
SDRAM:    原理图如下: jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接的是BANK 6,所以他的起始地址是 0x30000000. SDRAM的基本寻址关系 SDRAM的存储结构逻辑如上图, SDRAM内部是一个存储阵列,阵列就如同表格一样,将数据"填进去".和表格的检索原理一样,先指定一个行,再指定一个列,两点确定一个坐标,就可以准确地找到所需要的 单元格,这就是SDRAM寻址的基本原理.这个单元被称为存储单元,这个表格(存储阵列)就是逻辑Bank(就是L-Bank).SDRAM一般含有四个L-Bank. 对SDRAM的访问可以分为如下几个步骤:   1.CPU发出的片选信号nSCS0有效,它选中SDRAM芯片.   2.SDRAM有四个L-Bank,需要两根地址线来选中其中的一个,根据开发板的设计, 选用了ADDR24和ADDR25作为L-Bank的选择信号.   3.对被选中的芯片进行统一的行/列(存储单元)寻址.     根据SDRAM芯片的列地址线数目设置CPU的相关寄存器后,CPU就会从32位的自动分出L-Bank选择信号, 行地址信号,列地址信号,然后发出行地址信号,列地址信号. L-Bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束.

图像识别VPU——易用的嵌入式AI支持深度学习平台介绍

久未见 提交于 2019-11-25 23:01:42
公司玩了大半年的嵌入式AI平台,现在产品进入量产模式,也接触了很多嵌入式方案,有了一些心得体会,本人不才,在这里介绍一下一款简单易用的嵌入式AI方案——Movidius Myriad 2 VPU(MA2450) 和 Myriad X VPU(MA2485)。这里本人重点提示:简单易用的嵌入式AI。现在好多家半导体厂商已经推出嵌入式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还牛),不过功耗太高,软件资源也不好搞到,海掏买美国D3公司DEMO板价格不菲,而且没技术支持开发周期过长,价格也不便宜。鉴于本公司的资源(小公司),我们选择了Intel的Movidius