嵌入式软件工程师
嵌入式软件工程师岗位职责工作内容及任职资格要求

嵌入式软件工程师岗位职责工作内容及任职资格要求嵌入式软件工程师是一个需要技术和理论相结合的职业,主要负责设计、开发和测试嵌入式系统的软件部分。
以下是嵌入式软件工程师的职责、工作内容和任职资格要求。
职责:1. 设计和开发嵌入式软件系统。
2. 编写嵌入式软件源码并进行测试和集成。
3. 进行各种软件和硬件异常情况的debug和故障排除。
4. 协同团队进行系统开发流程和方法的优化和改善。
5. 与客户进行沟通和交流,解决嵌入式软件问题。
工作内容:1. 设计和开发嵌入式微控制器系统、嵌入式软件和应用程序。
2. 完成高质量的代码编写和代码调试工作,并提交设计文档和测试报告。
3. 对系统进行各种无法预见的情况进行debug和故障排除,确保系统的整体稳定性。
4. 理解客户的需求并提供合适的解决方案。
5. 报告实验室测试结果,并输出指导使用嵌入式系统的简单说明书。
6. 参与市场和销售部门的需求调研、产品设计和开发计划的制定等方面的工作。
任职资格要求:1. 熟悉C/C++编程语言,有较好的编程能力。
2. 熟悉嵌入式系统的原理和开发流程,并能灵活使用相关工具和环境。
3. 具备嵌入式CPU、flash、RAM等硬件知识和经验。
4. 熟悉各种嵌入式操作系统、文件系统、网络协议等技术。
5. 有较强的问题解决和故障排除能力,以及对技术创新的热情。
6. 具备良好的英语阅读能力,以及较好的沟通能力和团队协作精神。
总的来说,嵌入式软件工程师需要具备扎实的专业技能、深厚的理论功底和应用经验,以及良好的沟通能力和团队协作精神,才能在竞争激烈的市场中胜出。
希望对想要从事这一职业的人员有所帮助。
嵌入式软件工程师岗位职责

嵌入式软件工程师岗位职责嵌入式软件工程师是一种专门从事嵌入式系统开发和软件编程的职业。
嵌入式系统是指内嵌于产品中、具有特定功能的计算机系统,比如智能手机、汽车、医疗设备等。
嵌入式软件工程师的主要职责是设计、开发和维护嵌入式软件。
以下是嵌入式软件工程师的一些具体岗位职责:1. 需求分析:嵌入式软件工程师需要与客户或产品经理合作,分析产品需求,理解系统功能和性能要求。
2. 系统设计:根据需求分析结果,设计嵌入式系统的软件架构和模块划分,确定系统的硬件和软件接口。
3. 软件开发:根据设计,编写嵌入式软件的代码,实现系统的各项功能。
这包括使用编程语言如C、C++等,编写驱动程序、操作系统和应用程序。
4. 软件集成:将各个模块的软件进行集成,确保不同模块之间的协作和功能正常。
这包括进行模块间的接口测试和调试。
5. 软件测试:对已经完成的嵌入式软件进行测试,包括功能测试、性能测试、安全性测试等,确保软件的稳定性和可靠性。
6. 故障排除:嵌入式软件工程师需要分析软件问题,找出故障原因并修复问题。
这可能涉及调试硬件设备或系统软件,以解决硬件和软件之间的兼容性和稳定性问题。
7. 文档编写:嵌入式软件工程师需要编写相关的技术文档和用户手册,以便其他团队成员能理解和使用软件系统。
8. 团队协作:嵌入式软件工程师通常需要与硬件工程师、测试工程师和产品经理等其他团队成员密切合作,共同完成项目开发任务。
9. 软件维护:随着产品的使用,嵌入式软件工程师需要对软件进行维护和升级,修复已知问题和改进软件性能。
10. 技术研究:嵌入式软件工程师需要进行技术研究和追踪新的技术趋势,以保持自己的技术竞争力,并应用新的技术方法和工具。
总结来说,嵌入式软件工程师的职责主要包括需求分析、系统设计、软件开发、软件集成、软件测试、故障排除、文档编写、团队协作、软件维护和技术研究。
通过完成这些工作,嵌入式软件工程师可以确保嵌入式系统的功能和性能得到实现,产品能够稳定运行并满足客户要求。
嵌入式软件工程师岗位职责范本

