基于嵌入式系统的游戏程序设计
基于STM32的嵌入式系统应用设计》课程实验报告

《基于STM32的嵌入式系统应用设计》课程实验报告班级:电信工程15-01班学号:**********姓名:指导老师:成绩实验一流水灯和按键实验一、目的与任务目的:掌握STM32开发环境,掌握从无到有的构建工程,学会GPIO基本操作。
任务:编写代码下载到目标板,观察效果。
如未达到理想效果,检查和修改代码,再次编译下载直到成功。
记录实验过程,完成实验报告。
二、内容、要求与安排方式1、实验内容与要求:1)熟悉MDK KEIL开发环境,构建基于HAL库的工程。
2)编写代码实现流水灯工程,按键后能改变流水灯速度。
3)通过ISP下载代码到实验板,查看运行结果。
4)使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
2、实验安排方式:采用1人1组,上机编程在STM32实验板上实验。
三、实验设备1、所用设备:PC计算机(宿主机)、STM32实验板、JLINK。
2.消耗性器材:无。
四、实验过程五、程序清单#include "system.h"#include "SysTick.h"#include "led.h"#include "key.h"int main(){u8 key;SysTick_Init(72);LED_Init();KEY_Init();while(1){static u8 j=1000;key=KEY_Scan(0); //ɨÃè°´¼üswitch(key){case KEY_UP: j=j-100;break; //°´ÏÂK_UP°´¼üµãÁÁD2ָʾµÆcase KEY_DOWN: j=j+100;break; //°´ÏÂK_DOWN°´¼üϨÃðD2ָʾµÆ}switch(j){case(0):j=2000;break;case(2000):j=100;break;}led1=0; led2=1;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //1ÁÁdelay_ms(j);led1=1; led2=0;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //2ÁÁdelay_ms(j);led1=1; led2=1;led3=0; led4=1; led5=1; led6=1;led7=1;led8=1; //3ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=0; led5=1; led6=1;led7=1;led8=1; //4ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=0; led6=1;led7=1;led8=1; //5ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=0;led7=1;led8=1; //6ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=1;led7=0;led8=1; //7ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=1;led7=1;led8=0; //8ÁÁdelay_ms(j);}}六、实验体会实践检验真理,只有在不断的实践中,我们才能将知识掌握的更牢固,将理论转化为实践,也只有通过实践,才能及时的纠正自己的理论偏差。
ARM开发教程之ARM体系的嵌入式系统BSP的程序设计

ARM开发教程之ARM体系的嵌入式系统BSP的程序设计简介:ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。
BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC 机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。
BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。
另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。
所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。
本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。
本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。
1 ARM开发教程之初始化过程尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。
嵌入式系统的启动流程如图1所示。
1.1 设置入口指针启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。
一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。
入口点代码如下:ENTRY(_start);开始1.2 ARM开发教程之设置异常中断向量表ARM要求中断向量表必须放置在从0开始、连续8×4字节的空间内。
各异常中断向量地址以及中断的算是优先级如表1:表1 各异常中断的中断向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模式优先级(6最低)0x0 复位特权模式(SVC)10x4 未定义中断未定义指令中止模式(Undef) 60x8 软件中断(SWI)特权模式(SVC)60x0c 指令预取中止中止模式50x10 数据访问中止中止模式20x14 保留未使用未使用0x18 外部中断请求(IRQ)外部中断(IRQ)模式40x1c 快速中断请求(FIQ)快速中断(FIQ)模式 3每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型的地址值。
基于嵌入式实时操作系统的程序设计

