‘壹’ 英特尔SystemStudio2016中提供哪些新功能
支持和优化令人信服的系统和应用用法
高度优化的编译器和库,包括英特尔®C++编译器、英特尔®集成性能基元库(英特尔®IPP)以及英特尔®数学内核库(英特尔®MKL),帮助开发人员将性能提高四倍。
分析抢占式实时Linux*上的应用性能
优于性能分析器支持实时Linux*系统解析,开发人员可迅速准确地定位抢占式Linux系统中的性能热点。高优先级的任务可能随时中断数据收集器。英特尔®VTune™Amplifier持续通过低开销采样收集数据。享用并发性、等待和锁定分析,另加上下文交换信息。找出系统软件和应用代码中的性能热点。
分析虚拟化环境中的应用性能
性能分析器支持虚拟化环境解析。观察和分析客户操作系统实例上运行的嵌入式应用的性能和行为。通过单一平台,在虚拟化环境中优化多种操作系统和应用的性能,节约硬件成本。
快速鉴别浪费功耗的软件
功耗分析器支持Android*、Windows*,现在还支持Linux,延长运行Linux的IoT、移动和嵌入式设备的电池使用寿命,优化无风扇系统的散热。功耗分析器精确显示应用和系统软件的唤醒,这些是主要功耗对象。
快速隔离复杂的系统问题
全面的系统全局硬件和软件事件跟踪有助于通过时间戳和纠正跟踪信息有效地精确查找问题,分析软硬件之间的复杂交互。
系统全局的封闭式机箱调试
通过标准的USB连接进行基于JTAG*的调试和追踪,增加灵活性,降低成本,无需访问JTAG端口。
将洞察力扩展到Windows* System,增强可靠性
适用于Microsoft*WinDbg* KernelDebugger的系统调试和追踪扩展帮助简化平台上线和Windows驱动验证。调试完全停止的Windows系统(包括驱动),通过英特尔®处理器跟踪,更快地中断并隔离复杂的运行时问题。
高效调试计算密集的代码,卸载至图形内核
使用简单的编译程序指令(例如#pragma)标记计算密集的代码,跨处理器和图形内核协作执行。目前扩展调试器支持除了处理器内核之外,还可调试图形内核上运行的代码。
‘贰’ MDK-arm的ARM编译工具
ARM编译工具链(之前被称为ARM RealView编译工具)包含:
ARM C/C++ 编译器(armcc)
Microlib
ARM Macro汇编器(armasm)
ARM链接器(armLink)
ARM工具(Librarian and FromELF)
基于以上专门针对ARM架构的微控制器编译器,工程师可以使用C或者C++编写应用程序。通过以上编译器的编译,可以获得ARM汇编语言的高效率和高速度。
ARM编译器将C/C++元文件编译成可重定位(Relocatable)的目标模块,并且在其中嵌入供uVision调试器或在线调试器调试的符号信息。同时,ARM编译器能帮助生成listing file,它可以包含symbol table(符号表)和交叉引用信息。
ARM RVCT编译器被广泛视为行业最佳的基于ARM架构的编译器。它定位于最佳代码密度的编译器,可以帮助生成代码量最小的编译器,帮助节省代码量对内存的要求从而降低硬件成本。同时,编译器支持ISO标准的C/C++语言,可以将32-bit ARM, the 16-bit Thumb, 及混合的32/16-bit Thumb2 指令集生成经过高度优化的代码。
ARM公司一直致力于持续改善ARM编译器在代码密度和代码性能两方面的性能,同时增添了很多新的特点,如Microlib等。
‘叁’ C语言如何提高程序效率
好的代码没有一个统一的衡量标准,在程序员们的世界里大家也是各自按照自己的标准衡量着自己和别人的代码。不过有一个标准几乎是被所有人认同的。服役时间越长、出错率越高的代码就是好代码。所有的编程方法、代码技巧甚至于设计模式都是为了达到这个目的而产生的。
程序的效率分两部分:时间效率和空间效率。
时间效率 : 指的是程序运行的速度
空间效率 : 指的是程序占用内存或者外存的大小
对于这两点的把握,我们没有明确的方法。这里给出一些能够达成共识的规则,大家在今后自己编码的时候,可以通过这些规则来衡量自己的代码是否符合要求。
规则1:不要一味地追求程序的效率
如果追求程序效率需要付出降低正确性、可靠性、健壮性、可读性等质量代价,那么可以放弃这部分效率的提高。
规则2:优先提高全局效率
只有整个程序的执行效率提高才有意义,把时间和精力放在某一个不常被调用的小模块优化上得不偿失。
规则3:针对瓶颈部分优化
在实际开发工作中,我们经常遇到一些程序执行时间过长,需要优化。有些人上来就开始逐行检查代码,把认为可能影响效率的地方都尽量修改一遍。这样做不仅浪费时间,更重要的是,常常修改一遍后依然看不到明显的效果。
这种情况下,正确的方法是先找出限制效率的“瓶颈”,在这个部分做有针对性的优化。这么做才事半功倍。
规则4:先优化数据结构和算法,再优化执行代码
程序的两大要素是算法和数据结构,它们贯穿于程序的始终。因此,对它们的优化能够起到意想不到的良好效果。
规则5:时间效率和空间效率的矛盾
大多数时候,时间效率和空间效率是对立的。这就是程序设计中两个很重要的方法论,一个是“以空间换时间”,另一个是“以时间换空间”。此时应当分析那个更重要,作出适当的折中。
早间年,硬件成本比较高,人们大多都采用以时间换空间的策略,花费一些时间,减少内存开销。如今,内存条的价格已经非常便宜了,人们注重的`是软件的友好性,因此大部分时候都是用空间换时间。
规则6:代码不是越短越好
很多资深程序员都会有这样一个误区,完成同一个功能,代码越短越好。还经常有人说这样的话:“就这么个功能我几行代码就搞定了”。其实,追求代码精简是一个很大的误区。因为精简的代码并不一定产生高效的机器码。同时,它还付出了可读性这一代价。正确的做法是适当地做到代码精简。
注意事项
1. 书写错误
经常有人把“==”误写成“=”。“||”、“&&”、“<=”、“>=”这类符号也很容易发生少一个的错误。最可怕的是编译器根本发现不了这样的错误。
2. 初始化
变量(指针、数组)被创建之后应当立刻初始化,防止把未被初始化的变量当成右值使用。
3. 数值错误
这也是一类非常容易忽略的错误。变量的初值、缺省值错误,或精度不够,一旦出错不易发现。
4. 类型转换
为了避免数据类型转换的错误,我们要尽量使用显式的数据类型转换,避免在编译器中执行非我们所愿的隐式数据类型转换。
5. 溢出
溢出分两种,一种是超过数据类型取值范围的赋值,另一种是数组下标范围越界。这两种都是要时刻注意的。
7. 避免编写技巧性很高代码
技巧性过高的代码一定是可读性较差的代码,这种代码不易维护,后期的成本较高。
8. 好代码要复用,坏代码要重写
如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码。当我们遇到差劲代码时,最好的方法是重写新代码替换它。
9. 尽量使用标准库函数
对于标准库中有的函数,我们不要再花时间自己实现。很简单,你自己实现的一定不比库函数效率高。
10. 把编译器的选择项设置为最严格状态
只有最严格的审查自己的代码,才能写出优秀的软件产品。很多人甚至连编译过程中出现的warning都懒得处理,这种态度坚决不能有。
‘肆’ 单片机的编程用C语言好还是汇编语言好。为什么
一般都用C语言编程。只有在C解决不了和代码效率比较高的时候才会使用汇编。很明显,C语言容易编程,更容易模块化编程,容易学习,会的人多。编写同一个程序,C语言所花的时间平均比汇编短很多。而且对应不同的单片机平台,汇编语言都是不同的,而C语言是通用的。
鉴于C语言有这么多好处,建议你用C语言编程,现在随着编译器功能的强大,如KIEL,基本上没有C语言处理不了的单片机问题了。
现在的硬件技术的发展,硬件成本越来越低,在代码效率不高的时候可以通过提升硬件的水平来实现系统的实时性需求。因此,在很多时候,代码的优化工作量减少了很多。
总之,C语言编程优于汇编。C语言是硬件的语言。