用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);
}
} |