硬汉嵌入式论坛

 找回密码
 立即注册
查看: 890|回复: 4
收起左侧

[JPEG] STM32H7B0硬解压JPEG等待超时处理

[复制链接]

11

主题

28

回帖

61

积分

初级会员

积分
61
发表于 2022-7-17 21:29:32 | 显示全部楼层 |阅读模式
函数功能:        等待硬件JPEG解码结束
*************************************************************************************************/
void Reset_Handler(void);   //软件复位

uint8_t JPEG_Decode_WaitingforEnd (void)
{
                uint32_t ExecutionTime_Begin;                // 开始时间
        ExecutionTime_Begin         = HAL_GetTick();        // 获取 systick 当前时间,单位ms       
        while(Jpeg_HWDecodingState == DecodeStart)                                //        等待解码完成
            {
                                if((HAL_GetTick()-ExecutionTime_Begin)>200)
                                                   Reset_Handler(); //软件复位
                       
                                //JPEG->CR|=0x00006001;                  //JPEG 控制寄存器 ()
                                //JPEG->CONFR0=0;
                                //return 2;  // 返回解码完成标志       
                                //hjpeg->Instance->CONFR0 &=  ~JPEG_CONFR0_START;//位0 =0停止编码或解码过程
                       
            }
                        //以上都是添加的超时处理
        //while(Jpeg_HWDecodingState == DecodeStart);                                //        等待解码完成
        return DecodeComplete;  // 返回解码完成标志
}
原来程序就是最后两行,有的图片解码不能完成,就在这里while(Jpeg_HWDecodingState == DecodeStart);无限等待。
加上时间判断,就能够跳出来。
问题:直接返回解码完成标志,可能解码器实际上没有完成,程序依然是死机(我没有分析在哪里?)
解决:我用粗暴的方法,超时就软件复位Reset_Handler(); //软件复位
希望能够中止解码,试了好多办法,见注释掉的一些语句。都不行。
有什么办法终止解码?让程序可以正常处理下一张图片?欢迎交流!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2022-7-18 00:02:55 | 显示全部楼层
如果是硬件异常,时候NVIC复位。
如果只是卡死了,循环超时,跳出循环,复位JPEG硬件外设,如果还用MDMA,复位MDMA,重新初始化。
回复

使用道具 举报

11

主题

28

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2022-7-18 09:20:36 | 显示全部楼层
谢谢版主!这个应用怎么做呢?
复位JPEG硬件外设,如果还用MDMA,复位MDMA
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2022-7-18 12:10:32 | 显示全部楼层
新洲罗远 发表于 2022-7-18 09:20
谢谢版主!这个应用怎么做呢?
复位JPEG硬件外设,如果还用MDMA,复位MDMA

有专门的DeInit函数可以使用。
回复

使用道具 举报

11

主题

28

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2022-7-18 22:45:33 | 显示全部楼层
谢谢!我再试试
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 12:08 , Processed in 0.203875 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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