基于嵌入式系统的2048工程实训报告
- 格式:docx
- 大小:240.74 KB
- 文档页数:26
嵌入式系统实习报告一、嵌入式系统实习报告1、实习项目简介(1)在实习期间,我参与了一项嵌入式系统开发项目。
该项目的目标是设计和开发一个嵌入式系统,用于控制并监测一个温室的环境参数,如温度、湿度和光照强度等。
为了实现这个目标,我需要进行硬件设计、嵌入式编程和外设控制等方面的实践。
2、硬件设计经验和成果展示(1)在硬件设计方面,我负责选择和设计相应的传感器和执行器,并与其他团队成员进行紧密合作,确保系统的整体性能和稳定性。
我了解了传感器的工作原理和选择方法,并根据项目的需求选择了适合的温度、湿度和光照传感器。
在执行器方面,我选择了合适的风扇和灯光控制器,以便对温室内的环境进行调控。
(2)在设计过程中,我还学习了相关的电路原理和布局设计。
我根据传感器和执行器的要求,设计了相应的电路,并进行了仿真和测试。
通过这个过程,我熟悉了硬件设计的流程和方法,并深入了解了嵌入式系统的硬件架构。
3、嵌入式编程经验和成果展示(1)在嵌入式编程方面,我使用C语言进行了嵌入式系统的软件开发。
我根据项目的需求,编写了相应的程序,实现了对传感器和执行器的数据读取和控制。
我学习了嵌入式系统的基本编程思想和方法,如中断处理、定时器和IO口控制等。
(2)在编程过程中,我遇到了一些困难,如如何优化程序的运行效率和内存开销,以及如何处理实时数据的采集和处理等。
为了解决这些困难,我查阅了相关的资料并与导师和同事进行了讨论和交流。
最终,我通过对程序的优化和对数据采集时间的控制,成功解决了这些问题,并达到了预期的效果。
4、外设控制经验和成果展示(1)为了实现对温室环境的控制,我学习并实践了外设控制的方法。
我使用了GPIO接口来控制风扇和灯光的开关,通过PWM信号来控制风扇和灯光的转速和亮度。
我还学习了串口通信和I2C总线通信等方法,以实现与其他设备的数据交换和控制。
(2)在外设控制过程中,我也遇到了一些问题,如如何正确配置和使用外设引脚、如何处理外设的中断和异常等。
2024年嵌入式实习报告一、引言嵌入式系统是一种特殊的计算机系统,是应用于特定设备中的特定功能模块或系统。
作为一名计算机科学与技术专业的学生,我于2024年暑期参加了嵌入式实习,进一步深入了解和学习嵌入式系统的设计与开发。
本报告将详细介绍我的实习内容、所学到的知识和技能,以及实习过程中遇到的挑战和解决方案。
二、实习内容1. 实习单位及项目背景我所实习的单位是一家嵌入式系统开发公司,在实习期间我参与了一个工业自动化控制系统的开发项目。
该控制系统是用于工厂自动化生产线的监控和控制,涵盖了传感器数据采集、数据处理和信号控制等功能。
2. 实习任务和目标在这个项目中,我主要负责以下几个方面的工作:(1) 系统架构设计:根据需求分析,设计整个控制系统的模块划分和接口设计。
(2) 嵌入式软件开发:使用C语言开发嵌入式控制器上的固件程序,包括传感器数据采集、数据处理和信号控制等功能。
(3) 硬件调试和测试:与硬件工程师合作,对嵌入式系统进行调试和测试,确保系统的正常运行。
(4) 文档撰写: 编写实习日志、设计文档和用户手册等技术文档。
三、所学知识和技能在实习期间,我学到了很多嵌入式系统设计和开发方面的知识和技能,包括但不限于以下几点:1. 嵌入式系统架构设计:学习了如何根据需求分析将整个控制系统划分为不同的模块,并设计它们的接口。
2. C语言编程技巧:进一步熟练了C语言的语法和特性,学会了在嵌入式系统中进行底层硬件操作和驱动程序开发。
3. 嵌入式固件程序开发:学会了使用嵌入式开发工具和相关库函数进行固件程序的开发和调试。
4. 硬件调试和测试:与硬件工程师一起进行了硬件调试和测试工作,学会了使用示波器、逻辑分析仪和万用表等工具进行硬件故障排查和信号调试。
5. 文档撰写能力:通过撰写技术文档,提升了编写清晰、简洁的文档的能力。
四、实习过程中的挑战和解决方案在实习过程中,我遇到了一些挑战,但通过不断学习和思考,我成功地解决了它们。
一、实训背景随着物联网、智能家居等领域的快速发展,嵌入式系统在各个行业中的应用越来越广泛。
为了提高我们的嵌入式系统开发能力,我们学院特组织了一次为期两周的嵌入式实训。
本次实训旨在通过实际操作,让我们掌握嵌入式系统的开发流程、常用开发工具和编程技巧,为今后的工作打下坚实的基础。
二、实训内容1. 嵌入式系统基础知识实训的第一阶段,我们学习了嵌入式系统的基本概念、组成、分类以及发展历程。
通过学习,我们对嵌入式系统有了更深入的了解,为后续实训奠定了理论基础。
2. 嵌入式开发环境搭建在熟悉嵌入式系统基础知识的基础上,我们开始搭建开发环境。
实训过程中,我们学习了如何使用Keil、IAR等集成开发环境,掌握了代码编写、编译、调试等基本操作。
3. 嵌入式编程语言实训过程中,我们学习了C语言、汇编语言等嵌入式编程语言。
通过实际编程,我们掌握了嵌入式编程的基本技巧,如寄存器操作、中断处理、定时器等。
4. 嵌入式硬件开发为了提高我们的硬件开发能力,实训中我们学习了如何使用单片机、传感器等硬件设备。
通过实际操作,我们掌握了电路设计、PCB制作、硬件调试等技能。
5. 嵌入式系统项目实践实训的最后阶段,我们进行了嵌入式系统项目实践。
我们选择了智能家居项目,通过团队协作,实现了环境监测、设备控制等功能。
三、实训收获1. 理论与实践相结合通过本次实训,我们深刻体会到理论与实践相结合的重要性。
理论知识为我们提供了坚实的基石,而实践操作则让我们将所学知识应用于实际项目中。
2. 团队协作能力在项目实践过程中,我们学会了如何与团队成员沟通、协作,共同完成项目。
这为我们今后在工作中与同事合作打下了基础。
3. 编程能力提升通过学习C语言、汇编语言等编程语言,我们的编程能力得到了显著提升。
我们掌握了嵌入式编程的基本技巧,为今后从事相关工作打下了基础。
4. 硬件开发能力实训过程中,我们学习了电路设计、PCB制作、硬件调试等技能,提高了我们的硬件开发能力。
一、实训背景随着科技的不断发展,嵌入式系统在各个领域得到了广泛的应用。
为了使同学们更好地了解嵌入式系统,提高实践能力,我们开展了为期一个月的嵌入式系统实训课程。
本次实训课程以ARM7微控制器为核心,旨在让学生掌握嵌入式系统的基本原理、开发工具以及实际应用。
二、实训目标1. 理解嵌入式系统的基本概念、组成和特点;2. 掌握ARM7微控制器的原理和编程方法;3. 熟悉嵌入式系统开发工具的使用;4. 能够进行简单的嵌入式系统设计和开发。
三、实训内容1. 嵌入式系统基本原理(1)嵌入式系统概述:介绍了嵌入式系统的定义、特点、应用领域等;(2)嵌入式系统组成:包括硬件和软件两部分,硬件包括微控制器、存储器、输入输出接口等,软件包括操作系统、驱动程序、应用程序等;(3)嵌入式系统开发流程:从需求分析、硬件设计、软件开发、测试到产品发布的全过程。
2. ARM7微控制器原理与编程(1)ARM7微控制器概述:介绍了ARM7微控制器的结构、特点、指令系统等;(2)ARM7微控制器编程:包括汇编语言和C语言编程,重点讲解了寄存器、中断、定时器等编程方法;(3)Keil Vision3集成开发环境:介绍了Keil Vision3的安装、配置和使用方法。
3. 嵌入式系统开发工具(1)Keil Vision3:介绍了Keil Vision3的功能、界面和操作方法;(2)ST公司的STR71系列软件库函数:介绍了STR71系列软件库函数的功能和使用方法;(3)Proteus仿真软件:介绍了Proteus仿真软件的安装、配置和使用方法。
4. 嵌入式系统设计与开发实践(1)设计题目:设计一个基于ARM7微控制器的温度监测系统;(2)硬件设计:包括微控制器、温度传感器、显示模块等;(3)软件开发:包括初始化程序、温度采集程序、显示程序等;(4)系统测试:测试系统功能是否正常,包括温度采集、显示等。
四、实训收获1. 理论知识方面:通过本次实训,我们对嵌入式系统的基本原理、ARM7微控制器编程和开发工具有了更深入的了解;2. 实践能力方面:通过实际操作,我们掌握了嵌入式系统的设计、开发和调试方法,提高了动手能力;3. 团队协作方面:在实训过程中,我们学会了与他人合作,共同解决问题,提高了团队协作能力。
嵌入式系统实习报告首先,我要感谢实习单位给我提供了这次宝贵的实习机会,让我对嵌入式系统有了更深入的了解和实践。
在这段实习期间,我学到了很多关于嵌入式系统的知识和技能,也积累了宝贵的实践经验。
以下是我在实习期间的学习和实践总结。
一、实习单位简介实习单位是一家专注于嵌入式系统研发的高科技公司,主要业务涵盖了嵌入式系统设计、开发、测试和维护等领域。
公司拥有一支经验丰富的研发团队,为我提供了良好的学习环境和实践机会。
二、实习目的和意义此次实习旨在让我了解嵌入式系统的基本概念、原理和应用,掌握嵌入式系统设计方法和开发流程,提高我的实际动手能力和解决问题的能力。
通过实习,我能够将所学的理论知识与实际应用相结合,为将来的工作打下坚实的基础。
三、实习内容和过程1. 嵌入式系统基础学习在实习初期,我首先学习了嵌入式系统的基本概念、原理和常见硬件平台。
通过学习,我了解了嵌入式系统的发展历程、特点和应用领域,掌握了嵌入式系统的基本组成部分,如微处理器、存储器、输入输出接口等。
2. 嵌入式系统开发环境搭建为了进行嵌入式系统开发,我学习了如何搭建开发环境,包括交叉编译工具链、操作系统和编程语言等。
通过实践,我掌握了交叉编译工具链的使用方法,熟悉了嵌入式操作系统的基本操作,并学会了使用编程语言进行嵌入式系统开发。
3. 实际项目参与在实习过程中,我参与了一个实际项目,负责部分模块的设计和开发。
在项目中,我学会了如何分析需求、设计方案、编写代码和调试程序。
通过与团队成员的合作,我了解了团队协作的重要性,并提高了自己的沟通能力和解决问题的能力。
4. 嵌入式系统调试和优化在项目开发过程中,我遇到了一些调试和优化问题。
通过查阅资料、请教同事和不断实践,我学会了使用调试工具进行程序调试,掌握了嵌入式系统性能优化的方法,如内存管理、功耗优化等。
四、实习收获和反思通过这次实习,我收获了以下几点:1. 掌握了嵌入式系统的基本概念、原理和应用,了解了嵌入式系统的发展趋势。
一、实习背景随着信息技术的飞速发展,嵌入式系统作为计算机科学、电子工程、通信工程等多个学科交叉的产物,已经成为当今社会的重要技术领域。
为了更好地了解嵌入式系统的开发与应用,提升自己的实践能力,我在近期参加了为期一个月的嵌入式系统实习。
二、实习内容1. 嵌入式系统基础知识学习实习期间,我首先学习了嵌入式系统的基本概念、组成原理以及工作流程。
通过学习,我了解到嵌入式系统主要由微处理器、存储器、输入/输出接口、外设等组成,其核心是微处理器。
同时,我也学习了嵌入式系统与通用计算机系统的区别,如嵌入式系统具有实时性、可靠性、低功耗等特点。
2. 嵌入式开发环境搭建在掌握嵌入式系统基础知识后,我学习了如何搭建嵌入式开发环境。
这包括选择合适的开发板、安装操作系统、配置编译器等。
通过实际操作,我掌握了使用Keil、IAR等集成开发环境进行嵌入式系统开发的技能。
3. 嵌入式系统编程实践在实习过程中,我参与了多个嵌入式系统编程项目。
这些项目包括基于ARM处理器的温度控制系统、基于STM32的智能家居控制系统等。
在项目中,我学习了C语言编程、汇编语言编程、中断处理、定时器编程等嵌入式系统编程技巧。
4. 嵌入式系统调试与优化在嵌入式系统开发过程中,调试与优化是至关重要的环节。
实习期间,我学习了使用JTAG、串口等工具进行嵌入式系统调试,并掌握了软件优化、硬件优化等方法。
5. 嵌入式系统项目案例分析为了更好地理解嵌入式系统的应用,我分析了多个嵌入式系统案例。
这些案例包括工业控制、消费电子、通信等领域。
通过学习,我对嵌入式系统的实际应用有了更深入的认识。
三、实习收获1. 理论知识与实践能力的提升通过本次实习,我对嵌入式系统的理论知识有了更深入的理解,同时实践能力也得到了很大提升。
在实习过程中,我学会了如何将理论知识应用于实际项目中,解决实际问题。
2. 团队协作与沟通能力的提高在实习项目中,我与团队成员共同完成项目任务。
这使我学会了如何与团队成员进行有效沟通、协作,提高了我的团队协作能力。
工程实践训练项目名称物联网应用专业班级自动化1301姓名黄奎伦学号201301020129指导教师汪超,谢一峰(粤嵌)2016年12月24日目录第1章实训目的与任务 (1)1.1 工程实践训练目的 (1)1.2 实训项目要求 (1)第2章知识点总结 (1)2.1 嵌入式系统 (1)2.2 Linux操作系统介绍 (2)2.3 交叉开发 (2)2.4 SecureCRT的设置与连接 (2)2.5 C程序的交叉编译及运行 (3)2.6 函数的定义 (3)2.7 Linux文件IO函数 (4)2.8 LCD显示原理 (5)第3章2048游戏的设计流程图 (5)第4章相关的c语言游戏程序 (6)第5章2048游戏展示 (39)第6章游戏测试 (40)6.1 测试的意义 (40)6.2 测试过程 (41)心得体会 (22)电气信息学院工程实践训练评分标准 (23)第1章实训目的与任务1.1 工程实践训练目的本次自动化工程实践训练第一部分是实训装置的使用说明,讲述了系统的组成、硬件的特点和技术指标、软件的使用介绍。
第二部分是实训项目部分,叙述了实训的原理、步骤及注意事项等。
通过对实训装置各个仪表的原理、工作情况及实验原理、软硬件的详细介绍,通过实际操作让我们对复杂过程控制系统实训装置有一个充分的认识,又有益于我们对工业生产现场控制系统的了解。
培养学生的工程实践能力,进一步提高学生分析和解决实际问题的能力。
1.2 实训项目要求轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。
《2048》这款小游戏是一款流行的数字游戏,游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,有趣。
因此,开发要求做到各项功能要完备、操作要简便、易学易用。
所以本周的工程实训要求自己设计一个2048小游戏,以及学习关于嵌入式的基本入门知识。
第2章知识点总结2.1 嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。
2024年嵌入式实习报告模板一、实习单位基本情况1.1 实习单位名称实习单位名称:XXX公司1.2 实习单位概况XXX公司是一家专注于嵌入式系统开发的高科技公司。
公司成立于2005年,总部位于XX城市,拥有一流的研发团队和先进的技术设备,致力于为客户提供优质的嵌入式解决方案。
XXX公司的产品广泛应用于消费类电子、通信设备、汽车电子等领域,深受客户的信赖和好评。
1.3 实习单位实习安排XXX公司为我安排了为期8周的嵌入式系统开发实习。
期间我将参与一个实际项目的开发,并在导师的指导下完成相关的任务和项目。
二、实习项目背景2.1 项目背景和目标本次实习项目是为某个通信设备开发一套嵌入式系统,目标是实现设备的稳定运行和功能完善。
项目要求包括嵌入式软件开发、硬件调试和系统集成等方面的工作。
2.2 项目任务和内容我的任务是参与嵌入式软件开发环节,负责设备的驱动程序编写和功能模块的开发。
具体的工作内容包括:- 设计和实现设备的驱动程序,包括通信接口、传感器等;- 开发设备的功能模块,如电源管理、数据处理等;- 进行软件调试和优化,确保系统的稳定性和性能。
三、实习经历与收获3.1 实习过程和工作内容在实习期间,我积极参与项目的各个环节,与团队成员合作完成了一系列的任务。
具体的工作内容包括:- 学习和掌握嵌入式系统的基本原理和开发工具;- 参与设备驱动程序的编写和硬件调试工作;- 参与功能模块的开发和测试,发现和解决了一些问题;- 参与系统集成和综合测试,协助团队完成项目并交付客户。
3.2 实习收获和体会通过这次实习,我收获了许多宝贵的经验和知识。
首先,我深入了解了嵌入式系统的开发流程和技术要点,掌握了嵌入式软件开发的基本方法和工具。
其次,通过与团队成员合作,我提高了沟通和合作能力,学会了团队协作的重要性。
最重要的是,我通过实际项目的参与,增强了问题解决和项目管理能力,提升了自己的综合素质。
四、实习总结和建议4.1 实习总结通过这次嵌入式实习,我深入了解了嵌入式系统开发的流程和技术要点。
嵌入式实训报告范文 (2)嵌入式实训报告范文 (2)精选2篇(一)嵌入式实训报告一、实训背景嵌入式系统是一种以具体任务为中心,集成了硬件与软件的计算机系统。
由于其体积小、功耗低、功能强大等特点,嵌入式系统被广泛应用于各个领域,如家电、汽车、医疗等。
通过参与嵌入式实训,我希望能够掌握嵌入式开发的基本原理和方法,提高自己的实践能力。
二、实训目标1.掌握嵌入式系统的基本知识和开发工具的使用;2.了解嵌入式系统的硬件架构和软件设计流程;3.能够根据需求设计并实现简单的嵌入式系统。
三、实训内容1.学习嵌入式系统基础知识:通过课堂教学和自主学习,了解了嵌入式系统的概念、特点及应用领域。
深入学习了ARM架构和C语言的基本知识,并进行了相应的实践操作。
2.学习嵌入式开发工具的使用:学习了Keil MDK和IAR Embedded Workbench等常用的嵌入式开发工具的安装和配置方法。
通过实操操作,掌握了调试、编译、下载等基本功能的使用。
3.学习嵌入式系统设计流程:了解了嵌入式软件开发的常用流程,包括需求分析、系统设计、编码实现、调试测试、系统验证等。
通过案例分析和实践操作,对嵌入式系统设计流程有了更深入的了解。
4.设计并实现简单的嵌入式系统:根据实训要求,我选择了一个简单的嵌入式系统项目,通过分析需求、设计系统架构、编写软件代码、调试测试等环节,最终成功完成了项目。
四、实训总结及收获通过参与嵌入式实训,我不仅掌握了嵌入式系统的基本知识和开发工具的使用,还锻炼了自己的实践能力。
我深刻认识到嵌入式系统开发需要全面的知识储备和较高的技术水平,同时也需要良好的分析、设计和沟通能力。
通过实训,我对嵌入式系统开发流程有了更深入的理解,对嵌入式系统的设计和开发也有了更高的认识和要求。
在未来的学习和工作中,我会继续深入学习嵌入式系统开发相关知识,并不断提高自己的实践能力。
嵌入式系统是未来的发展方向,通过不断探索和实践,我相信我能够在这个领域取得更好的成果。
嵌入式实训报告范文嵌入式实训报告范文精选2篇(一)嵌入式实训报告一、实训目的和背景嵌入式实训的目的是通过设计和实现一个嵌入式系统,培养学生的嵌入式系统开发才能和团队协作才能。
本次实训的背景是为了满足社会对嵌入式系统开发人才的需求,进步学生的实际动手才能。
二、实训内容1. 硬件平台的选择和搭建:选择了一款ARM开发板作为硬件平台,并搭建了相应的开发环境。
2. 系统设计和分析:根据实训要求,我们团队设计了一个智能门锁系统,包括用户认证、门锁控制和远程监控功能。
3. 软件开发:使用C语言和嵌入式开发工具进展软件开发,实现了用户认证、门锁控制和远程监控等功能。
4. 硬件连接和调试:将开发板和相关传感器、执行器等硬件设备进展连接和调试,确保系统可以正常运行。
5. 功能测试和调优:对系统进展全面测试,发现并修复了一些问题,并对系统进展了性能优化。
三、实训心得和体会通过本次实训,我深入认识到嵌入式系统开发的复杂性和挑战性。
在实训过程中,我们团队遇到了许多问题,比方硬件和软件的兼容性、性能优化等方面。
但是通过团队的努力和合作,我们成功解决了这些问题,并完成了一个功能完善的嵌入式系统。
此外,我还学到了许多软件开发和硬件调试的技巧,进步了自己的实际动手才能。
在团队协作方面,我们团队成员之间互相配合,共同解决问题,形成了良好的协作机制。
总结起来,本次嵌入式实训让我受益匪浅,学会了许多实际应用的技能和知识,并进步了自身的综合才能。
四、实训成果展示在实训完毕后,我们团队成功完成了一个智能门锁系统,具备用户认证、门锁控制和远程监控等功能。
系统的稳定性和可靠性得到了验证,并且在实际使用中得到了积极的反应。
附图:〔展示系统界面、硬件设备连接示意图等〕五、实训改良意见尽管本次实训获得了良好的成果,但仍有一些方面需要改良。
首先,实训的时间安排可以更合理一些,以便更充分地利用时间进展理论操作。
其次,可以增加一些真实场景的案例分析和解决方案的设计,以提升学生的实际应用才能。
工程实践训练项目名称物联网应用专业班级自动化1301姓名黄奎伦学号************指导教师汪超,谢一峰(粤嵌)2016年12月24日目录第1章实训目的与任务 (1)1.1 工程实践训练目的 (1)1.2 实训项目要求 (1)第2章知识点总结 (1)2.1 嵌入式系统 (1)2.2 Linux操作系统介绍 (1)2.3 交叉开发 (2)2.4 SecureCRT的设置与连接 (2)2.5 C程序的交叉编译及运行 (2)2.6 函数的定义 (3)2.7 Linux文件IO函数 (3)2.8 LCD显示原理 (4)第3章2048游戏的设计流程图 (4)第4章相关的c语言游戏程序 (5)第5章2048游戏展示 (21)第6章游戏测试 (22)6.1 测试的意义 (22)6.2 测试过程 (22)心得体会 (22)电气信息学院工程实践训练评分标准 (23)第1章实训目的与任务1.1 工程实践训练目的本次自动化工程实践训练第一部分是实训装置的使用说明,讲述了系统的组成、硬件的特点和技术指标、软件的使用介绍。
第二部分是实训项目部分,叙述了实训的原理、步骤及注意事项等。
通过对实训装置各个仪表的原理、工作情况及实验原理、软硬件的详细介绍,通过实际操作让我们对复杂过程控制系统实训装置有一个充分的认识,又有益于我们对工业生产现场控制系统的了解。
培养学生的工程实践能力,进一步提高学生分析和解决实际问题的能力。
1.2 实训项目要求轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。
《2048》这款小游戏是一款流行的数字游戏,游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,有趣。
因此,开发要求做到各项功能要完备、操作要简便、易学易用。
所以本周的工程实训要求自己设计一个2048小游戏,以及学习关于嵌入式的基本入门知识。
第2章知识点总结2.1 嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。
2.2 Linux操作系统介绍Linux是一套免费使用和自由传播的类UNIX操作系统,其创始人为美国著名黑客 --林纳斯·托瓦兹。
它能运行主要的UNIX工具软件、应用程序和网络协议,且支持32位和64位硬件,是一个性能稳定的多用户网络操作系统。
操作系统:操作系统是计算机系统中最基本的系统软件,它用于有效地管理系统资源,并为用户使用计算机提供了便利的环境。
ubuntu是一个基于linux的免费开源桌面PC操作系统。
2.3 交叉开发一般来说,研发嵌入式产品,由于从产品成本及功能专用性角度出发考虑。
嵌入式产品一般只有程序的运行环境,而并没有程序的编译开发环境。
所以,我们一般在通用电脑上用各种编译开发软件把程序编译调试好后,再下载到开发板或相关产品上去运行。
这个过程,我们称之为交叉开发。
2.4 SecureCRT的设置与连接(1)获取连接上的端口号用串口线连接好开发板后,启动开发板。
在设备管理器中,查找识别出的端口。
若不能正确识别端口(有感叹号),则需要安装驱动。
(2)SecureCRT的设置点击快速连接,并进行设置a.协议: Serialb.端口: 你电脑识别出的端口号c.波特率: 115200d.把数据流控制中的RTS/CTS(R)勾去掉其它保持默认设置2.5 C程序的交叉编译及运行由于ARM处理器与Inter处理器其设计架构有本质区别。
所以要在arm开发板上运行的程序,则必须要用专用的编译器来编译。
(1)在文本编辑软件中编写好C源代码文件,并保存到共享文件夹中。
===> hello.c(2)在Ubuntu系统的共享目录中,用arm-linux-gcc编译器对hello.c进行编译,使生成一个可执行程序。
arm-linux-gcc hello.c –o hello===> hello(3)下载到开发板中rz(4)运行hello这个程序chmod +x hello./hello2.6 函数的定义返回类型函数名(输入参数列表){函数语句;//指令序列。
}"返回类型":函数返回值(return语句后面那个表达式值的类型)一般是"单值"类型,函数也可以没有返回值(void)"函数名":C语言标识符。
把一个名字与特定的功能模块相关联"输入参数列表":功能模块的输入。
格式如下:参数类型参数名1 ,参数类型2 参数2,……函数也可以没有参数。
主调函数:调用其他函数的函数被调函数:被别人调用的函数“实际参数”:在函数调用过程中,主调函数传递给被调函数的输入参数值,我们称之为“实际参数”,简称”实参”。
“形式参数”:函数定义时,参数列表中的参数。
我们称之为”形式参数”,简称”形参”。
2.7 Linux文件IO函数#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>open用来打开一个文件int open(const char *pathname, int flags)pathname: 要打开或创建的文件名(带路径名)flags: 打开标志。
告诉系统,是以何种方式打开这个文件O_RDONLY : read onlyO_WRONLY : write onlyO_RDWR : read/write以上三个标志选其一。
返回值:如果成功返回文件描述符(>0,后续所有对文件的操作都必须通过它,因为它代表这个文件。
)失败返回-1, 并且errno被设置。
2.8 LCD显示原理屏幕由y行且每行x个像素点的矩阵组成;在屏幕上显示图像,就是给每个像素点显示一种颜色。
颜色值,可以量化:Color = xGreen + yBlue + zRed我们向屏幕设备文件/dev/fb0 中写入各点颜色值就可以让屏幕显示相应的图片了第3章2048游戏的设计流程图第4章相关的c语言游戏程序#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <errno.h> /*perror, errno ,...*/#include <stdlib.h>/*abs的头文件*/#include <stdio.h> /*printf*/#include <sys/mman.h>#include <linux/input.h>#include <stdlib.h>#include <time.h> /*time */#include <string.h>#define LCD_WIDTH 800#define LCD_HEIGHT 480#define LCD_BYTESPERPIXEL 4 //每个像素点占几个字节#define LCD_SIZE (LCD_WIDTH * LCD_HEIGHT *LCD_BYTESPERPIXEL) #define MATRIX_X0 0 //整个棋盘的左上角顶点的x轴坐标#define MATRIX_Y0 0 //整个棋盘的左上角顶点的y轴坐标#define PIECE_SIZE 100 //棋子的像素点大小#define BOARDSIZE 4 // 整个棋盘的大小BORADSIZE * BOARDSIZE #define MOVE_LEFT 1#define MOVE_RIGHT 2#define MOVE_UP 3#define MOVE_DOWN 4unsigned char bmpdata[LCD_SIZE] ; //读bmp 图片数据临时数组int game_over = 0;//游戏结束的标志,1表示游戏结束//0表示游戏不结束//棋盘矩阵int matrix[BOARDSIZE][BOARDSIZE] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};int *plcd = NULL;//指向framebuffer(屏幕显存第一个点的内存)/*lcd_draw_point:在屏幕坐为(x, y)这个点,填充color 这个颜色值。
@x: x轴坐标@y:y轴坐标@color:要填充的辨色值返回值:无返回值。
*/void lcd_draw_point(int x, int y, int color){int *p = plcd;if (x >= 0 && x < LCD_WIDTH && y>=0 && y <LCD_HEIGHT){*(p +LCD_WIDTH*y + x) = color;}}/*lcd_draw_dect: 在屏幕上画一个矩形,并且用color这种颜色填充该矩形。
@x0: 该矩形的左上角的那个点x轴坐标@y0:该矩形的左上角的那个点y轴坐标@w:该矩形的宽@h:该矩形的高@color:该矩形要填充的辨色值返回值:无返回值。
*/void lcd_draw_dect(int x0, int y0, int w, int h, int color){if(x0>=0 && x0+w<=LCD_WIDTH && y0>=0 && y0+h<=LCD_HEIGHT && w>=0 && h>=0) {int i,j;for(i=x0;i<x0+w;i++){for(j=y0;j<y0+h;j++){LCD_draw_point(i,j,color);}}}else{printf("draw dect failed!x0=%d y0=%d w=%d h=%d\n",x0,y0,w,h);}}//将所有的图片名保存到一个数组中const char * bmpfiles[] ={"military_font_7_2.bmp", // 2"military_font_7_4.bmp", // 4"military_font_7_8.bmp", //8"military_font_7_16.bmp", // 16"military_font_7_32.bmp","military_font_7_64.bmp","military_font_7_128.bmp","military_font_7_256.bmp","military_font_7_512.bmp","military_font_7_1024.bmp","military_font_7_2048.bmp","military_font_7_4096.bmp","military_font_7_8192.bmp","military_font_7_16384.bmp","military_font_7_32768.bmp","military_font_7_65536.bmp",};/*get_bmpfiles_index:根据你要显示的数字(2,4,8,,16,...)返回你对应的文件名的下标返回值:返回x对应的文件名在数组bmpfiles的下标*/int get_bmpfiles_index(int x){}/*draw_bmp_byname:把一张bmp图片显示在屏幕上特定的位置@bmpfile:要显示的bmp图片的文件名@x0: 在屏幕上显示的左上角顶点的x轴坐标@y0: 在屏幕上显示的左上角顶点的y轴坐标@w: 位图宽度@h: 位图高度返回值:无返回值.*/void draw_bmp_byname(const char *bmpfile, int x0, int y0, int w, int h) {int fd;int x, y;fd = open(bmpfile, O_RDONLY);if (fd == -1){perror("open bmpfile error:");return ;}lseek(fd, 54, SEEK_SET);read(fd, bmpdata, w*h*3);close(fd);int i = 0;for (y = 0; y < h; y++){unsigned char r,g ,b;int color;for (x = 0; x < w; x++)//已知图片色深为24位{b = bmpdata[i++];g = bmpdata[i++];r = bmpdata[i++];color = (r << 16) | (g << 8) | b;lcd_draw_point(x0+ x, y0 + (h -1 - y) ,color);}}}/*draw_matrix:把棋盘矩阵在屏幕上显示出来void draw_matrix(){int i, j;for (i = 0; i < BOARDSIZE; i++){for (j = 0; j < BOARDSIZE;j++){int x0, y0;x0 = 185;//棋盘矩阵左上角那个点的x轴坐标y0 = 25;//棋盘矩阵左上角那个点的y轴坐标if (matrix[i][j] == 0){lcd_draw_dect(x0+j*110, y0+i*110, PIECE_SIZE, PIECE_SIZE,0xb4eeb4);//如果此处元素的值为0,那么//就显示}else{int f_index = get_bmpfiles_index(matrix[i][j]);draw_bmp_byname(bmpfiles[f_index],x0+j*110, y0+i*110,PIECE_SIZE,PIECE_SIZE);}}}}/*get_zero_num:求棋盘矩阵里面有多少个0返回值:返回棋盘矩阵中0的个数*/int get_zero_num(){}/*set_matrix:给棋盘矩阵第z个0的位置,填充一个值s*/void set_matrix(int z, int s)}/*init_matrix:初始化棋盘矩阵在任意x个位置,填充x个数字(2,4,8)*/void init_matrix(){/*step1:随机产生x个数字,并填充到棋盘矩阵中去*///规则x >= 1,x <= 3int x = (random() % 3) + 1;int i;for(i = 0; i < x; i++){int pos = (random() % get_zero_num()) + 1;int s[] = {2, 4, 8, 2};int s_i = (random() % 3);set_matrix(pos, s[s_i]);//给棋盘矩阵第pos个0的位置,填充一个值s[s_i] }/*step 2: 绘制棋盘矩阵*/draw_matrix();}/*get_finger_direction:获取手指在触摸屏上面的滑动方向返回值:MOVE_LEFT:手指向左移动MOVE_RIGHT:手指向右移动MOVE_UP:手指向上移动MOVE_DOWN:手指向下移动int get_finger_direction(){int ret;int fd = open("/dev/event0", O_RDONLY);if (fd == -1){perror("open event failed:");return -1;}struct input_event ev;int x1 = -1; //在滑动过程中第一个点的x轴坐标int x2; //在滑动过程中最后一个点的x轴坐标int y1 = -1;//在滑动过程中第一个点的y轴坐标int y2;//在滑动过程中最后一个点的y轴坐标while (1){ret = read(fd, &ev, sizeof(ev));if(ret != sizeof(ev)){continue;}if (ev.type == EV_ABS && ev.code == ABS_X)//是x轴坐标{if (x1 == -1)//x1重来没有赋过值,那么肯定是第一个点{x1 = ev.value;}x2 = ev.value;}if (ev.type == EV_ABS && ev.code == ABS_Y)//是y轴坐标{if ( y1 == -1)//y1重来没有赋过值,那么肯定是第一个点{y1 = ev.value;}y2 = ev.value;}if (ev.type == EV_ABS && ev.code == ABS_PRESSURE//手指弹起,再计算滑动方向&& ev.value == 0)//触摸屏压力值为0, press upint x_cz;//x轴的位移int y_cz;//y轴的位移int abs_x;int abs_y;x_cz = x2 - x1;y_cz = y2 - y1;abs_x = abs(x_cz);abs_y = abs(y_cz);if((x_cz > 30) && (abs_x > 2 * abs_y)){close(fd);return MOVE_RIGHT;}else if((x_cz < -30) && (abs_x > 2 * abs_y)){close(fd);return MOVE_LEFT;}else if((y_cz > 30) && (abs_y > 2 * abs_x)){close(fd);return MOVE_UP;}else if((y_cz < -30) && (abs_y > 2 * abs_x)){close(fd);return MOVE_DOWN;}else{x1 = y1 = -1;continue;}}}close(fd);}/*change_matrix:根据手指滑动(direction),变换棋盘矩阵*/{int direction = get_finger_direction();if (direction == MOVE_LEFT){fin_left();}else if (direction == MOVE_RIGHT){fin_right();}else if (direction == MOVE_UP){fin_up();}else{fin_down();}}/*fin_left:手指左划后棋子移动及合并的方式*/void fin_left(){//int fin = get_finger_direction();int i, j;//i为矩阵行下标,j为矩阵列下标int value, save_zero;for(i = 0; i < BOARDSIZE; i++){value = 0;save_zero= 0;for(j = 0; j < BOARDSIZE ; j++){if (matrix[i][j] == 0)continue;if (value == 0){value = matrix[i][j];}{if (value == matrix[i][j])//合并{matrix[i][save_zero++] = value * 2;value = 0;}else{matrix[i][save_zero++] = value;value = matrix[i][j];}}matrix[i][j] = 0;}if (value != 0)matrix[i][save_zero] = value;}}/*fin_right:手指上划后棋子移动及合并的方式*/void fin_right(){int i, j;//i为矩阵行下标,j为矩阵列下标int value;int save_zero;for(i = 0; i < BOARDSIZE; i++){value = 0;save_zero = BOARDSIZE -1;for(j = BOARDSIZE - 1; j >= 0 ; j--){if(matrix[i][j] == 0){continue;}if(value == 0){value = matrix[i][j];}else{if(value == matrix[i][j])matrix[i][save_zero--] = 2 * value;value = 0;}else{matrix[i][save_zero--] = value;value = matrix[i][j];}}matrix[i][j] = 0;}if(value != 0){matrix[i][save_zero] = value;}}}/*fin_up:手指上划后棋子移动及合并的方式*/void fin_up(){int i, j;//i为矩阵行下标,j为矩阵列下标int value;int save_zero;for(j = 0; j < BOARDSIZE; j++){value = 0;save_zero= 0;for(i = 0; i < BOARDSIZE ; i++){if(matrix[i][j] == 0){continue;}if(value == 0){value = matrix[i][j];}elseif(value == matrix[i][j]){matrix[save_zero++][j] =2 * value;value = 0;}else{matrix[save_zero++][j] = value;value = matrix[i][j];}}matrix[i][j] = 0;}if(value != 0){matrix[save_zero][j] = value;}}}/*fin_down:手指上划后棋子移动及合并的方式*/void fin_down(){int i, j;//i为矩阵行下标,j为矩阵列下标int value;int save_zero;for(j = 0; j < BOARDSIZE; j++){value = 0;save_zero = BOARDSIZE - 1;for(i = BOARDSIZE - 1; i >= 0 ; i--){if(matrix[i][j] == 0){continue;}if(value == 0){value = matrix[i][j];}{if(value == matrix[i][j]){matrix[save_zero--][j] = 2 * value;value = 0;}else{matrix[save_zero--][j] = value;value = matrix[i][j];}}matrix[i][j] = 0;}if(value != 0){matrix[save_zero][j] = value;}}}/*move_judge:判断是否还能移动return value:1 game over0 continue*/int move_judge(){int i, j;if(get_zero_num() != 0){return 0;}for(i = 0; i < BOARDSIZE; i++){for(j = 0; j < BOARDSIZE ; j++){if (j != BOARDSIZE -1){if (matrix[i][j] == matrix[i][j+1])return 0;}}if (i != BOARDSIZE - 1){if (matrix[i][j] == matrix[i+1][j]){return 0;}}}}return 1;}/*rand1_matrix:移动之后随机产生一个数字填充到任意一个0的位置上*/void rand_matrix(){int pos = (random() % get_zero_num()) + 1;int s[] = {2, 4, 8, 2};int s_i = (random() % 4);set_matrix(pos, s[s_i]);draw_matrix();}/************主函数**************/int main(){int fd;/*step 1: 打开屏幕*/fd = open("/dev/fb0", O_RDWR);if (fd == -1){perror("open fb0 failed:");return -1;/*step 2: mmap*/plcd = mmap(NULL, //第一个参数,为映射后的内存地址,//为NULL,表示让操作系统自行分配800*480*4, //第二个参数,为映射的长度。