在灯光控制、IO模拟Flex Bus等很多应用中,对GPIO的翻转速度有很高的要求,M0+内核中集成了一个特定的single-cycle I/O port,Kinetis中我们称之为Fast GPIO(FGPIO)。它可以完成对IO口的单周期load和store,主要的区别在于FGPIO的端口可以被内核零等待的访问,于是可以达到Core Clock的速度,而普通GPIO需要内核通过内部的crossbar/AIPS来访问,从而增加了时间上的延迟,使GPIO输出频率被限制。

在客户应用中发现,Codewarrior和KEIL IDE下只需要在代码中直接操作FGPIO的寄存器即可完成GPIO口48Mhz的翻转速度,然而在IAR默认环境中使用同样的起始代码和时钟配置却未能达到48M的翻转速度,而仅有普通GPIO的速度8M左右。通常我们会从时钟上找原因,http://tiyubisai.com/video_news/news_135616.html但是究其原因,发现原来IAR的优化等级对FGPIO的速度产生了影响,这点很容易被忽略,所以下面截图详细的做一对比:

如下图1,在IAR的优化选项“Optimizations Tab” 中,优化等级为“Low”,每一句FGPIO翻转的语句 “FGPIOB_PTOR=0x02 ” 反汇编后的代码如图2中红色方框部分为三句,所以这也就大致解释了GPIO输出频率只有8M左右(相当于翻转速度16M,此处忽略程序while(1)的影响)。当更改IAR中“Optimizations Tab” 优化选项如下图3为High(Speed优先)时,每一句FGPIO翻转的语句 “FGPIOB_PTOR=0x02 ” 反汇编后的代码如图4中红色方框部分为一句,于是得到的GPIO输出频率为24M左右(相当于翻转速度48M,同样此处忽略程序while(1)的影响),刚好是未设置高优化等级之前的三倍,最终在硬件设备上完成了对GPIO的单周期访问和更改。

总之,FGPIO的实际输出速度出来和程序代码有关系之外,还和优化等级的设置有关系,需要用户在实际应用中多加注意。有兴趣的读者可以拿未优化之前的代码和普通GPIO操作的代码做一对比,查看反汇编代码长度、反汇编代码访问的GPIO寄存器地址以及GPIO执行速度之间的关系,可以发现即便反汇编出来的代码长度一样,由于访问的寄存器地址不同也会导致GPIO输出频率的不同和差异。

图1 . IAR中优化等级的默认设置

图2 . 在IAR默认的优化等级条件下,FGPIO翻转语句反汇编代码

图3. 更改IAR中默认优化等级设置

图4. 更改IAR中默认优化等级设置后,FGPIO翻转语句反汇编后代码

http://blog.csdn.net/xiaoxiongli/article/details/49637973

http://blog.csdn.net/xiaoxiongli/

iar代码优化影响运行速度吗_IAR中优化等级对Kinetis FGPIO执行速度的影响相关推荐

  1. 计算机改显存会有啥影响,显卡显存越大越好吗?显存对电脑速度的影响有哪些?...

    对于刚接触DIY领域的小白玩家来说,衡量显卡性能的指标就是GPU芯片和其频率,这也确实是显卡性能的决定性因素.但除了GPU,还有一个对显卡性能影响较大的部分,那就是显存. 显卡显存越大越好吗?显存对电 ...

  2. iar代码优化影响运行速度吗_Java 性能优化:教你提高代码运行的效率

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:五月的仓颉 cnblogs.com/xrq730/p/486 ...

  3. 网络变压器的工作原理:网络变压器中的直流电阻对POE供电有怎样的影响呢?

    盈盛电子导读:上节给大家分享了网络变压器中的直流电阻对阻断EMI的影响,至此我们已经完整了解了网络变压器直流电阻对传输数据脉冲电压信号的影响关系:但是网络变压器中的直流电阻还有对POE供电的影响,那么 ...

  4. Microbiome:微生物组研究中优化方法和规避误区

    本网对Markdown排版支持差,请跳转至 "宏基因组"公众号阅读: 微生物组研究中优化方法和规避误区 2017年五月发表在Microbiome上的综述,对于老司机会有很多共鸣,对 ...

  5. 网络营销专员浅析在网络营销中网站关键词对网站流量获取有何影响?

    网站上线后为确保正常运营和长久性的良性发展,可针对网站优化运营中的重点进行修改和调整,以满足日常网站运营发展的需求.那么在长期以来的网络营销发展中,网站关键词对网站流量获取是否有影响?如果有那又该如何 ...

  6. 深度机器学习中的batch的大小对学习效果有何影响?

    深度机器学习中的batch的大小对学习效果有何影响? 如题,在深度学习中,刚入门的小弟一直听闻一个batch中同时训练多个数据可以得到较好的效果,于是小弟在caffe上跑deepID的网络时对如何选取 ...

  7. 实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC

    目录 引出问题: MDK设置方法(AC5和AC6): 1.开启优化后,部分功能不正常 2.开启优化后,直接整体卡死 AC5设置方法: AC6设置方法: IAR设置方法: 1.开启优化后,部分功能不正常 ...

  8. (排序5)快速排序(Hoare,选key的随机数与三数取中优化,挖坑法与前后指针法等)

    快速排序 (Hoare大佬版本) 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左 ...

  9. matlab中拟合函数中的gian值,如何在Matlab中优化基本周期图法对随机信号进行的功率谱估计...

    首都师范大学学报(自然科学版)第27卷 第5期2006年10月 Journal of Capital N ormal University (Natural Science Edition ) V o ...

最新文章

  1. virtualenv 在windows下的绿化方法
  2. 深度|10分钟读懂阿里巴巴高级专家在Flutter Live2018的分享
  3. 01:初识Redis
  4. 蓝桥杯练习系统习题-算法提高2
  5. ubuntu 14.04 安装qq 2015
  6. QT的QSoundEffect类的使用
  7. 最通俗易懂的乐观锁与悲观锁原理及实现
  8. 华为交换机关闭接口命令_华为路由交换机基础命令,看看你会哪些?
  9. 使用canvas保存网页为pdf文件支持跨域
  10. 在html创建色块,浅谈网页制作中色块使用
  11. grafana-reporter
  12. 计算机术语翻译(Term.)及缩写整理(Abbr.)
  13. linux mint(ubuntu)频率锁定解决
  14. nodejs爬虫网络图片
  15. EasyAR涂涂乐代码分析
  16. Python极简实现IoU
  17. python+opencv摄像头人脸检测+代码注释
  18. Android-第三节圆形图案及shape属性(修改圆形图片)
  19. 边缘检测的评价指标:PR曲线,OIS,ODS,AP的计算与代码实现
  20. 大数据开发之Hive篇12-Hive正则表达式

热门文章

  1. Android无线网络调试手机
  2. 61 Celery Beat 任务调度
  3. java access dbq_java连接access数据库
  4. android中自适应布局教程,Android自适应布局设计技巧
  5. 清除浏览器缓存之后为什么还是显示旧的html页面_H5缓存机制浅析-移动端Web加载性能优化...
  6. python stm32f401_NUCLEO-F401RE(STM32F401RE)开发板跑Micropython平台
  7. Linux之Less命令跳转到特定的行号
  8. Jmeter连接mysql报Cannot create PoolableConnectionFactory (Communications link failureThe last packet
  9. web签名验证程序【跨服务器、中文字符签名方法】-php为例
  10. LDD3源码分析之访问控制