OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3138|回复: 9

为什么使用H7的硬件jpeg解码同一张图片,每次的时间相差很大

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-25
在线时间
4 小时
发表于 2019-12-5 20:22:59 | 显示全部楼层 |阅读模式
1金钱
我设置了time3,用来记录硬件jpeg解码的时间,持续解码同一张图片,每次解码的时间从10ms至50ms之间,为什么时间相差很大。

在u8 ai_load_picfile(const u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 fast)中:
计算硬件界面的时间:
time3_start();
res=hjpgd_decode((u8*)filename);//采用硬解码JPG/JPEG
time3_stop();

代码:阿波罗STM32H7开发板 实验44 图片显示实验-HAL库函数版

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-25
在线时间
4 小时
 楼主| 发表于 2019-12-5 20:24:59 | 显示全部楼层
谁可以帮帮我改个名字吗
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-12-5 22:25:18 | 显示全部楼层
帮顶一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-12-6 02:36:01 | 显示全部楼层
是同一张图片还是不同图片?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-25
在线时间
4 小时
 楼主| 发表于 2019-12-6 14:16:42 | 显示全部楼层
正点原子 发表于 2019-12-6 02:36
是同一张图片还是不同图片?

同一张图片
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-12-7 03:06:02 | 显示全部楼层

那不应该,你直接测试的我们例程么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-25
在线时间
4 小时
 楼主| 发表于 2019-12-9 17:12:59 | 显示全部楼层
正点原子 发表于 2019-12-7 03:06
那不应该,你直接测试的我们例程么?

是的,修改的只有这些地方
main()中:
  设置定时器:
  TIM3_Init(5000-1,20000-1);   //定时器3初始化,定时器时钟为200M,分频系数为200-1,
                               //所以定时器3的频率为200M/20000=10000,自动重装载为5000-1,那么定时器周期就是500ms

timer.c中:
  //定时器3中断服务函数
  void TIM3_IRQHandler(void)
  {
    HAL_TIM_IRQHandler(&TIM3_Handler);
    time3_sec++;
  }

  //开始time3
  void time3_start(void)
  {
    time3_sec=0;
    time3_us=0;
    HAL_TIM_Base_Start_IT(&TIM3_Handler);
  }

  //暂停time3
  u32 time3_stop(void)
  {
    //获取计数值cnt
    time3_us=__HAL_TIM_GET_COUNTER(&TIM3_Handler);       //获取本次计时的计数值
    HAL_TIM_Base_Stop_IT(&TIM3_Handler);
  }

  //将time3_us+time3_sec*1000000装换为字符串,并赋值到
  void time3_ds(u8 *sec_num)
  {
    u32 num;
    num=time3_us*100+time3_sec*500000;       //得出转换的时间
    sprintf((char*)sec_num, "%d" , num);
  }

piclib.c中:
在ai_load_picfile()中:
  time3_start();
  res=hjpgd_decode((u8*)filename);//采用硬解码JPG/JPEG
  time3_stop();
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-12-10 02:04:17 | 显示全部楼层
把hjpgd_decode,改成delay_ms(100),再看看你的结果
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-11-25
在线时间
4 小时
 楼主| 发表于 2019-12-10 19:51:09 | 显示全部楼层
正点原子 发表于 2019-12-10 02:04
把hjpgd_decode,改成delay_ms(100),再看看你的结果

现象还是一样的,是程序的其它地方设置了中断吗?会是什么原因呢?

ai_load_picfile()函数里改成这样了
        time3_start();
         //res=hjpgd_decode((u8*)filename);//采用硬解码JPG/JPEG
        delay_ms(100);
        time3_stop();
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-12-11 23:09:52 | 显示全部楼层
asdn 发表于 2019-12-10 19:51
现象还是一样的,是程序的其它地方设置了中断吗?会是什么原因呢?

ai_load_picfile()函数里改成这样 ...

每次都不一样?那就是你的计时代码有问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表