嵌入式软件工程师岗位职责范本嵌入式软件工程师是一种专门负责嵌入式系统开发和维护的工程师。
嵌入式系统是指嵌入到其他设备或系统中完成特定功能的计算机系统,如智能手机、电视机、智能家居设备等。
作为嵌入式软件工程师,需要具备深厚的技术背景和相关的经验,以便能够胜任自己的工作。
下面是一个____字的嵌入式软件工程师岗位职责范本的示例:嵌入式软件工程师岗位职责范本(二)一、嵌入式系统开发1. 负责嵌入式系统的需求分析和设计,与硬件团队合作进行硬件与软件的接口设计。
2. 参与嵌入式系统的架构设计和模块设计,并能够进行详细的设计文档编写。
3. 负责嵌入式系统的软件开发和调试,包括编写程序代码、完成软件模块的单元测试和集成测试。
4. 能够熟练使用嵌入式开发工具,并熟悉嵌入式软件开发流程。
5. 能够分析和解决嵌入式系统中的问题,包括性能问题、稳定性问题等。
二、嵌入式软件维护1. 负责已经投产的嵌入式系统的维护和升级工作,包括诊断和修复系统故障,以及根据需求升级系统功能。
2. 能够对嵌入式系统的软件进行优化,提高系统的稳定性和性能。
3. 能够及时响应用户反馈的问题,并能够独立进行问题排查和解决。
4. 能够编写技术文档和操作手册,准确记录和传递系统的信息。
三、项目管理与团队协作1. 参与软件项目计划的制定,能够根据项目进展进行合理的软件开发任务分配。
2. 能够与项目组其他成员进行有效的沟通和协作,促进项目的顺利进行。
3. 对项目的进度和质量有一定的把控能力,能够适时调整工作计划和资源分配。
4. 能够根据项目的需要,合理估计工作量并按时完成任务。
四、技术研究与学习1. 保持良好的学习和研究习惯,及时关注和学习新的嵌入式技术和发展趋势。
2. 能够主动参与技术交流和学术研讨,提升自己的专业能力和技术水平。
3. 能够独立进行技术问题的研究和解决,积极推动团队的技术创新和进步。
以上是嵌入式软件工程师岗位的基本职责范本。
具体的岗位职责还需要根据企业的实际情况进行调整和补充。
嵌入式工程师分类

嵌入式工程师分类嵌入式工程师是一种专业技术人员,主要负责设计和开发嵌入式系统。
嵌入式系统是指集成了计算机芯片、传感器、执行器和通信接口等硬件设备,以及嵌入式软件的计算机系统。
在现代社会中,嵌入式系统已经广泛应用于汽车、家电、医疗设备、工业自动化等领域。
鉴于这种技术的重要性,本文将介绍嵌入式工程师的分类。
一、按照工作职责分类1. 嵌入式软件工程师嵌入式软件工程师主要负责设计和开发嵌入式软件。
他们需要有深厚的计算机编程知识,能够使用C语言、汇编语言等编程语言进行开发。
此外,他们还需要具备良好的团队协作能力和沟通能力,能够与硬件工程师合作完成项目。
2. 嵌入式硬件工程师嵌入式硬件工程师主要负责设计和开发嵌入式系统的硬件部分。
他们需要具备深厚的电子电路知识和实践经验,熟悉各种硬件设计工具和测试设备。
此外,他们还需要有良好的团队协作能力和沟通能力,能够与软件工程师合作完成项目。
3. 嵌入式系统架构师嵌入式系统架构师是一种高级工程师,主要负责设计和规划嵌入式系统的整体架构。
他们需要具备深厚的计算机和电子电路知识,熟悉各种嵌入式系统开发工具和技术。
此外,他们还需要有良好的团队协作能力和沟通能力,能够领导团队完成项目。
二、按照应用领域分类1. 汽车嵌入式工程师汽车嵌入式工程师主要负责设计和开发汽车电子控制单元(ECU)等嵌入式系统。
他们需要了解汽车电子控制系统的原理和技术,并且熟悉相关法规标准。
此外,他们还需要有良好的团队协作能力和沟通能力,能够与其他部门合作完成项目。
2. 家电嵌入式工程师家电嵌入式工程师主要负责设计和开发家用电器等嵌入式系统。
他们需要了解各种家电的工作原理和技术,熟悉各种嵌入式系统开发工具和技术。
此外,他们还需要有良好的团队协作能力和沟通能力,能够与其他部门合作完成项目。
3. 医疗嵌入式工程师医疗嵌入式工程师主要负责设计和开发医疗设备等嵌入式系统。
他们需要了解医疗设备的原理和技术,并且熟悉相关法规标准。
嵌入式软件工程师(BSP)职位描述与岗位职责