基于嵌入式实时操作系统的程序设计引言嵌入式系统在现代科技中扮演着重要的角色,而嵌入式实时操作系统(RTOS)则是嵌入式系统中一个关键的组成部分。
嵌入式实时操作系统的程序设计对于确保系统稳定性和可靠性至关重要。
本文将就嵌入式实时操作系统的程序设计进行全面、详细、完整且深入的探讨。
二级标题1:嵌入式实时操作系统概述嵌入式实时操作系统是一种特殊类型的操作系统,其目标是实时响应和控制嵌入式系统的任务。
它通常针对资源有限的系统设计,如传感器、手机和汽车等。
嵌入式实时操作系统需要满足以下三个关键特性: - 实时性:嵌入式实时操作系统必须能够满足严格的时间要求,并保证任务在规定的时间内完成。
- 可靠性:嵌入式实时操作系统必须具备高度的可靠性,能够应对各种异常情况并保持系统稳定。
- 高效性:嵌入式实时操作系统需要高效地利用系统资源,以最大程度地提高系统性能。
二级标题2:嵌入式实时操作系统的任务调度嵌入式实时操作系统通过任务调度来管理系统中的各个任务。
任务调度的目标是按照一定的策略和优先级来合理地分配系统资源和控制任务执行。
下面是常用的任务调度算法: 1. 先来先服务(FCFS)调度算法:按照任务到达的顺序进行调度,适用于任务长度相同时。
2. 最短作业优先(SJF)调度算法:按照任务所需的执行时间进行调度,适用于任务执行时间差异较大的情况。
3. 优先级调度算法:根据任务的优先级来决定任务的执行顺序,适用于对任务执行顺序有较高要求的情况。
4. 最短剩余时间优先(SRTF)调度算法:在SJF算法的基础上,根据任务剩余执行时间来进行调度,适用于任务的执行时间可以动态变化的情况。
二级标题3:嵌入式实时操作系统的任务通信在嵌入式系统中,各个任务之间需要进行通信,以便进行数据传输和协调工作。
以下是常用的任务通信机制: 1. 信号量:信号量用于控制对共享资源的访问,通过对信号量进行P(申请资源)和V(释放资源)操作来实现任务的同步和互斥。
STM32课程设计贪吃蛇

STM32大作业报告学生姓名:学号:所在院系:光电信息与计算机工程学院专业班级:授课教师:完成时间:2016年前言随着科学技术的不断进步,嵌入式近些年来逐渐兴起,其领域比较新,发展非常迅速,由于它属于新兴领域,接触的人并不是很多,但是嵌入式在各种电子设备上的应用越来越越广泛,并且各种电子设备也在朝着嵌入式微系统,智能化的方向前进。
STM32系列是基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。
作为21世纪的人才,为了与社会实际需要相衔接,提高我们的学习兴趣,利用STM32系列单片机进行了一次嵌入式系统设计。
摘要在本次作业中采用STM32系列中的STM32F103RCT6微控制器芯片,采用ALIENTEK战舰STM32开发板,使用MiniSTM32开发板上的LCD 接口,来点亮TFTLCD,实现触摸屏功能。
一、课程设计任务要求本次的课程设计目的是实现一个经典的贪吃蛇游戏,整个游戏实现功能分别为:1、初始化程序。
2、随机红点、左转、右转、判断边框。
二、系统硬件设计硬件设计原理图根据此硬件设计图再结合软件设计就能做出此游戏。
三、系统软件实现此次的课程设计在于开发个贪吃蛇游戏,其流程图如下图所示。
程序流程图为方便介绍,此软件实现只给出主要程序部分:1、本例程提供了硬件平台的初始化GPIO是常规输入/输出端口,STM32F103RCT6有PA、PB、PC、PD、PE 共5个16位的GPIO。
STM32的GPIO都可编程,具有很多复用功能。
GPIO 可以配置为很多总模式,这些模式有:输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。
通过对GPIO寄存器编程,可以设置每个端口的工作模式。
24C02 EEPROM是开发板板载的2Kbit(256 个字节)EEPROM ,型号为:24C02,用于掉电数据保存。
因为STM32 内部没有EEPROM,所开发板外扩了24C02,用于存储重要数据,用来做IIC 实验,该芯片直接挂在STM32 的IO 口上。
嵌入式系统stm32课程设计

