AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
目录
- AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告
- AIR32F103(二) Linux环境和LibOpenCM3项目模板
- AIR32F103(三) Linux环境基于标准外设库的项目模板
- AIR32F103(四) 27倍频216MHz,CoreMark跑分测试
27倍频运行216MHz主频
合宙开发团队10月11日的提交中开源了AIR32F103的PLL倍频调节的代码, 使得在 Linux 下通过 GCC Arm 工具链也能编译运行216MHz.
代码示例
示例代码位于 Examples/NonFreeRTOS/RCC 下: https://gitee.com/iosetting/air32f103-template/tree/master/Examples/NonFreeRTOS/RCC
编译时遇到的问题
编译器对AIR_RCC_PLLConfig()这个函数的优化会造成PLL设置失败.
这个函数的源代码如下, 可以看到其中会对特定地址(例如 0x40016C00)进行连续的写操作, 编译时如果优化参数不是-O0, 就大概率会将这些写操作合并或调换位置.
uint32_t AIR_RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul, uint8_t Latency)
{
uint32_t sramsize = 0;
uint32_t pllmul = 0;
FunctionalState pwr_gating_state = 0;
/* Check the parameters */
assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
assert_param(IS_RCC_PLL_MUL(RCC_PLLMul));
*(uint32_t *)(0x400210F0) = BIT(0);//开启sys_cfg门控
*(uint32_t *)(0x40016C00) = 0xa7d93a86;//解一、二、三级锁
*(uint32_t *)(0x40016C00) = 0xab12dfcd;
*(uint32_t *)(0x40016C00) = 0xcded3526;
sramsize = *(uint32_t *)(0x40016C18);
*(uint32_t *)(0x40016C18) = 0x200183FF;//配置sram大小, 将BOOT使用对sram打开
*(uint32_t *)(0x4002228C) = 0xa5a5a5a5;//QSPI解锁
SysFreq_Set(RCC_PLLMul,Latency ,0,1);
RCC->CFGR = (RCC->CFGR & ~0x00030000) | RCC_PLLSource;
//恢复配置前状态
*(uint32_t *)(0x40016C18) = sramsize;
*(uint32_t *)(0x400210F0) = 0;//开启sys_cfg门控
*(uint32_t *)(0x40016C00) = ~0xa7d93a86;//加一、二、三级锁
*(uint32_t *)(0x40016C00) = ~0xab12dfcd;
*(uint32_t *)(0x40016C00) = ~0xcded3526;
*(uint32_t *)(0x4002228C) = ~0xa5a5a5a5;//QSPI解锁
return 1;
}
解决的方法
- 在Keil5下, 可以对 air32f10x_rcc_ex.c 这个文件右键单独设置 AC6 编译选项. AC5可以使用 注解, AC6不再支持文件内部单个函数的优化设置
- 在GCC Arm中, 可以通过 Makefile 对 air32f10x_rcc_ex.c 设置单独的-O0参数, 也可以在代码中增加屏障避免优化(例如在两行代码之间增加
__NOP();), 还可以通过int foo(int i) __attribute__((optimize("-O3")));这样的形式, 参考GNU GCC文档
这里采用最后一种, 将库函数修改为
__attribute__((optimize("-O0"))) uint32_t AIR_RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul, uint8_t Latency)
CoreMark跑分结果
示例中的 CoreMark_256MHz 项目, 可以将AIR32F103运行在最高256MHz主频下, 运行CoreMark性能测试. 以下是分别在 256MHz, 216MHz, 72MHz 不同编译器版本下的测试结果.
32倍频, 256MHz
编译器 GCC11.2.1
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 17054␊
Total time (secs): 17.054000␊
Iterations/Sec : 586.372698␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 586.372698 / GCC11.2.1 20220111 -O3 / STACK␊
IR32F103 CoreMark␊
编译器 GCC11.3.1, 256MHz
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 17054␊
Total time (secs): 17.054000␊
Iterations/Sec : 586.372698␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 586.372698 / GCC11.3.1 20220712 -O3 / STACK␊
编译器 GCC12.2.0 256MHz
SYSCLK: 256000000, HCLK: 256000000, PCLK1: 128000000, PCLK2: 256000000, ADCCLK: 128000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 15822␊
Total time (secs): 15.822000␊
Iterations/Sec : 632.031349␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 632.031349 / GCC12.2.0 -O3 / STACK␊
27倍频, 216MHz
GCC11.2.1 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 20213␊
Total time (secs): 20.213000␊
Iterations/Sec : 494.731114␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 494.731114 / GCC11.2.1 20220111 -O3 / STACK␊
GCC11.3.1 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 20213␊
Total time (secs): 20.213000␊
Iterations/Sec : 494.731114␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 494.731114 / GCC11.3.1 20220712 -O3 / STACK␊
GCC12.2.0 216MHz
SYSCLK: 216000000, HCLK: 216000000, PCLK1: 108000000, PCLK2: 216000000, ADCCLK: 108000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 18753␊
Total time (secs): 18.753000␊
Iterations/Sec : 533.248014␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 533.248014 / GCC12.2.0 -O3 / STACK␊
编译器 AC6 (GCCClang 15.0.0) 216MHz
SYSCLK: 216.0Mhz, HCLK: 216.0Mhz, PCLK1: 108.0Mhz, PCLK2: 216.0Mhz, ADCCLK: 108.0Mhz
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 16328
Total time (secs): 16.328000
Iterations/Sec : 612.444880
Iterations : 10000
Compiler version : GCCClang 15.0.0
Compiler flags : -O3
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x988c
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 612.444880 / GCCClang 15.0.0 -O3 / STACK
9倍频, 72MHz
编译器 GCC11.2.1 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 60677␊
Total time (secs): 60.677000␊
Iterations/Sec : 164.807093␊
Iterations : 10000␊
Compiler version : GCC11.2.1 20220111␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 164.807093 / GCC11.2.1 20220111 -O3 / STACK␊
编译器 GCC11.3.1 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 60677␊
Total time (secs): 60.677000␊
Iterations/Sec : 164.807093␊
Iterations : 10000␊
Compiler version : GCC11.3.1 20220712␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 164.807093 / GCC11.3.1 20220712 -O3 / STACK␊
编译器 GCC12.2.0 72MHz
SYSCLK: 72000000, HCLK: 72000000, PCLK1: 36000000, PCLK2: 72000000, ADCCLK: 36000000␊
2K performance run parameters for coremark.␊
CoreMark Size : 666␊
Total ticks : 56293␊
Total time (secs): 56.293000␊
Iterations/Sec : 177.641980␊
Iterations : 10000␊
Compiler version : GCC12.2.0␊
Compiler flags : -O3␊
Memory location : STACK␊
seedcrc : 0xe9f5␊
[0]crclist : 0xe714␊
[0]crcmatrix : 0x1fd7␊
[0]crcstate : 0x8e3a␊
[0]crcfinal : 0x988c␊
Correct operation validated. See readme.txt for run and reporting rules.␊
CoreMark 1.0 : 177.641980 / GCC12.2.0 -O3 / STACK␊
AIR32F103(四) 27倍频216MHz,CoreMark跑分测试的更多相关文章
- LINUX系统下跑分测试脚本:unixbench.sh
linux 系统跑分测试脚本: 一.下载脚本: wget http://teddysun.com/wp-content/uploads/unixbench.sh 二.更改权限: ...
- Mysql 如何实现全文检索,关键词跑分
一.前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快.但是听他 ...
- unixbench性能测试跑分工具
UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能 所谓跑分工具,不仅各项的测试有得分,最后跑完也会有一个综合 ...
- 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
作者批注:本文允许转载,并且希望给搜索未来人类.蓝天.CLEVO.更换硅脂或者任何有关关键字的朋友提供帮助. 原文地址:http://www.cnblogs.com/c4isr/p/3514140.h ...
- 魅蓝Note2跑分 MT6753性能究竟如何
MT6753实力究竟如何? 采用LP工艺的MT6753实际上在性能和功耗方面并不比MT6752高,相反,同频下功耗要高1/3左右.并且其内存带宽是5.3G/s,小于MT 6752的6.4G/s 而且没 ...
- VPS性能综合测试(6):UnixBench跑分工具测试
测试时间可能会比较长,请耐心等待.最后UnixBench会详细列出各个测试项目的得分情况,以及VPS性能的综合跑分结果 UinxBench 的使用 使用方法如下: Run [ -q | -v ] [- ...
- Azure 进阶攻略 | 电脑跑分你会,但虚拟机存储性能跑分的正确姿势你造吗?
想学生时代,小编最爱做的就是研究电脑硬件,然后给自己.朋友和童鞋装机.装好后呢?当然要第一时间跑分了!各种跑分软件运行一遍,不断优化,不断测试.终于得到一个满意成绩,截图分享到网上显摆一下.当年为啥就 ...
- [转帖]疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升
疑似兆芯开先KX-7000跑分曝光:IPC性能大幅提升 https://www.bilibili.com/read/cv4028300 数码 11-23 1589阅读28点赞22评论 尽管有ARM架构 ...
- AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍
AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍 2019年09月01日 09:36 1109 次阅读 稿源:快科技 1 条评论 https://www.cnbeta.com/ ...
随机推荐
- 051_末晨曦Vue技术_处理边界情况之provide和inject依赖注入
provide和inject依赖注入 点击打开视频讲解更详细 在此之前,在我们描述访问父级组件实例的时候,展示过一个类似这样的例子: <google-map> <google-map ...
- 微软Azure配置中心 App Configuration (三):配置的动态更新
写在前面 我在前文: <微软Azure配置中心 App Configuration (一):轻松集成到Asp.Net Core>已经介绍了Asp.net Core怎么轻易的接入azure ...
- 内网技巧-通过SAM数据库获得本地用户hash的方法
内网技巧-通过SAM数据库获得本地用户hash的方法 在windows上的C:\Windows\System32\config目录保存着当前用户的密码hash.我们可以使用相关手段获取该hash. 提 ...
- VS2019 Community社区版登录提示:我们无法刷新此账户的凭证 解决方法
最正确的方式: 1.点击 帮助-->发送反馈-->报告问题 2.点击 检查新的许可证 ,即可登陆成功 3.如果提示:无法下载或者下载失败. 4.那么就需要在左边 账户选项 中将 嵌入式We ...
- KingbaseES 与 Oracle 用户口令管理与资源管理
一.概述 KingbaseES可以对用户口令与用户占用资源进行必要的管理.其管理方式,在这里与Oracle数据库进行参考比较. KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资 ...
- MAC Golang环境搭建
1. 下载golang 下载地址:https://golang.google.cn/dl/ 根据MAC左上角苹果图标->关于本机,即可查看芯片类型 2. 安装golang 在 下载 中双击 下载 ...
- SpringBoot整合JWT实现登录认证
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- 第六章:Django 综合篇
前面五章,已经将Django最主要的五大系统介绍完毕,除了这些主要章节,还有很多比较重要的内容,比如开发流程相关.安全.本地化与国际化.常见工具和一些框架核心功能.这些内容的篇幅都不大,但整合起来也是 ...
- 第六章:Django 综合篇 - 7:网站地图sitemap
网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指 ...
- ConfigMap使用说明
ConfigMap概述 ConfigMap供容器使用的典型用法如下. (1)生成为容器内的环境变量. (2)设置容器启动命令的启动参数(需设置为环境变量). (3)以Volume的形式挂载为容器内部的 ...