嵌入式软件工程师(BSP)职位描述与岗位职责嵌入式软件工程师(BSP)是一种专业技术人员,主要负责嵌入式系统开发中BSP(板级支持软件)部分的设计、实现与维护。
具体职责如下:1. 负责嵌入式系统中BSP的设计、开发与调试。
根据客户需求及整体设计方案,编写BSP部分的驱动程序、底层操作系统、硬件抽象层等,并独立完成整个开发流程。
2. 针对开发中出现的各种问题进行分析和解决。
分析BSP部分的代码实现,处理由于驱动不兼容、系统故障、硬件问题等产生的质量问题,并进行优化改进。
3. 编写BSP部分的技术文档。
详细记录BSP部分的架构设计、接口定义、代码实现过程、出现问题及解决方案等技术文档,并保证文档及时更新。
4. 与硬件工程师、系统工程师等协同开发。
深入了解硬件平台上的特点,并与硬件工程师、系统工程师等密切协作,沟通合作,使嵌入式系统的整体开发过程高效地完成。
5. 研究新技术、新硬件等的应用。
了解新技术、新硬件的性能、优势、适用范围等,研究如何将其应用到嵌入式系统中,并提供技术支持和解决方案。
任职资格:1. 计算机、电子等相关专业的本科及以上学历。
2. 熟练掌握C、C++等编程语言,有C语言编程能力。
3. 熟悉Linux、RTOS等操作系统、熟练驾驭ARM、PowerPC、MIPS等嵌入式芯片的架构。
4. 熟悉底层驱动程序开发,具备掌握中断、DMA、定时器等硬件资源管理的基本技能。
5. 具备扎实的数据结构与算法基础,熟悉常用工具链、调试器、仿真器等开发工具。
6. 具备团队合作精神、良好的沟通协调能力,能够承受工作压力,能独立思考和解决问题,具备较强的自我学习和技术研究能力。
以上是嵌入式软件工程师(BSP)的职位描述和岗位职责。
这项工作的主要任务是负责嵌入式系统中BSP的设计、实现和维护,需要具备扎实的编程基础、操作系统知识和团队协作能力。
嵌入式软件工程师工作内容

