单片机和嵌入式系统linux的区别转自21IC电子网

合集下载

单片机和linux嵌入式操作系统区别

单片机和linux嵌入式操作系统区别

单片机和linux嵌入式操作系统区别随着嵌入式行业硬件平台的性能增强,项目需求和功能日益复杂,ARM公司推出的 CORTEX-M3,更是让以往做单片机的工程师在芯片和技术选型面临两难选择,本专题将从芯片价格、整个系统的硬件软件设计及维护的成本等各个方面给您提供一个参考,并从技术角度分析单片机和带操作系统的系统的软件开发的异同点。

● 1.单片机与ARM等新处理器的价格比较● 2.带操作系统与不带操作系统的软件开发的区别● 2.1.驱动开发的区别● 2.2.应用程序开发的区别1. 单片机与ARM等新处理器的价格比较表1自己不熟悉的芯片和技术,最后的成本也可能更高。

2. 带操作系统与不带操作系统的软件开发的区别用通俗的话来说,一个处理芯片不运行操作系统,我们就把它称为单片机,而单片机编程就是写裸板程序,这个程序直接在板子上运行;相对的,另一种程序就是基于操作系统的程序,说得简单点就是,这种程序可以通过统一的接口调用“别人写好的代码”,在“别人的基础上”更快更方便地实现自己的功能。

2.1. 驱动开发的区别驱动开发的区别我总结有两点:能否借用、是否通用。

2.1.1 能否借用基于操作系统的软件资源非常丰富,你要写一个Linux设备驱动时,首先在网上找找,如果有直接拿来用;其次是找到类似的,在它的基础上进行修改;如果实在没有,就要研究设备手册,从零写起。

而不带操作系统的驱动开发,一开始就要深入了解设备手册,从零开始为它构造运行环境,实现各种函数以供应用程序使用。

举个例子,要驱动一块LCD,在单片机上的做法是:①首先要了解LCD的规格,弄清楚怎么设置各个寄存器,比如设置LCD的时钟、分辨率、象素②划出一块内存给LCD使用③编写一个函数,实现在指定坐标描点。

比如根据x、y坐标在这块内存里找到这个象素对应的小区域,填入数据。

基于操作系统时,我们首先是找到类似的驱动,弄清楚驱动结构,找到要修改的地方进行修改。