嵌入式系统stm32课程设计一、课程目标知识目标:1. 理解嵌入式系统基本概念,掌握STM32的硬件结构和编程环境。
2. 学会使用C语言进行STM32程序设计,理解中断、定时器等基本原理和应用。
3. 掌握嵌入式系统外围设备的使用,如LED、按键、串口等,并能进行简单的系统集成。
技能目标:1. 能够运用所学知识,设计并实现具有实际功能的嵌入式系统项目。
2. 培养学生的动手实践能力,提高问题解决能力和程序调试技巧。
3. 增强团队协作能力,通过项目实践,学会分工合作和沟通交流。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发学习热情,形成自主学习的习惯。
2. 树立正确的工程观念,注重实际应用,关注技术发展,提高创新意识。
3. 培养学生的责任心,使其认识到所学知识对社会和国家的贡献,树立远大理想。
课程性质:本课程为实践性较强的课程,结合理论知识和实际操作,培养学生的嵌入式系统设计能力。
学生特点:学生具备一定的电子技术基础和编程能力,对嵌入式系统有一定了解,但缺乏实际项目经验。
教学要求:结合课程特点和学生学习情况,注重理论与实践相结合,通过项目驱动,引导学生主动探究,提高解决问题的能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 嵌入式系统概述- 嵌入式系统的定义、特点与应用领域- STM32微控制器简介2. STM32硬件结构与编程环境- STM32的内部结构、外设接口- Keil MDK集成开发环境的使用3. STM32编程基础- C语言基础回顾- STM32程序框架与编译过程- 中断、定时器等基本原理及应用4. 外围设备使用- LED、按键、串口等外设的原理与编程- ADC、PWM等模拟外设的使用5. 嵌入式系统项目实践- 设计并实现具有实际功能的嵌入式系统项目- 项目分析与需求分析- 硬件电路设计与软件编程6. 课程总结与拓展- 课程知识梳理与巩固- 探讨嵌入式系统发展趋势与前沿技术教学内容安排与进度:第1-2周:嵌入式系统概述、STM32硬件结构与编程环境第3-4周:STM32编程基础第5-6周:外围设备使用第7-8周:嵌入式系统项目实践第9-10周:课程总结与拓展教学内容与教材关联性:本教学内容紧密结合教材,按照教材章节顺序进行教学,确保学生能够系统地掌握嵌入式系统STM32的知识点和技能。
嵌入式系统-第4章 嵌入式程序设计基础

