【笔记------coremark】单片机上的跑分库coremark移植

这篇具有很好参考价值的文章主要介绍了【笔记------coremark】单片机上的跑分库coremark移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

coremark的官方仓库:https://github.com/eembc/coremark
官方收录了很多单片机的跑分情况:https://www.eembc.org/coremark/scores.php
这个是我建立的一个仓库,用来收集自己用到的一些单片机的跑分情况:https://gitee.com/wild_coder/coremark_test,欢迎共建(现在还没两个,后面遇到新的会慢慢添加。。。)

  1. 文件添加,代码下载好是这样的,把如下部分的头文件和源文件添加到自己的工程:
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
  2. 把自己的main()函数注释掉,因为core_main.c中已经有一个了。然后打开core_portme.h,搜索COMPILER_FLAGS,根据自己的编译器优化选项填上去,不同优化等级分数差距会非常大:
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark

【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark

  1. core_portme.h最上面定义这个常量 ITERATIONS ,这个常量是运算的次数,不是固定的,因为这个跑分需要算法运行10秒以上才有效,跑的快的就大点,慢的就小点,填错的话后面打印也会提示你运行时间不足,再调整就好了
	#define ITERATIONS 1000
  1. 修改下main函数参数类型
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark

  2. core_portme.c中添加自己的系统初始化,时钟和打印初始化这些,我这里初始化了时钟和打印接口,然后再coremark.h文件中搜索HAS_PRINTF,按需映射下ee_printf
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark

  3. core_portme.c中适配自己的定时器,EE_TICKS_PER_SEC=1000即使用1ms的定时器中断:
    【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
    主要是四个函数,start_time(),stop_time(),get_time(),和自己平台的一个定时器函数如Tim1_IRQHandler()

uint32_t gTick = 0;
void
start_time(void)
{
//    GETMYTIME(&start_time_val);
	gTick = 0;
	Bt_M0_Run(TIM1); 
}

void
stop_time(void)
{
//    GETMYTIME(&stop_time_val);
	Bt_M0_Stop(TIM1); 
}

CORE_TICKS
get_time(void)
{
//    CORE_TICKS elapsed
//        = (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
    return (CORE_TICKS)gTick;
}

//在对应中断文件中修改
extern uint32_t gTick;
void Tim1_IRQHandler(void)               //1ms
{
	static uint8_t cnt_5ms_flag = 0;
	static uint16_t cnt_1s_flag = 0;
    if(TRUE == Bt_GetIntFlag(TIM1, BtUevIrq))
    {
		gTick++;
        Bt_ClearIntFlag(TIM1,BtUevIrq);  //Timer3模式0 中断标志清除
    }
}

没了,,,跑个分试试,这个是华大的hc32l136:
【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark文章来源地址https://www.toymoban.com/news/detail-787889.html

  • 其他注意
    • ITERATIONS 值太大而运行速度太慢的时候是要等很久的,此时是没有任何输出的,所以可以先设小点,如果报错再加大
    • 对堆栈有很少量的需求,简单测试的最小测试通过的配置:
      【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
    • 在main函数的最后可以加一句方便的打印CoreMarks/MHz,这里48是系统运行频率
      【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
    • 如果出现时间相关参数没打印出来,如下图,先测试下浮点数打印正常,比如打印个3.14试试,很多平台的printf默认是不支持浮点数的,需要想办法实现下,这里贴个RTTview的浮点实现备忘(原文链接:https://blog.csdn.net/jiayujiang/article/details/119216304)。。
      【笔记------coremark】单片机上的跑分库coremark移植,单片机,笔记,单片机,嵌入式硬件,单片机跑分,coremark
        case 'f':
        case 'F':
        {
         float fv;
         fv = (float)va_arg(*pParamList, double);    //取出输入的浮点数值
        
         v = (int)fv;                                //取整数部分
        
         _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); //显示整数,支持负数
        _StoreChar(&BufferDesc, '.');                                        //显示小数点
        
         v = abs((int)(fv * 100));               
         v = v % 100;
        _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags);          //显示小数点后两位
        }
        break;
    