嵌入式软件工程师工作内容嵌入式软件工程师是一种专门从事嵌入式系统软件开发的工程师。
嵌入式系统是指将计算机技术和信息处理技术应用到各种电子、机械、仪器仪表、汽车、家电等产品中,以实现产品的智能化、网络化、数字化和高性能化。
嵌入式软件工程师的工作内容主要包括以下几个方面:1. 系统需求分析,嵌入式软件工程师需要与产品经理、硬件工程师等人员合作,对嵌入式系统的需求进行分析和理解。
他们需要明确系统的功能要求、性能指标、软硬件接口等方面的需求,为后续的软件设计和开发工作奠定基础。
2. 软件设计与架构,在系统需求分析的基础上,嵌入式软件工程师需要进行软件设计与架构工作。
他们需要设计系统的软件模块结构、数据流程、算法等,并确定软件的整体架构,以确保系统的稳定性、可靠性和高效性。
3. 软件编码与调试,嵌入式软件工程师需要根据软件设计与架构的要求,进行软件编码和调试工作。
他们需要使用C、C++等编程语言,编写嵌入式系统的软件代码,并进行调试和测试,以确保软件的正确性和稳定性。
4. 硬件软件协同开发,在嵌入式系统开发过程中,嵌入式软件工程师需要与硬件工程师密切合作,进行硬件软件协同开发。
他们需要理解硬件的特性和接口要求,与硬件工程师进行接口定义和调试,以确保软硬件之间的协同工作。
5. 系统集成与测试,嵌入式软件工程师需要进行系统集成与测试工作。
他们需要将软件模块进行集成,进行系统级联调和测试,以确保整个嵌入式系统的功能完整性和稳定性。
6. 系统维护与优化,嵌入式软件工程师需要进行系统维护与优化工作。
他们需要对已上线的嵌入式系统进行维护和优化,解决系统中出现的bug和性能问题,以确保系统的长期稳定运行。
总的来说,嵌入式软件工程师的工作内容涉及到系统需求分析、软件设计与架构、软件编码与调试、硬件软件协同开发、系统集成与测试、系统维护与优化等方面。
他们需要具备扎实的计算机软件基础知识和嵌入式系统开发经验,能够熟练运用各种软件开发工具和调试工具,具有良好的团队合作能力和沟通能力,能够承担起整个嵌入式系统软件开发的责任,为产品的成功上市提供有力的技术支持。
嵌入式软件工程师面试题

嵌入式软件工程师面试题1. 题目描述:嵌入式软件工程师是一个专业领域的岗位,需要有扎实的编程技能和深厚的硬件知识。
本文通过提供一些典型的嵌入式软件工程师面试题,帮助读者了解该岗位要求以及面试过程中可能遇到的问题。
2. 问题一:请简要介绍什么是嵌入式系统。
嵌入式系统是指集成了计算机硬件和软件的特定功能的计算机系统。
与通用计算机系统不同,嵌入式系统通常被用于特定应用领域,具有紧凑的尺寸、低功耗、实时性和可靠性等要求。
3. 问题二:嵌入式软件工程师的主要职责是什么?嵌入式软件工程师的主要职责包括:- 设计、开发和测试嵌入式软件系统;- 理解硬件平台和相关的技术要求;- 编写高效的代码并进行性能优化;- 解决系统的稳定性和兼容性问题;- 进行单元测试和集成测试。
4. 问题三:请列举一些您在嵌入式软件开发中常用的编程语言和工具。
嵌入式软件开发中常用的编程语言包括:- C/C++:C语言和C++语言是嵌入式软件开发的主要编程语言,具有高效、灵活和跨平台的特性;- Assembly语言:用于对硬件进行底层编程的语言,可以直接操作寄存器和内存;- Python:用于快速原型开发、脚本编写和测试等。
常用的嵌入式软件开发工具包括:- 嵌入式集成开发环境(IDE):如Eclipse、IAR Embedded Workbench等,用于编写、编译和调试嵌入式软件;- 仿真器和调试器:如JTAG、OpenOCD等,用于调试和监控嵌入式系统;- 版本控制工具:如Git、SVN等,用于团队协作和代码版本管理。
5. 问题四:请谈谈您在嵌入式系统开发中遇到的最大挑战是什么?您是如何解决的?在嵌入式系统开发中,最大的挑战之一是硬件与软件的协同工作。
硬件和软件开发之间需要密切合作,以确保系统的正确性和稳定性。
解决这个问题的关键在于团队合作和良好的沟通。
我在项目中与硬件工程师进行频繁的讨论和协作,以确保软件与硬件的接口设计是一致的。
此外,我也学习了硬件方面的基础知识,能够更好地理解硬件需求和限制,从而更好地进行软件开发。
嵌入式软件工程师岗位的理解

