IAR中优化等级对Kinetis FGPIO执行速度的影响
来源:互联网 发布:js foreach遍历数组 编辑:程序博客网 时间:2024/06/07 20:24
在灯光控制、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中优化等级对Kinetis FGPIO执行速度的影响
- hadoop 中map、reduce数量对mapreduce执行速度的影响
- ASP中缓冲的启用及执行速度的影响
- RMAN中FILESPERSET设置对备份速度的影响
- 分享嵌入式开发使用过程中遇到的几个问题(MQX4.2,IAR,Kinetis K66)
- 复制文件BUF大小、标准IO对执行速度的影响
- Oracle中CLUSTER_FACTOR对SQL执行计划的影响
- 索引对提高查询速度的影响
- 网站打开速度对网站的影响!
- 优化SQL的执行速度
- FPGA的速度等级
- 剖析url中汉字对网站优化结果的影响
- Form表单的提交在IE6中对common-fileupload上传速度的影响
- sql优化(查询条件的变化对执行计划的影响)
- 空分区对hive执行的影响
- cuda执行配置对性能的影响
- IAR中的断点与代码优化等级问题
- 执行删除/更新数据业务的速度优化
- 27 Quadratic primes - Project Euler
- CSS3 圆形loading效果
- cocos2d js的一些方法
- MySQL添加外键
- Java泛型与反射
- IAR中优化等级对Kinetis FGPIO执行速度的影响
- 使用CoreImage实现素描滤镜
- generatorConfiguration配置文件及其详细解读
- 【枚举】tyvj 1387 迷你火车头
- Eye-Dome-Lighting (EDL)
- 文章标题
- 识别,基于内容的检索,检测
- linux_sqlite3学习
- Conditionvariable的用法