打印
[STM32H7]

用EMWIN播放电影卡在这一句是怎么回事不动了, hMovie = GUI_MOVIE_CreateEx(_GetData, JP

[复制链接]
853|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuling42530000|  楼主 | 2024-6-26 22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用EMWIN播放电影卡在这一句是怎么回事不动了,                 hMovie = GUI_MOVIE_CreateEx(_GetData, JPG_Buffer11, _cbNotify);///卡在创建电影丙句
代码如下
#include "main.h"
#include "led.h"
#include "usart.h"
#include "sdram.h"  
#include "lcd_rgb.h"
#include "lcd_pwm.h"
#include "touch_800x480.h"
//#include "cg.h"
//#include "dqcg.h"
//#include "dqsb.h"
//#include "sb.h"
#include "GUI.h"
#include "WM.h"

#include "ff.h"
#include "ff_gen_drv.h"
#include "sd_diskio.h"


/********************************************** 变量定义 *******************************************/

FATFS         SD_FatFs;                 // 文件系统对象
FRESULT         MyFile_Res;    // 操作结果
char SDPath[4];                        // SD卡逻辑驱动路径
/////////////////////////////////////
static FILE *ffilm;
static GUI_MOVIE_INFO   Info;
static GUI_MOVIE_HANDLE hMovie = 0;
#define        File_BUFFER                        (JPEG_OUTPUT_DATA_BUFFER + 0x200000) // 存储从Fatfs中读到的图片数据(只有使用SD卡或者SPI Flash才用到)
        UINT br;              // 实际读取的字节数      
        FRESULT         JPG_FileRes;            // 操作结果
        FIL                JPG_File;                        // 文件对象
        UINT                JPG_FileCount;                // 数据数量
        FSIZE_t        JPG_FileSize;                 // 文件大小
BYTE buffer1[500000]; // 读取缓冲区


FIL file;
FRESULT res;




uint32_t JPG_Buffer11[1024*4096]__attribute__((at(0xC0CCA000)));        // 存储从SD卡读取到的图片数据


int _GetData(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off)
{
        static int FileAddress = 0;
        FILE *file;
        U32    NumBytesRead;
        U8     * pData;

        pData  = (U8 *)*ppData;
        file = (FILE *)p;
      
        /*
        * 设置读取位置
        */
        if(Off == 1)
        {
                FileAddress = 0;               
        }
        else
        {
                FileAddress = Off;               
        }

        fseek (file, FileAddress, SEEK_SET);
      
        /*
        * 读取数据到缓存
        */
        NumBytesRead = fread (pData, 1, NumBytes, file);

        /*
        * 返回读取的字节数
        */
        return NumBytesRead;
}

////////////////////////////////////////////////////////



/********************************************** 函数声明 *******************************************/

void FatFs_Check(void);                                        // 判断FatFs是否挂载成功,若没有创建FatFs则格式化SD卡
void SystemClock_Config(void);                // 时钟初始化
void MPU_Config(void);                                        // MPU配置
      
/***************************************************************************************************
*        函 数 名: main
*        入口参数: 无
*        返 回 值: 无
*        函数功能: emWin
*        说    明: 无
****************************************************************************************************/
void _cbNotify(GUI_HMEM hMem, int Notification, U32 CurrentFrame)
{
        static uint32_t t0, t1;
      
        (void)t1;
      
        switch (Notification)
        {
                case GUI_MOVIE_NOTIFICATION_PREDRAW:
                        t0 = GUI_GetTime();
                        break;
               
                case GUI_MOVIE_NOTIFICATION_POSTDRAW:
                        t1 = GUI_GetTime() - t0;
                        //printf_videodbg("t = %d\r\n", t1);
                        break;
               
                case GUI_MOVIE_NOTIFICATION_STOP:
                        break;
               
                case GUI_MOVIE_NOTIFICATION_START:
                        break;
               
                case GUI_MOVIE_NOTIFICATION_DELETE:
                        break;
        }
}





int main(void)
{
        //GUI_MEMDEV_Handle         hMem_emf_11;        // 存储设备句柄
      
//        MPU_Config();                                // MPU配置
        SCB_EnableICache();                // 使能ICache
        SCB_EnableDCache();                // 使能DCache
        HAL_Init();                                        // 初始化HAL库
        SystemClock_Config();        // 配置系统时钟,主频480MHz
        LED_Init();                                        // 初始化LED引脚
        USART1_Init();                                // USART1初始化         
        MX_FMC_Init();                                // SDRAM初始化      
        FatFs_Check();                                //判断FatFs是否挂载成功,若没有创建FatFs则格式化SD卡
      
        __HAL_RCC_CRC_CLK_ENABLE();         // 开启CRC校验,STemWin必须要开启               
        GUI_Init();                                                        // GUI初始化      
//        LCD_PWMinit(40);                                        // 背光引脚PWM初始化,占空比40%      
        Touch_Init();                                                // 触摸屏初始化               

// 窗口管理器自动使用多缓冲,可以让动态绘图更加流畅
        WM_MULTIBUF_Enable(1);      

///        GUI_SetFont(&GUI_FontD48);         //设置字体      
///        GUI_SetColor(GUI_BLUE);                //设置画笔色  
///        GUI_SetBkColor(GUI_RED );                 //设置背景色
          GUI_SetFont(&GUI_Font32B_ASCII);         //设置字体      
        GUI_SetColor(GUI_LIGHTGRAY);                //设置画笔色  
        GUI_SetBkColor(GUI_BLACK);                 //设置背景色
        GUI_Clear();
        ////////////////////////////////////////
      
        ///////////////////////////////////////      
        ////        GUI_DispStringAt("cuo  wu",50, 100);                                 ////在指定位置显示字符
        while (1)
        {
      
                JPG_FileSize = f_size(&file);        // 获取文件大小      
        res  =f_open(&file,"1.emf", FA_READ | FA_OPEN_EXISTING);///以只读方式打开文件。      
                                           if (res == FR_OK)////打开文件成功
                                        {
                                                GUI_DispStringAt("da kai chen gong",50, 100);                                 ////在指定位置显示字符
                                // 文件打开成功,现在可以使用 file 结构体进行读写操作
} else {
                GUI_DispStringAt("cuo  wu",50, 100);                                 ////在指定位置显示字符
    // 文件打开失败,处理错误
}
               
        JPG_FileSize = f_read(&file, JPG_Buffer11,JPG_FileSize, &br);////// 读取文件内容到缓冲区
                                                   if (JPG_FileSize == FR_OK)
                                        {
                                        GUI_DispStringAt("du qu wen jian cheng gong",50, 180);                                 ////在指定位置显示字符
                                                                                                //文件打开成功,现在可以使用 file 结构体进行读写操作 FR_DISK_ERR、FR_INT_ERR、FR_NOT_READY
                                        }else {
                GUI_DispStringAt("du qu wen jian shi bai",50, 180);                                 ////在指定位置显示字符
                                                                                                //文件打开失败,处理错误
                                                 f_close(&file);///关闭文件
                                }
////////////////////////////////////////////////////////////////////////////////


                              
                 hMovie = GUI_MOVIE_CreateEx(_GetData, JPG_Buffer11, _cbNotify);///卡在创建电影丙句

                        GUI_MOVIE_SetPeriod(  hMovie, 33);///设置电影帧播放时间33MS
                                        GUI_MOVIE_Show( hMovie, 0, 0, 1);//////在指定位置播放电影
                                        GUI_MOVIE_Pause(  hMovie);///////播放电影
                                        while(1);

                }

                                        }

使用特权

评论回复
沙发
理想阳| | 2024-6-28 14:13 | 只看该作者
没内存了吗?你看看是卡在这个函数得什么判断。

使用特权

评论回复
板凳
liu96jp| | 2024-7-11 13:45 | 只看该作者
在使用emWin播放电影时,如果程序卡在创建电影的语句 hMovie = GUI_MOVIE_CreateEx(_GetData, JPG_Buffer11, _cbNotify);,可能是数据源问题导致的

使用特权

评论回复
地板
y1n9an| | 2024-7-11 14:48 | 只看该作者
函数 _GetData 可能无法正确获取电影数据,导致创建电影失败。请确保 _GetData 函数能够正确读取电影数据并返回给 emWin

使用特权

评论回复
5
su1yirg| | 2024-7-11 16:07 | 只看该作者
JPG_Buffer11 可能没有正确分配或初始化,导致电影数据无法正确加载。请确保 JPG_Buffer11 缓冲区足够大并已正确初始化

使用特权

评论回复
6
tax2r6c| | 2024-7-11 17:04 | 只看该作者
回调函数 _cbNotify 可能存在问题,导致电影播放过程中无法正确通知状态。请确保回调函数 _cbNotify 能够正确处理电影播放状态的通知

使用特权

评论回复
7
l1uyn9b| | 2024-7-11 18:15 | 只看该作者
可能是由于emWin配置不正确或版本不兼容导致的问题。请确保emWin的配置正确,并且与使用的版本兼容

使用特权

评论回复
8
ex7s4| | 2024-7-11 19:22 | 只看该作者
建议您排查检查数据源、数据缓冲区、回调函数等是否正确设置和使用。如果仍然无法解决问题,可以尝试查看emWin的文档或寻求emWin相关技术支持

使用特权

评论回复
9
lix1yr| | 2024-7-12 08:00 | 只看该作者
确保在创建电影时,内存分配足够,避免内存不足导致程序卡死。可以检查内存分配函数的返回值,确保内存分配成功

使用特权

评论回复
10
t1ngus4| | 2024-7-12 09:21 | 只看该作者
检查代码中是否存在死循环、资源泄漏等问题,优化代码结构和逻辑,避免程序陷入无限循环或资源耗尽。

使用特权

评论回复
11
zhizia4f| | 2024-7-12 10:28 | 只看该作者
使用调试工具(如调试器、日志输出等)来跟踪程序执行过程,查看程序在创建电影时的具体执行情况,以便定位问题所在

使用特权

评论回复
12
g0d5xs| | 2024-7-12 12:17 | 只看该作者
如果可能,尝试更新emWin到最新版本,以确保使用的是最新的功能和修复了可能存在的bug

使用特权

评论回复
13
大鹏2365| | 2024-7-28 17:33 | 只看该作者
_GetData 函数负责从文件读取数据并返回给 GUI_MOVIE_CreateEx

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

56

帖子

0

粉丝