嵌入式软件工程师岗位的理解嵌入式软件工程师岗位的理解一、前言嵌入式软件工程师岗位是当前社会上需求量较大的一个职业岗位,嵌入式软件工程师需要具备扎实的计算机相关专业知识和技能,掌握多门编程语言和技术,能够独立完成嵌入式软件开发工作。
本文将从嵌入式软件工程师的职责、技能要求、发展前景等方面进行分析和探讨。
二、嵌入式软件工程师的职责1. 嵌入式软件系统设计与开发嵌入式软件工程师需要承担嵌入式软件系统的设计与开发工作。
在嵌入式系统中,软件和硬件是紧密结合的,嵌入式软件工程师需要根据产品需求和硬件评台的特点,设计合理的嵌入式软件系统结构,并编写高质量的嵌入式软件代码。
2. 嵌入式软件测试与调试嵌入式软件工程师还需要参与嵌入式软件的测试与调试工作。
他们需要编写测试用例,进行软件功能测试和性能测试,并对软件中出现的问题进行调试和修复,保证嵌入式软件的稳定性和可靠性。
3. 硬件和软件的交互嵌入式软件工程师需要与硬件工程师密切合作,理解硬件评台的特点,协助硬件工程师完成硬件与软件之间的接口设计和调试工作,确保嵌入式软件与硬件的良好互操作性。
4. 软件维护与升级嵌入式软件工程师还需要承担嵌入式软件的维护与升级工作,及时对软件中出现的问题进行修复,并根据产品需求对软件功能进行升级和扩展。
三、嵌入式软件工程师的技能要求1. 扎实的计算机基础知识嵌入式软件工程师需要具备扎实的计算机基础知识,包括计算机组成原理、操作系统、数据结构与算法等方面的知识。
2. 熟练掌握多门编程语言嵌入式软件工程师需要熟练掌握C/C++等编程语言,并了解汇编语言、Python等其他编程语言。
3. 熟悉嵌入式系统开发工具嵌入式软件工程师需要熟悉常用的嵌入式系统开发工具,如Keil、IAR、MPLAB等,以及相关的调试工具和仿真工具。
4. 良好的团队合作能力嵌入式软件工程师需要有良好的团队合作能力,能够与硬件工程师、测试工程师等其他团队成员密切合作,完成软件开发与测试工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程师笔试题(C/C++)2008-03-25 18:19预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B))这个测试是为下面的目的而设的:1). 标识#define在宏中应用的基本知识。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。
这问题对区分一个正常的伙计和一个书呆子是很有用的。
只有书呆子才会读C语言课本的附录去找出象这种问题的答案。
当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
死循环(Infinite loops)4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。
我首选的方案是:while(1) { }一些程序员更喜欢如下方案:for(;;) { }这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。
如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。
如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。
"这会给我留下一个坏印象。
第三个方案是用 gotoLoop:...goto Loop;应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
数据声明(Data declarations)5. 用变量a给出下面的定义a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )答案是:a) int a; // An integerb) int *a; // A pointer to an integerc) int **a; // A pointer to a pointer to an integerd) int a[10]; // An array of 10 integerse) int *a[10]; // An array of 10 pointers to integersf) int (*a)[10]; // A pointer to an array of 10 integersg) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integerh) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。
当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。
但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。
因为在被面试的这段时间里,我确定我知道这个问题的答案。
应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?Static6. 关键字static的作用是什么?这个简单的问题很少有人能回答完全。
在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。
这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
Const7.关键字const是什么含意?我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。
去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const 能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。
尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。
(如果你想知道更详细的答案,仔细读一下Saks的文章吧。
)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?const int a;int const a;const int *a;int * const a;int const * a const;前两个的作用是一样,a是一个常整型数。
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。
顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。
如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。
(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。
)2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。
简而言之,这样可以减少bug的出现。
Volatile8. 关键字volatile有什么含意并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是volatile变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3). 多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的。
我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。
嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。
不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:int square(volatile int *ptr){return *ptr * *ptr;}下面是答案:1). 是的。
一个例子是只读的状态寄存器。
它是volatile因为它可能被意想不到地改变。
它是const因为程序不应该试图去修改它。
2). 是的。
尽管这并不很常见。
一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。
这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:int square(volatile int *ptr){int a,b;a = *ptr;b = *ptr;return a * b;}由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。