本帖最后由 jf_15811252 于 2022-5-23 11:05 编辑
本篇文章进行GD32VF103RBT6的coremark跑分测试,在测试前需要准备一个正常使用的工程,需要有串口打印和定时器中断功能,当然也可以使用sys
tick进行计时。
在MRS开发环境下,首先准备串口程序,需要支持printf功能。
- int _put_char(int ch)
- {
- usart_data_transmit(USART1, (uint8_t) ch );
- while ( usart_flag_get(USART1, USART_FLAG_TBE)== RESET){
- }
- return ch;
- }
但是在MRS开发环境下printf打印函数不支持浮点类型,可以在软件中设置支持
接下准备定时器部分,本次采用的是定时器0,1ms产生一次中断
- void timer0_config(uint16_t psc,uint32_t arr)
- {
- timer_parameter_struct timer_initpara; //定时器结构体
- rcu_periph_clock_enable(RCU_TIMER0); //使能TIMER0时钟
- timer_deinit(TIMER0);
- timer_struct_para_init(&timer_initpara); //将结构体参数变为初始值
- timer_initpara.prescaler = psc; //预分频
- timer_initpara.alignedmode = TIMER_COUNTER_EDGE; //对齐模式
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //计数方向
- timer_initpara.period = arr; //周期
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //时钟分频
- timer_initpara.repetitioncounter = 0; //重复计数器
- timer_init(TIMER0, &timer_initpara);
- timer_interrupt_enable(TIMER0,TIMER_INT_UP); //使能更新中断
- eclic_irq_enable(TIMER0_UP_IRQn,2,0); //使能中断线
- // timer_enable(TIMER0);
- }
在基本工程准备好后,去官网
http://www.eembc.org/coremark/index.php下载coremark源码,复制以下部分到自己工程中
在自己的工程下新建coremark文件夹,并且复制以上部分到coremark文件夹下
接下来在进行MRS并刷新工程,在项目,属性添加coremark头文件路径
由于coremark中使用了main函数,所以需要将main.c中的main函数删掉,coremark和
单片机的接口在core_portme.c中的portable_init函数,接下来则将之前的硬件初始化函数移入接口函数内即可
接下来设置start_time,stop_time,get_time这三个函数,这里将原来的设置删掉写上自己的部分,
设置时基,计数变量以及运行时间
将不需要的部分屏蔽掉
尽量提高得分,将优化等级提高
当然优化等级也可打印出来,按以下设置即可
接下来编译工程下载程序,连接好串口观察串口输出值
由上图可知,本次跑分为282.193585。