4.1.1 通用伪指令
表达式可以为程序中的标号或数学表达式,基址寄存器为可 选项,当基址寄存器选项不存在时,表达式的值即为内存 表的首地址,当该选项存在时,内存表的首地址为表达式 的值与基址寄存器的和。 注意MAP和FIELD伪指令仅用于定义数据结构,并不实际 分配存储单元。
26
4.1.1 通用伪指令 指令示例: MAP 0x10,R1 ;定义内存表首地址的值为[R1]+0x10。 DATA1 FIELD 4 ;为数据DATA1定义4字节长度 DATA2 FIELD 16 ;为数据DATA2定义16字节长度
17
4.1.1 通用伪指令
(2)DCW(或DCWU) DCW= Data Define of Word 语法格式:
标号 DCW(或DCWU)表达式 DCW(或DCWU)伪指令是为分配半字内存单元, 其中,表达式可以为程序标号或数字表达式。 伪指令DCW用于为半字分配一段半字对准的内存单元, 并用指定的数据初始化;伪指令DCWU用于为半字分配一 段可以非半字对准的内存单元,并用指定的数据初始化。
变量名 SETA(SETL或SETS)表达式 SETA、SETL、SETS是变量赋值伪指令,用于给一个已经定义的全 局变量或局部变量赋值。 其中: SETA用于给一个数字变量赋值; SETL用于给一个逻辑变量赋值; SETS用于给一个字符串变量赋值;
12
4.1.1 通用伪指令
指令示例:
GBLA EXAMP1 ;先声明一个全局数字变量EXAMP1
4
4.1 伪指令
在ARM的汇编程序中,我们把伪指令分为三部分介绍: 通用伪指令 与ARM指令相关的伪指令 与Thumb指令相关的伪指令
5
4.1.1 通用伪指令
实验指导书基于STM32的嵌入式系统原理与设计.docx
实验指导书(实验)课程名称:基于STM32的嵌入式系统设计实验实验一电路板焊接与调试-•实验简介完成实验板上部分兀件的焊接,焊接完成后进行基本测试。
实验目的及原理掌握STM32F103实验板的基本原理,掌握焊接电路板的基本技能,掌握下载测试程序的基本方法。
原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》MCU和周边电路如图为MCU及其周边电路。
图1 MCU及其周边电路1. 唤醒电路,高有效,不按时接220K 电阻下拉。
2. 复位电路,低有效。
带RC 启动复位。
3. 配置启动,用跳线选择B00T1和BOOTO 接高电平或低电平。
4. 高速晶振电路,采用8M 晶振,在STM32内部倍频为72M 。
5. AD 参考电路,采用LC 滤波,可跳线选择直接接VCC 或通过TL431稳压电路产生的参考电压。
6. 后备电池。
可通过跳线选择直接接VCC 或电池。
7. AD 输入,可选择使用RC 滤波,共8路。
&低速晶振电路,选用32. 768kHz 晶振,为产生准确的串口波特率。
USB 转串口电路USB 转串口电路可以方便没有串口的笔记本电脑用户通过USB 接口下载代码到FLASH 中,及进行RS232串行通信。
USB 转串口芯片是CP2102,该芯片稳定性较好。
当其正常工作的时候,灯LED6亮。
该 芯片DP/D+引脚连MINI USB 接口的脚3, DM/D-引脚连MINI USB 接口的脚2,为一对USB 输入输出线。
TXD 与 RXD 引脚接 MCU 的 PA10 (USART1_RX)和 PA9 (USART1_TX)。
I2C 接口电路Jusbm USB图2 USB 转串口接口电路14NCNCNCNCNCNCNCONS.LO(一XE- (一ON 二 N (INHdsfls 二N 二一二乂ON本书选择的EEPROM 是AT24C02是256字节的电可擦出PROM,通过I2C 协议与STM32 进行通信,连接十分简单。
嵌入式实验报告_俄罗斯方块实验报告
嵌⼊式实验报告_俄罗斯⽅块实验报告俄罗斯⽅块实验报告班级电⼦班学号******* 姓名**实验名称俄罗斯⽅块⼀、设计⽬标和要求:1、实现多个模块的驱动:液晶、按键、定时器等。
综合多个模块的协调运⾏。
2、设计游戏运⾏的⾏为仲裁引擎,合理设计前景和背景的相对关系。
3、通过ucos2操作系统,合理实现多任务的协调运⾏。
4、完成考核要求:①在液晶上画出欢迎界⾯。
②开启定时器,定时刷新页⾯。
③俄罗斯⽅块满⾏时消⾏,并计数。
④当⽅块叠加到页⾯顶时,结束游戏。
⼆、实验环境:硬件:PC机、嵌⼊式系统实验箱,串⼝线。
软件: windows,编译器三、设计思路和实现步骤、内容:1、设计思路:俄罗斯⽅块游戏软件基于ARM的Windowns CE平台进⾏写操作,利⽤PXA270RP实验箱模拟仿真器,利⽤evc编程来具体实现,在实验箱的触摸屏上进⾏游戏。
⾸先对俄罗斯⽅块的设计和功能需求进⾏详细的了解和分析,如下图1是俄罗斯⽅块总体设计功能图。
开始结束设计消⾏设计转换设计俄罗斯⽅块游戏设计游戏计积分等级设计系统帮助说明操作设计界⾯分布设计⽅块设计游戏帮助系统说明图1 俄罗斯⽅块总体设计功能图(1)游戏界⾯设计:分别是游戏显⽰界⾯,下⼀个⽅块下落界⾯,积分和等级记录界⾯,开始结束暂停按钮,⽅块形态位置变化操作按钮。
(2)操作设计:①游戏开始结束暂停操作设计:在游戏界⾯上有开始、结束、暂停按钮,⽤⿏标操作,选择是否要进⼊游戏。
②⽅块形状转换操作:良好的⽅块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、⽥字形、7字形、反7形、T 字型),各个⽅块要能实现它的变形,统⼀设为逆时针变形。
如下图2所⽰为俄罗斯⽅块定位点设置表。
当⽅块下落时,可通过键盘⽅向键(上、下、左、右键)对该⽅块进⾏向上(变形),向下(加速)、向左、向右移动。
俄罗斯⽅块定位点设置,以⿊⾊点为(0,0)坐标状态类型 1 2 3 44567图2 俄罗斯⽅块⽅块形状图③消⾏操作设计:当⽅块落到游戏界⾯最底部并且铺满最后⼀⾏,就能消去所在这⼀⾏,积分增加100分,⽽积分增加到⼀定数值时,玩家等级增加。
毕业设计(论文)-基于单片机的俄罗斯方块游戏[管理资料]
基于单片机实现的俄罗斯方块游戏MCU based Russia block game摘要本设计是通过AT89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus来进行仿真。
本设计要实现的基本功能是:应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。
单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。
为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。
程序则要求对外部电路了解的情况下完成自己所需要的功能,并将所要完成的功能用编程语言的形式来实现。
然后通过Protues仿真实现通过外部按键来控制各种不同图形的方块来玩游戏,并且实现记录分数和通过过关数来改变方块下降的速度。
最后将程序下载至AT89S52单片机并进行实际运行,实际运行表明,本设计可以实现基本的游戏功能,达到预期的目的。
关键词:AT89S52;C语言;Proteus仿真;LCD液晶ABSTRACTThis design is achieved through the AT89S52 microcontroller Tetris game design, programming using C language, and carried out by proteus simulation.The design to achieve the basic functions are: application buttons to control the box, change and movement; eliminate line and scoring; eliminate multi-line incentive points, the game ends when the box filled with basic functions such as Tetris. MCU in the application of handheld entertainment devices have great potential, it can be brought to a new stage. In order to solve the external circuit, we must fully understand the liquid crystal display method and external interface MCU features, and the need to address the logical relationship; also understand that the principle of LCD liquid crystal control to a data port and control port to achieve the above the LCD screen display.Program requires knowledge of the external circuit where they need to complete the function and the function to be completed in the form of programming language used to achieve. Simulation then protues buttons to control an external box to play a variety of graphical games, and achieve record number of scores and the relationship had to change the speed of the module down. Finally, the program downloaded to AT89S52 MCU and the actual operation, the actual operation indicate that this design can achieve basic game functions, to achieve the desired purpose.Key Words:AT89S52; C language; Proteus simulation; LCD liquid cryst目录1绪论 (1)课题背景 (1)电子游戏及其分类 (1)电子游戏发展现状 (2)电子游戏国外发展现状 (2)电子游戏国内发展现状 (3)2整体设计方案 (5)系统的核心部分单片机 (5)单片机的选择 (5)AT89S52引脚功能描述 (7)晶振特性 (9)液晶显示模块 (10)液晶显示控制驱动器HD61202的特点 (10)液晶显示控制驱动器HD61202的引脚功能 (10)液晶显示控制驱动器HD61202的指令系统 (11)HD61202的软件设计 (12)JM12864J的电路结构特点 (15)JM12864J的应用 (15)键盘电路 (17)3系统程序的设计 (17)俄罗斯方块驱动流程图 (17)俄罗斯方块所有绘图工作流程图 (18)俄罗斯方块中按下键的流程图 (19)俄罗斯方块所有绘图工作流程图 (20)4系统仿真 (22)PROTUES软件介绍 (22)Keil软件介绍 (22)俄罗斯方块系统PROTUES仿真 (24)5实物的制作与调试 (26)电路的焊接 (26)系统性能测试与功能说明 (27)结论 (28)参考文献 (29)附录1:C语言程序 (29)附录2:电路原理图 (59)附录3:英文资料及中文翻译 (60)致谢 (76)1绪论计算机系统的发展已明显地朝三个方向发展;这三个方向就是:巨型化,单片化,网络化。
基于FPGA的嵌入式系统的设计与实现
2、输入模块设计
输入模块主要包括乐曲信息的采集和传输。本系统中,乐曲信息采用MIDI格 式进行存储和传输。用户可以通过MIDI键盘或者其他MIDI设备将乐曲信息输入到 系统中。
3、处理模块设计
处理模块主要由FPGA完成,其主要任务是将输入的乐曲信息转换为硬件可以 识别的控制信号。
具体来说,FPGA首先需要将MIDI格式的乐曲信息解析为数字信号,然后通过 内部算法进行处理,生成控制音频硬件的信号。本系统中,FPGA主要通过VHDL编 程语言来实现上述功能。
基于FPGA的嵌入式系统的设计与实 现
目录
01 基于FPGA的嵌入式系 统设计与实现
02 参考内容
基于FPGA的嵌入式系统设计与 实现
随着科技的不断发展,嵌入式系统在各个领域的应用越来越广泛。FPGA(现 场可编程门阵列)作为一种灵活、高效的硬件设计技术,为嵌入式系统设计提供 了新的解决方案。本次演示将介绍基于FPGA的嵌入式系统的设计与实现。
经过以上步骤,我们可以得出基于FPGA的嵌入式系统的设计与实现具有以下 优点:首先,FPGA的可编程性使得硬件设计更加灵活,可以根据不同需求进行定 制和优化;其次,FPGA的高速并行处理能力可以提高整个嵌入式系统的运算效率 和性能;再次,使用FPGA可以降低系统功耗和成本,同时减小了系统的体积和重 量;最后,FPGA的可重构特性使得系统升级和维护更加简便。
1、硬件设计
系统的硬件部分主要包括DSP、FPGA、RAM、Flash等。其中,DSP用于实现 信号处理算法,接收GPS和惯性导航等传感器数据,计算出位置、速度等信息; FPGA用于实现硬件接口、数据传输和控制逻辑,连接各个硬件模块,保证系统的 正常运行;RAM用于存储运行时的数据和程序;Flash用于存储固件程序和常量数 据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于嵌入式系统的游戏程序设计0引言随着近年来计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流。
嵌入式系统被定义为以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式系统是面向用户、面向产品、面向应用。
而广泛用于制造工业、过程控制、通信、仪器、仪表等,消费类产品,如果独立于应用自行发展,则会失去市场。
嵌入式处理器在功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间的竞争热点。
嵌入式处理器的应用软件是实现嵌入式系统功能的关键。
软件要求固化存储,软件代码要求高质量、高可靠性。
1开发平台一个完整的嵌人式系统结构如图1所示,设计中采用的硬件平台为基于Intel Xscale架构的PXA255开发板,CPU运算速度为400 MHz,FLASH为32 MB容量的Intel Strata FLASH,SDRM 容量为64 MB,USBSlave支持USB1.1,LCD支持640×480分辨率。
由图1可以看出,一个完整的嵌入式系统不仅包含有硬件平台,还有运行于该硬件平台的操作系统和基于该操作系统的应用软件,而嵌入式LinUX只是众多嵌入式操作系统中的一个。
从20世纪80年代末开始,陆续出现了一些嵌入式操作系统,例如比较著名的有Vxwork,pSOS,Neculeus,QNX,ECOS,LYNX,Palm OS和Windows CE,这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且源代码的封闭性也大大限制了开发者的积极性。
另外,结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux推广提供广阔的发展前景。
再者,对上层应用开发者而言,嵌入式系统需要的是一套高度简练,界面友善,质量可靠,应用广泛,易开发、多任务,并且价格低廉的操作系统。
基于以上情况,采用嵌入式Linux操作系统作为开发的软件平台。
2 交叉编译工具链在嵌入式系统软件的开发过程中,交叉编译工具链是极为重要的一环,设计并制作良好的交叉编译工具链是顺利实现软件开发的重要保障。
2.1ARM-Linux的gcc交叉工具链设计采用的Linux操作系统是经过修改与裁剪的ARM-Linux;使用的开发工具是非图形开发工具gcc。
gcc交叉编译工具一般情况下需自行制作,制作方法较为简单,这里不做详细介绍。
制作一条比较完整的ARM-Linux gcc交叉工具链主要用到如下软件包:binutils工具包(ftp://ftp.gnu.org/gnu/binutils);gcc编译器(ftp://ftp.gnu.org/gnu/gcc);glibc函数库(ftp://ftp.gnu.org/gnu/glibc);glibc-linuxthreads包(ftp://ftp.gnu.org/gnu/glibe);linux内核(ftp://ftp.kernle.org/pub/linux/kernel)。
如果Linux内核低于2.6版本,还应下载相应的内核补丁。
(ftp://ftp.arm.linux.org.uk /pub/linux/arm/kernel/v2.4/)2.2 SDL图形库为使程序运行的界面更加友好和美观,在设计中要使用到图形函数接口,这就意味着要向前面的工具链(采用gcc工具链版本为3.3.2)添加第三方的图形函数库。
设计中采用的SDL(Simple DirectMedia Layer)图形库为免费的跨平台多媒体应用编程接口,具有丰富的函数库,便于开发者使用。
2.2.1SDL常用到的开发包(1)SDL_Image:提供显示多种格式的图像显示接口,它支持bmp,png,jpeg,gif,tiff等;(2)SDL_Draw:提供画点线圆等几何图形的接口(SDL_gfx也含有这样的功能http://www.ferzkopp.net/joomla/content/view/19/14/);(3)SDL_ttf:提供显示TTF文字的接口;(4)SDL_mixer:提供播放各种声音文件的接口。
把SDL编译到工具链用的并非PC机本身带的gcc编译器,而是要用到第2.1节已经做好了的交叉编译工具链。
其中使用的pkg-Config工具版本要在0.15.0版本或以上。
SDL以及与SDL安装相关或有依赖关系的软件有:alsa-lib-1.0.15,audiofile-0.2.6,esound-0.2.38,freetype-2.1.9,jpegsrc.v6b,libid3tag-0.15.1b,libmad-0.15.1b,libpng-1.2.22,madplay-0.15.2b,SDL-1.2.12,SDL_draw-1.2.11,SDL_gfx-2.0.15,SDL_image-1.2.6,sdl_mad-0.1,SDL_mixer-1.2.8,SDL_ttf-2.0.9,tiff-3.8.2,tslib-1.3,zlib-1.2.3。
2.2.2交叉编译的主要步骤主要步骤为:(1)设定环境变量:PREFIX为安装目录;CROSS为ARM-Linux-;PKG_CONFIG_PATH为pkgcon-fig 的路径;ARCH在这里设成ARM;HOST注意要是ARM-Linux,而不是i386-linux(这与前面做ARM-Linux-gcc不一样);BUILD设置为i386-linux。
编译时一定要指定CC,NM,AR等变量,让它们跟交叉编译器对应的工具关联起来,否则编译时将会采用PC机Linux的gcc编译器进行编译,不能达到交叉编译的目的。
(2)按顺序依次编译如下软件:zlib编译命令行:./configure—shared—prefix=$PREFIX;make;make install。
freetype编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$PREFIX;make;make install。
libpng编译命令行:./configure —host=$(HOST)—build=$(BUILD)--prefix=$PREFIX;make;make install。
libtiff编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$(PREFIX)/usr--without-x --enable-zlib--with-zlib-include-dir=$(PREFIX)/include—with-zlib-lib-dir=$(PREFIX)/lib--with-jpeg-include-dir=$(PREFIX)/include —with-jpeg-lib-dir=$(PREFIX)/lib;make;make install。
tslib编译命令行:./configure—host=$(HOST)—build=$(BUILD)--prefix=$(PREFIX)--cache-file=$(ARCH)-linux.cache--sysconfdir=$(PREFIX}/etc--enable-static &&;make;make install。
Libmad编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);make;make installlibid3tag编译命令行:./configure—host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX);make make installmadplay编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX);make;make installalsa编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。
audiofile编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。
esound编译命令行:./configure--host=$(HOST)--build=$(BUILD)-prefix=$(PREFIX)--disable-esd--disable-video-di-rectfb;make;make install。
SDL编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-esd-exec-prefix=$(PREFIX)--dis able-video-directfb;make;make install。
sdl_image编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX)--ena ble-sdhest;make;make install。
sdl_tff编译命令行:./configure--host=$(HOST)--build=$(BUILD)--prefix=$(PREFIX)--with-freetype-exec-prefix=$(PREFIX);make;make install。
sdl_draw编译命令行:./configure-host=$(HOST)--build=$(BUILD)prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;make installsdl_mixer编译命令行:./configure--host=$(HOST)--build=$(BUIUD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PRE FIX);make;make installsdl_mad编译命令行:./configure--host=$(HOST)--build$(BUILD)--prefix=$(PREFIX)--with-sdl-exec-prefix=$(PREFIX);make;make install至此,整个工具链就制作完成,打包并做好备份。