到了这里,关于【笔记------coremark】单片机上的跑分库coremark移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机开发---ESP32S3移植NES模拟器(一)

    《单片机开发—ESP32-S3模块上手》 《单片机开发—ESP32S3移植lvgl+触摸屏》 依旧是参考韦东山老师的作品来移植的 《ESP32|爷青回!ESP32(单片机) NES模拟器_NES游戏机掌机教程(开源+详细讲解实现代码!)》 韦老师已经将代码开源,喜欢的朋友当然是可以去支持一波。 另外还有gi

    2023年04月16日
    浏览(45)
  • 单片机开发---ESP32S3移植NES模拟器(二)

    《单片机开发—ESP32-S3模块上手》 《单片机开发—ESP32S3移植lvgl+触摸屏》 《单片机开发—ESP32S3移植NES模拟器(一)》 暖场视频,小时候称这个为—超级曲线射门!!!!!!!!!! ESP32上天使之翼游戏 看门狗 源码中有两处看门狗的喂狗操作,前期都被注释掉了。 因为开

    2023年04月09日
    浏览(148)
  • POWERLINK协议在stm32单片机+w5500移植成功经验分享

    连续折腾了多个晚上,又趁周末又花了一天时间,终于把powerlink协议移植成功到单片机上啦。本想放弃,但想了下不管我能不能用上,结个尾吧,分享给有需要的人。放弃并不难,但坚持一定很酷。为了移植测试这个协议花了不少血本。stm32开发板就买了两套,其中第一套板

    2024年02月09日
    浏览(60)
  • FreeRTOS_Stm32F103系列单片机标准库移植

    链接:FreeRTOS 下面的教程是基于从github下载压缩包进行的,最好下载这个或者直接看3.1,从我百度网盘下载。如果是别的下载源也问题不大,大同小异。 此时我们需要下载以下两个仓库, 点进去按下面的步骤下载就行了,另一个也是这样下。 链接: FreeRTOS官网 打开链接我们

    2024年01月22日
    浏览(53)
  • 单片机移植freemodbus主机(STM32、GD32、瑞萨、国民技术等)

    从github下载:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 无法下载或者下载太慢可以用资源下载,无需积分。freeModbus主机源码下载 示例代码 参考从机代码创建 将FreeModbus主机源代码拷贝到工程中间件-第三方库-freemodbus源码库:即MiddlewaresThird_PartyFreeModbusMaster文件夹中。

    2024年02月11日
    浏览(47)
  • STM32 -- 实现按键的长按与短按检测(其他单片机可移植)

    目录 资源获取 一 前言 二 思路  三 实现代码 1.主要代码 四 完整代码 Key.h Key.c 该改进版本(1ms太繁琐了,我改成了25ms检测一次)   1.定时器部分 2.按键检测部分  五、参考 欢迎关注微信公众号--星之援工作室 发送(长短按检测) 今天在逛博客的时候,偶然看到了一

    2024年02月12日
    浏览(40)
  • 博文的跑路笔记

    使用flex布局 容器 行内元素 flex布局后, float 、 vertical-align 、 clear 失效。 容器属性 flex-direction :主轴方向 属性值 row :子元素起点在左,左到右。 row-reverse :起点在右,右到左。 column :起点在上,上到下。 column-reverse flex-wrap :换行 nowarp :不换行,缩小各子元素宽度。

    2024年02月04日
    浏览(79)
  • 51单片机笔记

    是指用户自己编写的程序区 ISP区是指芯片出厂时就已经固化在单片机内部的一段程序,STC单片机可以进行ISP串行下载程序,这就是因为芯片在出厂时已经在单片机内部固化了ISP引导码,程序首次上电时先会从ISP区开始执行代码,体现在实际实验中时,就是我们在下载程序时,

    2024年02月12日
    浏览(39)
  • 雅特力单片机开发笔记

    目录 1.开发资源获取 2.硬件资源 2.1 硬件原理图pcb资源 2.2 数据手册 3.SDK软件资源 3.1 keil开发环境配置 3.2 软件开发包说明 3.3 jlink配置 3.4 jlink编程与仿真 3.5 程序相关例程说明 4. 单片机开发工具 5.雅特力单片机论坛         雅特力单片机所有资源都在官方发布,官网地址:雅特

    2023年04月11日
    浏览(39)
  • 51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

    单片机还可以通过IO口实现多种通信。 串行通信 :一条数据线,一次发1bit,发很久。 并行通信 :多条数据线,同时发送,发的速度快多了但是费用高、接收困难、抗干扰性差。 异步通信 :发送和接收方时钟可以不用完全一致。 同步通信 :发送和接收方时钟要完全一致。

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包