本帖最后由 qjixf 于 2023-1-30 16:10 编辑
刚拿到CH32V208EVT评估版,参考前面网友的帖子,先是跑了coremark,381分,后又修改了dhrystone,237分。
- CH32V208的片上FLASH+SRAM按照官网手册默认128+64k,可以按需求通过更改OptionBytes相关部分设置成144+48K、160+32K等方式,最简单方法就是在MRS里面下载设置中修改:
同时修改链接脚本Link.ld文件:
- 使用SysTick计数器实现测试计时功能,初始化systick代码如下:
SysTick->CTLR &= ~(1<<4); //向上计数
SysTick->CTLR &= ~(1<<2); //HCLK/8 做时基;
SysTick->CTLR |= (1<<5); //计数值初始值更新为0
SysTick->SR &= ~(1<<0); //0x00000000; //状态寄存器复位
SysTick->CMP = 0xffffffffffffffff; //比较寄存器赋值 | 启动和停止SysTick计数通过开关SysTick控制寄存器的使能位实现:
void SysTick_Start(void) //启动计数器
{
SysTick->CTLR |= (1<<0);
}
void SysTick_Stop(void) //停止计数器
{
SysTick->CTLR &= ~(1 << 0);
} |
计时通过读取SysTick当前计数值后计算获得:
在coremark的core_portme.c里定义好每秒tick数即SysTick计数值,确定好ITERATIONS数值以满足CoreMark要求的最短测试时间10s,修改与定时相关的三个函数:
volatile ee_s32 seed4_volatile = 4000; //ITERATIONS;
#define EE_TICKS_PER_SEC (SystemCoreClock / 8 )
|
void start_time(void)
{
//GETMYTIME(&start_time_val);
SysTick_Init();
// start_time_val = SysTick->CNT ;
SysTick_Start();
}
void stop_time(void)
{
//GETMYTIME(&stop_time_val);
// stop_time_val = SysTick->CNT ;
SysTick_Stop();
}
CORE_TICKS get_time(void)
{
/*
CORE_TICKS elapsed
= (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
return elapsed;
*/
return SysTick->CNT;
}
|
Dhrystone修改在dhry_1.c中的计时函数:
void dhry_start_time (void)
{
SysTick_Init();
SysTick_Start();
}
void dhry_end_time (void)
{
SysTick_Stop();
}
double dhry_gettime_secs (void)
{
double tt=1.0;
u64 tcnt;
tcnt = SysTick->CNT;
tt = tcnt / (SystemCoreClock/8.0);
return tt;
}
|
其他需要修改的地方按照编译错误提示更正或删除不需要的代码即可。 - 跑分结果如下:
|