下面是单片机操作LCD的代码:①初始化:void Tft_Lcd_Init(int type){/** 设置LCD控制器的控制寄存器LCDCON1~5* 1. LCDCON1:* 设置VCLK的频率:VCLK(Hz) = HCLK/[(CLKVAL+1)x2]* 选择LCD类型: TFT LCD* 设置显示模式: 16BPP* 先禁止LCD信号输出* 2. LCDCON2/3/4:* 设置控制信号的时间参数* 设置分辨率,即行数及列数* 现在,可以根据公式计算出显示器的频率:* 当HCLK=100MHz时,* Rate =1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x* {(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x * {2x(CLKVAL+1)/(HCLK)}]* = 60Hz* 3. LCDCON5:* 设置显示模式为16BPP时的数据格式: 5:6:5* 设置HSYNC、VSYNC脉冲的极性(这需要参考具体LCD 的接口信号): 反转* 半字(2字节)交换使能*/LCDCON1 = (CLKVAL_TFT_320240<<8) | (LCDTYPE_TFT<<5) | \(BPPMODE_16BPP<<1) | (ENVID_DISABLE<<0);LCDCON2 = (VBPD_320240<<24) |(LINEVAL_TFT_320240<<14) | \(VFPD_320240<<6) |(VSPW_320240);LCDCON3 = (HBPD_320240<<19) | (HOZVAL_TFT_320240<<8) | (HFPD_320240);LCDCON4 = HSPW_320240;// LCDCON5 = (FORMAT8BPP_565<<11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | \// (HWSWP<<1);LCDCON5 = (FORMAT8BPP_565<<11) |(HSYNC_INV<<9) | (VSYNC_INV<<8) | (VDEN_INV << 6) | \(HWSWP<<0);/** 设置LCD控制器的地址寄存器LCDSADDR1~3* 帧内存与视口(view point)完全吻合,* 图像数据格式如下:* |----PAGEWIDTH----|* y/x 0 1 2 239* 0 rgb rgb rgb ... rgb* 1 rgb rgb rgb ... rgb* 1. LCDSADDR1:* 设置LCDBANK、LCDBASEU* 2. LCDSADDR2:* 设置LCDBASEL: 帧缓冲区的结束地址A[21:1]* 3. LCDSADDR3:* OFFSIZE等于0,PAGEWIDTH等于(240*2/2)*/LCDSADDR1 = ((LCDBUFFER>>22)<<21) |LOWER21BITS(LCDBUFFER>>1);LCDSADDR2 = LOWER21BITS((LCDBUFFER+ \(LINEVAL_TFT_320240+1 )*(HOZVAL_TFT_320240+1)*2)>>1);LCDSADDR3 = (0<<11) | (LCD_XSIZE_TFT_320240*2/2);/* 禁止临时调色板寄存器 */TPAL = 0;fb_base_addr = LCDBUFFER;bpp = 16;xsize = 320;ysize = 240;}②描点:/** 画点* 输入参数:* x、y : 象素坐标* color: 颜色值* 对于16BPP: color的格式为0xAARRGGBB (AA = 透明度),* 需要转换为5:6:5格式* 对于8BPP: color为调色板中的索引值,* 其颜色取决于调色板中的数值*/void PutPixel(UINT32 x, UINT32 y, UINT32 color){UINT8 red,green,blue;switch (bpp){case 16:{UINT16 *addr = (UINT16*)fb_base_addr + (y * xsize + x);red = (color >> 19) & 0x1f;green = (color >> 10) & 0x3f;blue = (color >> 3) & 0x1f;color = (red << 11) | (green << 5) | blue; // 格式5:6:5*addr = (UINT16) color;break;}case 8:{UINT8 *addr = (UINT8 *)fb_base_addr + (y * xsize + x);*addr = (UINT8) color;break;}default:break;}}下面是在Linux的LCD驱动里修改的地方(arch\arm\mach-s3c2440\mach-smdk2440.c):/* 320x240 */static struct s3c2410fb_mach_info smdk2440_lcd_cfg__initdata = {.regs = {.lcdcon1 = S3C2410_LCDCON1_TFT16BPP | \S3C2410_LCDCON1_TFT | \S3C2410_LCDCON1_CLKVAL(0x04),.lcdcon2 = S3C2410_LCDCON2_VBPD(1) | \S3C2410_LCDCON2_LINEVAL(239) | \ S3C2410_LCDCON2_VFPD(5) | \S3C2410_LCDCON2_VSPW(1),.lcdcon3 = S3C2410_LCDCON3_HBPD(36) | \S3C2410_LCDCON3_HOZVAL(319) | \S3C2410_LCDCON3_HFPD(19),.lcdcon4 = S3C2410_LCDCON4_MVAL(13) | \S3C2410_LCDCON4_HSPW(5),.lcdcon5 = S3C2410_LCDCON5_FRM565 |S3C2410_LCDCON5_INVVLINE |S3C2410_LCDCON5_INVV |S3C2410_LCDCON5_INVVDEN |S3C2410_LCDCON5_PWREN |S3C2410_LCDCON5_HWSWP,},.gpccon = 0xaaaa56aa,.gpccon_mask = 0xffffffff,.gpcup = 0xffffffff,.gpcup_mask = 0xffffffff,.gpdcon = 0xaaaaaaaa,.gpdcon_mask = 0xffffffff,.gpdup = 0xffffffff,.gpdup_mask = 0xffffffff,.fixed_syncs = 1,.type = S3C2410_LCDCON1_TFT,.width = 320,.height = 240,.xres = {.min = 320,.max = 320,.defval = 320,},.yres = {.max = 240,.min = 240,.defval = 240,},.bpp = {.min = 16,.max = 16,.defval = 16,},};这并不表示代码Linux的驱动程序就比单片机的驱动程序好写,怎么在几万个文件中找到要修改的代码,这也是需要艰苦的学习的。

嵌入式系统概述及与单片机区别说明

嵌入式系统概述及与单片机区别说明

嵌入式系统概述及与单片机区别说明嵌入式的全称是嵌入式系统,英文是Embeded system,是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电器工程师协会(U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。

从这里我们可以看出两点,第一,嵌入式并不是一个通用的设备。

第二,嵌入式必须和具体的应用相结合,设计上具有针对性。

所以可以看出来嵌入式是一个系统,嵌入式是需要把这个系统嵌入到设备中去,比如手机主板上的芯片就是嵌入到手机上的一个系统,整合了电脑的主板、CPU、硬盘、内存、网卡、显卡、电源的所有功能。

也就是说嵌入式系统主要是从芯片的使用时的组织形态来命名的,更通俗的解释就是只要是被嵌入到设备中的芯片都可以叫做嵌入式系统。

嵌入式系统这个定义太广泛了,所以我们平时所讲的嵌入式更多的是从狭义上讲的,狭义上讲,嵌入式是为了区别于单片机。

我们经常把芯片中不带MMU(memory management unit)从而不支持虚拟地址,只能跑裸机或RTOS(典型如ucos、华为LiteOS、RT-Thread、freertos等)的system叫单片机(典型如STM32、NXP LPC系列、新的NXP imxRT1052系列等),而把芯片自带MMU可以支持虚拟地址,能够跑Linux、Vxworks、WinCE、Android 这样的操作系统的system叫嵌入式。

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

嵌入式系统与单片机的区别

嵌入式系统与单片机的区别

嵌入式与单片机的异同及其发展趋势如果说微型机的出现,使计算机进入到现代计算机发展阶段,那么嵌入式计算机系统的诞生,则标志了计算机进入了通用计算机系统与嵌入式计算机系统两大分支并行发展时代,从而导致20世纪末,计算机的高速发展时期。

嵌入式计算机系统走上了一条独立发展的单芯片化道路。

它动员了原有的传统电子系统领域的厂家与专业人士,接过起源于计算机领域的嵌入式系统,承担起发展与普及嵌入式系统的历史任务,迅速地将传统的电子系统发展到智能化的现代电子系统时代。

按照历史性、本质性、普遍性要求,嵌入式系统定义为:“嵌入到对象体系中的专用计算机系统”。

“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。

对象系统则是指嵌入式系统所嵌入的宿主系统。

嵌入式系统的特点与定义不同,由定义中的三个基本要素衍生出来的。

不同的嵌入式系统其特点会有所差异。

与“嵌入性”的相关特点:由于是嵌入到对象系统中,必须满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。

与“专用性”的相关特点:软、硬件的裁剪性;满足对象要求的最小软、硬件配置等。

与“计算机系统”的相关特点:嵌入式系统必须是能满足对象系统控制要求的计算机系统。

与上两个特点相呼应,这样的计算机必须配置有与对象系统相适应的接口电路。

嵌入式系统按形态可分为设备级(工控机)、板级(单板、模块)、芯片级(MCU、SoC)。

嵌入式系统与对象系统密切相关,其主要技术发展方向是满足嵌入式应用要求,不断扩展对象系统要求的外围电路(如ADC、DAC、PWM、日历时钟、电源监测、程序运行监测电路等),形成满足对象系统要求的应用系统。

因此,嵌入式系统作为一个专用计算机系统(满足对象系统要求的计算机应用系统),要不断向计算机应用系统发展。

单片机开创了嵌入式系统独立发展道路.嵌入式系统虽然起源于微型计算机时代,然而,微型计算机的体积、价位、可靠性都无法满足广大对象系统的嵌入式应用要求,因此,嵌入式系统必须走独立发展道路——芯片化道路。

单片机与嵌入式的区别之学习感悟

单片机与嵌入式的区别之学习感悟

单片机与嵌入式的区别之学习感悟单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本人对这两个概念的理解和感悟。

首先明确概念,什么是单片机,单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

比如最经典的51系列单片机,外观只是一块一个拇指大小的长方体芯片,共40个引脚,里面包含了逻辑运算单元。

实际上也就是一个cpu。

一直记得上单片机的第一节课上,老师介绍单片机时,是这样说的:单片机姓单。

为什么要强调这一点呢?方便容易分不清的童鞋,以后每次想问这个问题的时候都想想这句话。

了解的人其实很容易分开它们,实际上他们也没有什么可比性。

首先,见过单片机的人,都知道,其实单片机只是一块芯片,里面有运算器、存储器等组成的一个具有逻辑、运算、通信等功能的单元。

说的再具体点,实际一个CPU。

DSP芯片也可以认为是一个单片机。

当然它们性能很强大,但是功能依然很单一,总之就是处理数据、逻辑。

其次,单片机可以完成很多的任务处理,但一般都是跟一定的外围设备进行协作,比如,添加LED灯,实现交通灯系统;添加液晶屏,实现动画播放等。

(当然很多同学都已经在大学期间自己完成过一个最小系统)最后,我们来总结一下单片机,单片机是完成运算、逻辑控制、通信等功能的单一模块。

相信我的上述讲解中,大家发现到了,单片机真的就是姓单(这个字读dan)。

针对嵌入式的概念是有些模糊定义的,一般情况下指的都是嵌入式系统。

正因为这个概念有些模糊,所以会导致很多人对该概念的模糊认识。

三种常用的嵌入式操作系统分析与比较

三种常用的嵌入式操作系统分析与比较

三种常用的嵌入式操作系统分析与比较摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。

1 嵌入式系统与嵌入式操作系统1.1 嵌入式系统嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。

嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统与具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。

1.2 嵌入式操作系统嵌入式操作系统EOS (Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制与国防系统领域。

EOS负责嵌入系统的全部软、硬件资源的分配、调度作,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。

目前,已推出一些应用比较成功的EOS产品系列。

随着Internet技术的发展、信息家电的普及应用及EOS的微型化与专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。

嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。

EOS是相对于一般操作系统而方的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下特点:①可装卸性。

开放性、可伸缩性的体系结构。

②强实时性。

EOS实时性一般较强,可用于各种设备控制当中。

③统一的接口。

提供各种设备驱动接口。

④操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。

ARM,单片机,STM32,嵌入式系统有什么关系

ARM,单片机,STM32,嵌入式系统有什么关系

ARM,单⽚机,STM32,嵌⼊式系统有什么关系1. 嵌⼊式系统:嵌⼊式系统(Embedded system),是⼀种“完全嵌⼊受控器件内部,为特定应⽤⽽设计的专⽤计算机系统”它是控制硬件的软件系统,核⼼是定制。

公司可根据不同的邻域,对软硬件进⾏深度定制,从⽽使性价⽐最⼤化。

增强产品竞争⼒。

如路由器,百度⾳箱,智能机器⼈,智能⼿环等。

嵌⼊式系统是相对,通⽤的电脑PC系统⽽⾔,可以认为除PC以外的,硬件上的软件系统都可叫做嵌⼊式系统。

嵌⼊系统分为有操作系统的如linux,可没操作系统的裸机编程如keil.有操作系统的⼀般⽤于复杂的嵌⼊式设备,如⼿机。

⽆操作系统的⼀般⽤于简单的嵌⼊式设备,也就是单⽚机。

2. ARMARM公司,主要设计ARM系列RISC处理器内核,授权ARM内核给⽣产和销售半导体的合作伙伴,ARM 公司不⽣产芯⽚。

我们常说的ARM芯⽚,指的是 ARM 公司授权给别的公司⽣产的芯⽚,如三星,华为等。

ARM芯⽚指的是嵌⼊式领域的CPU芯⽚。

除ARM外,嵌⼊式CPU芯⽚,还有MIPS POWERPC等。

现在国内最主流的嵌⼊式CPU芯⽚,就是ARM芯⽚。

3.单⽚机单⽚机是早期最简单的嵌⼊式MCU,微处理器芯⽚,主要⽤于低端简单的消费类电⼦产品。

如遥控器,电⼦玩具等。

单边机因⽐较简单,所以⼀般没有跑操作系统,称为裸机开发。

ARM芯⽚中的低端芯⽚,如M3 M4系列,就是单⽚机。

4.STM32stm32是⼀种32位的单⽚机,是单⽚机中⼀种。

常见单品机有STM32 51 树莓派等。

总结:嵌⼊式系统是除PC外的硬件产品,分嵌⼊式软件系统和嵌⼊式硬件系统。

简单的嵌⼊式硬件系统,我们称为单⽚机。

STM32是单⽚及中⼀种。

ARM芯⽚是嵌⼊式硬件系统中⼀类,分⾼中低端,低端部分的M3,M4等系列也是单⽚机。

单⽚机⼀般对应的软件系统没有操作系统,常⽤的是keil。

开发简单⽽ARM芯⽚中⼤多数是偏⾼端的,是对应的软件系统是有操作系统的,⼀般是linux系统。

单片机与嵌入式系统

单片机与嵌入式系统
单片机与嵌入式系统
汇报人:XX 20XX-01-26
contents
目录
• 绪论 • 单片机基本原理与结构 • 嵌入式系统基础 • 单片机与嵌入式系统开发工具 • 典型应用案例分析 • 实验项目指导
01
绪论
单片机与嵌入式系统概述
01
单片机定义
单片机是一种将中央处理器(CPU)、存储器、输入输出接口等集成在
制器、工业机器人等。
医疗设备
基于单片机和嵌入式系统的医 疗设备如心电图机、血压计等 ,具有高精度、高可靠性等特 点。
智能交通
单片机和嵌入式系统在智能交 通领域应用广泛,如交通信号 灯控制、车载电子设备等。
物联网
物联网领域大量采用单片机和 嵌入式系统技术,如智能家居
、智能城市等。
06
实验项目指导
实验一:单片机最小系统搭建与测试
C语言
可移植性好,适用于底层硬件操作,是单片 机编程的主流语言。
Python等高级语言
开发效率高,易于学习和使用,但执行效率 相对较低。
调试技巧与故障排除方法
使用断点
在关键代码处设置断点,方便单步执行和查看变量值。
观察寄存器值
通过查看寄存器值了解程序运行状态。
调试技巧与故障排除方法
• 使用串口通信:通过串口将调试信息输出到电脑 端进行分析。
的正确性。
实验四:综合项目设计与实践
01
02
03
04
确定项目需求
根据项目实际需求,确定单片 机系统的功能需求和性能指标

设计系统方案
根据项目需求,设计合理的单 片机系统方案,包括硬件电路
设计和软件程序设计。
实现系统功能
按照设计方案,搭建硬件电路 、编写软件程序,实现单片机

单片机和嵌入式的关系

单片机和嵌入式的关系

单片机和嵌入式的关系单片机与嵌入式的关系随着科技的不断发展,单片机和嵌入式技术在各个领域得到了广泛的应用。

单片机是一种集成电路芯片,具有微处理器、存储器和各种输入输出接口。

而嵌入式系统是由单片机或微处理器作为核心,集成了系统软件和应用软件的一种特殊计算机系统。

单片机和嵌入式技术密不可分,二者相辅相成。

单片机是嵌入式系统的基础。

单片机是一种集成电路芯片,内部集成了微处理器、存储器和各种输入输出接口,通过编程可以实现各种功能。

嵌入式系统是由单片机或微处理器作为核心,集成了系统软件和应用软件的一种特殊计算机系统。

单片机作为嵌入式系统的核心部件,负责控制和管理整个系统的运行。

因此,单片机是嵌入式系统的基础。

嵌入式系统是单片机应用的延伸。

嵌入式系统是一种特殊的计算机系统,其特点是体积小、功耗低、性能高、功能强大。

嵌入式系统广泛应用于家电、汽车、通信、医疗等各个领域。

而在嵌入式系统中,单片机扮演着至关重要的角色。

单片机通过与外部设备的连接,实现各种功能,如控制家电的开关、控制汽车的各种系统、实现通信设备的数据传输等。

因此,嵌入式系统是单片机应用的延伸。

单片机和嵌入式系统的关系可以用一个生态系统来类比。

单片机是嵌入式系统的基础,就像生态系统中的种子,是整个生态系统的起源和基础。

而嵌入式系统是单片机应用的延伸,就像生态系统中的各种生物,通过互相依存和相互作用,构成了一个完整的生态系统。

在具体的应用中,单片机和嵌入式系统的关系更加紧密。

单片机通过编程实现各种功能,而嵌入式系统则将这些功能整合起来,通过软件和硬件的配合,实现更加复杂的系统。

例如,智能家居系统中的各种传感器和执行器通过单片机控制,实现对家居设备的智能控制。

嵌入式系统通过整合各种功能模块,实现智能家居系统的整体控制和管理。

单片机和嵌入式系统的发展也相互推动。

单片机的不断进步和发展,为嵌入式系统提供了更加强大的计算能力和更多的接口功能。

而嵌入式系统的需求又促使单片机技术的不断创新和进步,以满足不断增长的市场需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机和嵌入式系统linux的区别随着嵌入式行业硬件平台的性能增强,项目需求和功能日益复杂,ARM公司推出的CORTEX-M3,更是让以往做单片机的工程师在芯片和技术选型面临两难选择,本专题将从芯片价格、整个系统的硬件软件设计及维护的成本等各个方面给您提供一个参考,并从技术角度分析单片机和带操作系统的系统的软件开发的异同点。

● 1.单片机与ARM等新处理器的价格比较● 2.带操作系统与不带操作系统的软件开发的区别● 2.1.驱动开发的区别● 2.2.应用程序开发的区别1. 单片机与ARM等新处理器的价格比较表1型号架构资源价格(元)AT89S51 8051 最高频率33MHz44KB Flash128B内部RAM32个可编程IO引脚两个16bit的计数器一个UART口SST89E564RD 8051 最高频率40MHz 35从表1里面各种芯片的资源,大概就可以猜知它们的应用场合。

51单片机通常被用来做一些比较简单的控制,比如采集信号、驱动一些开关。

AT89S51的Flash 只有4K,一个稍微复杂的程序就不止4K了。

SST89E564RD是一种扩展的51单片机,它的Flash达到64KB,可以外接最多64KB的SRAM。

在SST89E564RD上的程序可以写得更复杂一些,但是它对外的接口也比较少。

CORTEX-M3系列的处理器,对外接口极其丰富,这使得它的应用面更广,但是限于它的Flash、内存还是比较小,一般不在上面运行操作系统,它算是一个性能非常突出的单片机。

HI3510 是海思半导体公司的一款用于监控设备的芯片,一般上面运行Linux系统,通过摄像头采集数据、编码,然后通过网络传输。

另一端接收到数据之后,再解码。

在上面运行的程序非常复杂,有漂亮的图片界面、触摸屏控制、数据库等等。

对声音图像的编解码更是用到DSP核。

S3C2440 是一款通用的芯片,它与“高级单片机”STM32F103相比,多了存储控制器和NAND控制器──这使得可以外接更大的Flash、更大的内存;多了内存管理单元(MMU)──这使得它可以进行地址映身(虚拟地址、物理地址之间的映射)。

可以在S3C2440上运行Linux系统,运行更大更复杂的程序。

在具体工作中,怎么选择这些芯片呢?一句话:成本!进行任何产品的开发都要考虑性价比,一切应该从“成本”出发。

成本不仅包括芯片的价格,也包括整个系统的硬件、软件设计及维护的难易。

芯片价格可以在电子市场问到,也可以在.上找到有卖这种芯片的柜台,然后咨询。

基于不同的应用,处理器和其他外设的选择是要统一考虑的,如果要实现一个简单的U盘读写功能,那么可以选择带USB控制器的CORTEX-M3芯片,也可以选择8051外接一个USB控制器比如SL811,就看哪种方案成本更低。

进行芯片选型时,必须基于整个系统来考虑。

员工的偏好和知识结构也是一个很重要的因素,如果他对ATMEL的芯片比较熟,他就不会倾向于三星;如果他不会Linux等操作系统,那么选型时就不会有操作系统的概念。

选择自己不熟悉的芯片和技术,最后的成本也可能更高。

2. 带操作系统与不带操作系统的软件开发的区别用通俗的话来说,一个处理芯片不运行操作系统,我们就把它称为单片机,而单片机编程就是写裸板程序,这个程序直接在板子上运行;相对的,另一种程序就是基于操作系统的程序,说得简单点就是,这种程序可以通过统一的接口调用“别人写好的代码”,在“别人的基础上”更快更方便地实现自己的功能。

2.1. 驱动开发的区别驱动开发的区别我总结有两点:能否借用、是否通用。

2.1.1 能否借用基于操作系统的软件资源非常丰富,你要写一个Linux设备驱动时,首先在网上找找,如果有直接拿来用;其次是找到类似的,在它的基础上进行修改;如果实在没有,就要研究设备手册,从零写起。

而不带操作系统的驱动开发,一开始就要深入了解设备手册,从零开始为它构造运行环境,实现各种函数以供应用程序使用。

举个例子,要驱动一块LCD,在单片机上的做法是:①首先要了解LCD的规格,弄清楚怎么设置各个寄存器,比如设置LCD的时钟、分辨率、象素②划出一块内存给LCD使用③编写一个函数,实现在指定坐标描点。

比如根据x、y坐标在这块内存里找到这个象素对应的小区域,填入数据。

基于操作系统时,我们首先是找到类似的驱动,弄清楚驱动结构,找到要修改的地方进行修改。

下面是单片机操作LCD的代码:①初始化:void Tft_Lcd_Init(int type){/** 设置LCD控制器的控制寄存器LCDCON1~5* 1. LCDCON1:* 设置VCLK的频率:VCLK(Hz) = HCLK/[(CLKVAL+1)x2]* 选择LCD类型: TFT LCD* 设置显示模式: 16BPP* 先禁止LCD信号输出* 2. LCDCON2/3/4:* 设置控制信号的时间参数* 设置分辨率,即行数及列数* 现在,可以根据公式计算出显示器的频率:* 当HCLK=100MHz时,* Rate = 1/[{(VSPW+1)+(VBPD+1)+(LIINEVAL+1)+(VFPD+1)}x*{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}x*{2x(CLKVAL+1)/(HCLK)}]*= 60Hz* 3. LCDCON5:*设置显示模式为16BPP时的数据格式: 5:6:5*设置HSYNC、VSYNC脉冲的极性(这需要参考具体LCD的接口信号): 反转*半字(2字节)交换使能*/LCDCON1 = (CLKVAL_TFT_320240<<8) | (LCDTYPE_TFT<<5) | \(BPPMODE_16BPP<<1) | (ENVID_DISABLE<<0);LCDCON2 = (VBPD_320240<<24) |(LINEVAL_TFT_320240<<14) | \(VFPD_320240<<6) | (VSPW_320240);LCDCON3 = (HBPD_320240<<19) |(HOZVAL_TFT_320240<<8) | (HFPD_320240);LCDCON4 = HSPW_320240;//LCDCON5 = (FORMAT8BPP_565<<11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | \//(HWSWP<<1);LCDCON5 = (FORMAT8BPP_565<<11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | (VDEN_INV << 6) | \(HWSWP<<0);/** 设置LCD控制器的地址寄存器LCDSADDR1~3* 帧内存与视口(view point)完全吻合,* 图像数据格式如下:*|----PAGEWIDTH----|*y/x012239*0rgb rgb rgb ... rgb*1rgb rgb rgb ... rgb* 1. LCDSADDR1:*设置LCDBANK、LCDBASEU* 2. LCDSADDR2:*设置LCDBASEL: 帧缓冲区的结束地址A[21:1]* 3. LCDSADDR3:*OFFSIZE等于0,PAGEWIDTH等于(240*2/2)*/LCDSADDR1 = ((LCDBUFFER>>22)<<21) |LOWER21BITS(LCDBUFFER>>1);LCDSADDR2 = LOWER21BITS((LCDBUFFER+ \(LINEVAL_TFT_320 240+1)*(HOZVAL_TFT_320240+1)*2)>>1);LCDSADDR3 = (0<<11) | (LCD_XSIZE_TFT_320240*2/2);/* 禁止临时调色板寄存器*/TPAL = 0;fb_base_addr = LCDBUFFER;bpp = 16;xsize = 320;ysize = 240;}②描点:/** 画点* 输入参数:*x、y : 象素坐标*color: 颜色值*对于16BPP: color的格式为0xAARRGGBB (AA = 透明度),*需要转换为5:6:5格式*对于8BPP: color为调色板中的索引值,*其颜色取决于调色板中的数值*/void PutPixel(UINT32 x, UINT32 y, UINT32 color){UINT8 red,green,blue;switch (bpp){case 16:{UINT16 *addr = (UINT16*)fb_base_addr + (y * xsize + x);red = (color >> 19) & 0x1f;green = (color >> 10) & 0x3f;blue = (color >> 3) & 0x1f;color = (red << 11) | (green << 5) | blue; // 格式5:6:5*addr = (UINT16) color;break;}case 8:{UINT8 *addr = (UINT8 *)fb_base_addr + (y * xsize + x);*addr = (UINT8) color;break;}default:break;}}下面是在Linux的LCD驱动里修改的地方(arch\arm\mach-s3c2440\mach-smdk2440.c):/* 320x240 */static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {.regs = {.lcdcon1 = S3C2410_LCDCON1_TFT16BPP | \S3C2410_LCDCON1_TFT | \S3C2410_LCDCON1_CLKVAL(0x04), .lcdcon2 = S3C2410_LCDCON2_VBPD(1) | \S3C2410_LCDCON2_LINEVAL(239) | \S3C2410_LCDCON2_VFPD(5) | \S3C2410_LCDCON2_VSPW(1),.lcdcon3 = S3C2410_LCDCON3_HBPD(36) | \S3C2410_LCDCON3_HOZVAL(319) | \S3C2410_LCDCON3_HFPD(19), .lcdcon4 = S3C2410_LCDCON4_MVAL(13) | \S3C2410_LCDCON4_HSPW(5),.lcdcon5 = S3C2410_LCDCON5_FRM565 |S3C2410_LCDCON5_INVVLINE |S3C2410_LCDCON5_INVV |S3C2410_LCDCON5_INVVDEN |S3C2410_LCDCON5_PWREN |S3C2410_LCDCON5_HWSWP,},.gpccon = 0xaaaa56aa,.gpccon_mask = 0xffffffff,.gpcup = 0xffffffff,.gpcup_mask = 0xffffffff,.gpdcon = 0xaaaaaaaa,.gpdcon_mask = 0xffffffff,.gpdup = 0xffffffff,.gpdup_mask = 0xffffffff,.fixed_syncs = 1,.type = S3C2410_LCDCON1_TFT,.width = 320,.height = 240,.xres = {.min = 320,.max = 320,.defval = 320,},.yres = {.max = 240,.min = 240,.defval = 240,},.bpp = {.min = 16,.max = 16,.defval = 16,},};这并不表示代码Linux的驱动程序就比单片机的驱动程序好写,怎么在几万个文件中找到要修改的代码,这也是需要艰苦的学习的。

相关文档
最新文档