11嵌入式微处理器原理与应用绪论

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

山东工商学院信息与电子工程学院第一章绪论张守祥zhangsx@sdibt.edu.cn《嵌入式系统原理及应用》1.1嵌入式系统概述主要内容1.2嵌入式系统开发概述1.3嵌入式程序设计和分析第1章绪论嵌入式系统开发、研究和学习现状1嵌入式系统是当今电子信息产业最热门的研究学习领域之一,有着广大的学习研发用户群和潜力巨大的市场。不仅有微处理器芯片,还有用于学习和研发的各种配套的软件开发包。2嵌入式系统要和各个不同行业的应用相结合,要求更多的计算机以外的专业知识,其开发人员往往是各个应用领域的专家。因此开发工具的易学、易用、可靠、高效是基本要求。3目前底层系统和硬件平台已经相对比较成熟,实现各种功能的芯片应有尽有,巨大的市场需求给我们提供了学习和开发嵌入式技术的机遇。1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn4嵌入式系统应用1.1嵌入式系统概述第1章绪论5什么是嵌入式系统嵌入式系统是一种应用系统,它至少包含一个可编程的计算机(通常是某种形式的微控制器、微处理器或数字信号处理芯片),且使用该系统的人一般并未意识到该系统是基于计算机的。1.1嵌入式系统概述第1章绪论嵌入式系统运行模式SoC传感器执行器人机界面上位机嵌入式系统1.1嵌入式系统概述第1章绪论嵌入式系统开发模式1.1嵌入式系统概述第1章绪论嵌入式系统嵌入式系统开发模式仿真器宿主机SoC传感器执行器人机界面1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn9简单的嵌入式应用简单的嵌入式应用不需要使用操作系统当系统上电后,main函数将被调用,首先初始化,然后进入循环直到系统停电或者出现重大错误。超级循环voidmain(void){X_init();//初始化While(1)X();//实现的功能}1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn10简单的嵌入式应用开发过程简单的嵌入式应用的开发过程在个人电脑上配置交叉开发环境安装开发板(评估板)和仿真器编写程序,交叉编译调试软、硬件利用仿真器将软件烧到开发好的系统中进行现场运行测试1.1嵌入式系统概述第1章绪论11复杂的嵌入式系统应用开发1.确定需求2.根据需求选择合适的硬件硬实时/软实时系统?什么处理器?哪些辅助硬件?3.选择嵌入式操作系统4.选择开发平台编程语言、软件开发工具实际的开发平台包括硬件开发平台、操作系统、编程语言以及软件开发工具1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn125.编写并优化代码一般在主机系统上进行开发和优化工作。代码优化主要在软件执行速度和软件尺寸之间取得平衡,满足嵌入式系统对速度和存储空间的限制。在嵌入式开发中,一般需要避免使用大型的软件库,避免使用递归编程,减少堆栈的消耗。6.在模拟器或者开发板上调试复杂的嵌入式系统应用开发1.1嵌入式系统概述第1章绪论开发模式首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。宿主机(Host)宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如Windows和Linux),而且还有各种各样优秀的开发工具(如WindRiver的Tornado、Microsoft的EmbeddedVisualC++等),能够大大提高嵌入式应用软件的开发速度和效率。目标机(Target)它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但软硬件资源通常都比较有限。嵌入式系统交叉开发特点1.1嵌入式系统概述第1章绪论一般包括交叉编译器、交叉调试器和系统仿真器•其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,•而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。嵌入式系统交叉开发工具1.1嵌入式系统概述第1章绪论嵌入式系统交叉开发过程1.首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件。2.然后通过JTAG、串口或以太网络连接将交叉编译生成的目标代码传输并装载到目标机上。3.并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试。4.最后目标机在特定环境下脱离宿主机单独运行。1.1嵌入式系统概述第1章绪论★加快软件开发进度★降低硬件调试成本★降低学习入门门槛软件仿真技术——软件仿真的优点1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn17嵌入式系统的实时性嵌入式系统一般具有实时的特点,所谓实时系统是指在这种系统中:一个优先级高的任务能够得到立即的、没有延迟的服务,不需要等待任何其他优先级低的任务,一旦它得到CPU的使用权,将一直执行直到工作结束或者出现更高级别的进程。为了满足这样的需求,嵌入式操作系统必须具有高效的中断处理能力和高效的IO能力。1.1嵌入式系统概述第1章绪论CPUCentralProcessingUnit中央处理器DSPDigitalSignalProcessor数字信号处理器MCUMicroControlUnit微控制器MPUMicroProcessorUnit微处理器CPU、MCU、MPU、DSP的区别1.1嵌入式系统概述第1章绪论MCU适合不同信息源的多种数据的处理诊断和运算,侧重于控制,由于对体积、功耗、成本、开发难度等因素考虑一般集成了片上外围器件,速度不是很高。DSP运算能力强,擅长很多的重复数据运算。MPU是高度集成通用结构的处理器。CPU、MCU、MPU、DSP的区别1.1嵌入式系统概述第1章绪论型号架构资源价格(¥元)AT89S518051最高频率33MHz4KBFlash128B内部RAM32个可编程IO引脚两个16bit的计数器一个UART口4STM32F103ARMCortex-M3最高频率72MHz64KBFlash20KBSRAM80个可编程IO引脚2个12bit的ADC7通道DMA控制器标准调试口(SWD和JTAG)7个定时器USB接口2个I2C接口3个UART2个SPI接口20S3C2410ARM9最高工作频率200MHzSDRAM控制器LCD控制器4通道DMA控制器3个UART2个SPI1个I2C接口IIS音频接口SDHOST接口2个USB接口8个10bitADC摄像头接口45OMAP3530ARMCortex-A8+DSP最高工作频率1G240MHz视频处理单元支持多种协议的实时编解码图形处理单元视音频接口以太网接口DDR控制器USBUART、IrDA、I2C、SPI150单片机与嵌入式系统的价格比较1.1嵌入式系统概述第1章绪论zhangsx@sdibt.edu.cn21带操作系统与不带操作系统的软件开发的区别1.一个处理芯片不运行操作系统,称为裸板程序,这个程序直接在板子上运行;2.基于操作系统的程序,在“别人的基础上”更快更方便地实现自己的功能。1.1嵌入式系统概述第1章绪论22voidled_init(void){GPBCON=GPB5_out;//将LED对应的GPB5引脚设为输出}voidled_on(void){GPBDAT&=~(15);}voidled_off(void){GPBDAT|=(15);}单片机LED驱动程序1.1嵌入式系统概述第1章绪论23#defineDEVICE_NAMEleds/*加载模式后,执行”cat/proc/devices”命令看到的设备名称*/#defineLED_MAJOR231//主设备号/*应用程序执行ioctl(fd,cmd,arg)时的第2个参数*/#defineIOCTL_LED_ON0#defineIOCTL_LED_OFF1//用来指定LED所用的GPIO引脚staticunsignedlongled_table[]={S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,};//用来指定GPIO引脚的功能:输出staticunsignedintled_cfg_table[]={S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,};LinuxLED驱动程序1.1嵌入式系统概述第1章绪论24LinuxLED驱动程序1.1嵌入式系统概述第1章绪论/*应用程序对设备文件/dev/leds执行open(...)时,就会调用s3c24xx_leds_open函数*/staticints3c24xx_leds_open(structinode*inode,structfile*file){inti;//设置GPIO引脚的功能:本驱动中LED所涉及的GPIO引脚设为输出功能for(i=0;i5;i++)s3c2410_gpio_cfgpin(led_table[i],led_cfg_table[i]);return0;}25LinuxLED驱动程序//应用程序对设备文件/dev/leds执行ioclt(...)时,就会调用s3c24xx_leds_ioctl函数staticints3c24xx_leds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){if(arg4)return-EINVAL;switch(cmd){caseIOCTL_LED_ON://设置指定引脚的输出电平为0s3c2410_gpio_setpin(led_table[arg],0);return0;caseIOCTL_LED_OFF://设置指定引脚的输出电平为1s3c2410_gpio_setpin(led_table[arg],1);return0;default:return-EINVAL;}}1.1嵌入式系统概述第1章绪论26LinuxLED驱动程序/*这个结构是字符设备驱动程序的核心,当应用程序操作设备文件时所调用的open、read、write等函数,最终会调用这个结构中指定的对应函数*/staticstructfile_operationss3c24xx_leds_fops={.owner=THIS_MODULE,/*这是一个宏,推向编译模块时自动创建的__this_module变量*/.open=s3c24xx_leds_open,.ioctl=s3c24xx_leds_ioctl,};1.1嵌入式系统概述第1章绪论27LinuxLED驱动程序//执行insmod命令时就会调用这个函数staticint__inits3c24xx_leds_init(void){intret;/*注册字符设备*参数为主设备号、设备名字、file_operations结构;*这样,主设备号就和具体的file_operations结构联系起来了,*操作主设备为LED_MAJOR的设备文件时,就会调用s3c24xx_leds_fops中的相关成员函数*LED_MAJOR可以设为0,表示由内核自动分配主设备号*/ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&s3c24xx_leds_fops);if(ret0){printk(DEVICE_NAMEcan'tregistermajornumber\n);returnret;}printk(DEVICE_NAMEinitialized\n);return0;}1.1嵌入式系统概述第1章绪论28LinuxLED驱动程序//执行rmmod命令时就会调用这个函数staticvoid__exits3c24xx_leds_exit(void){/*卸载驱动程序*/unregister_chrdev(LED_MAJOR,DEVICE_NAME);}/*这两行指定驱动程序的初始化函数和卸载函数*/module_init(s3c24xx_leds_init

1 / 55
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功