硬汉嵌入式论坛

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

[emWin] 使用GUI_DrawBitmap绘画开机LOGO导致异常是怎么回事

[复制链接]

18

主题

25

回帖

79

积分

初级会员

积分
79
发表于 2025-12-10 18:56:05 | 显示全部楼层 |阅读模式
本帖最后由 blzgods 于 2025-12-10 19:16 编辑

事情的起因是去掉了CHECKBOX0=CHECKBOX_CreateEx(256, 320, 89, 37, 0, WM_CF_SHOW, 0, GUI_ID_CHECK0);后出现进不去LOGO问题,经过排除发现去掉GUI_DrawBitmap(&bmLogo, 330, 111);基本上就没有问题,logo文件大小为250k,添加的话就会随机进入下面两个。但是如果不去掉CHECKBOX0控件就什么问题也没有,去掉CHECKBOX0后要把开机的GUI_DrawBitmap也去掉

#if (OS_CFG_TASK_IDLE_EN > 0u)
void  OS_IdleTask (void  *p_arg)
{
#if ((OS_CFG_DBG_EN > 0u) || (OS_CFG_STAT_TASK_EN > 0u))
    CPU_SR_ALLOC();
#endif


    (void)p_arg;                                                /* Prevent compiler warning for not using 'p_arg'       */

    for (;;) {//断点在这里
#if ((OS_CFG_DBG_EN > 0u) || (OS_CFG_STAT_TASK_EN > 0u))
        CPU_CRITICAL_ENTER();
#if (OS_CFG_DBG_EN > 0u)
        OSIdleTaskCtr++;
#endif
#if (OS_CFG_STAT_TASK_EN > 0u)
        OSStatTaskCtr++;
#endif
        CPU_CRITICAL_EXIT();
#endif

#if (OS_CFG_APP_HOOKS_EN > 0u)
        OSIdleTaskHook();                                       /* Call user definable HOOK                             */
#endif
    }
}
#endif

或者进入
void HardFault_Handler(void)
{
    while (1)
    {
    }
}

回复

使用道具 举报

18

主题

25

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2025-12-10 18:56:52 | 显示全部楼层
本帖最后由 blzgods 于 2025-12-10 18:59 编辑

config设置为
#define USE_EXRAM       1                       /* 根据开发板选择,0为不使用外部 SRAM  */
#define GUI_NUMBYTES    (1024 * 1024)       /* 根据开发板选择,设置 EMWIN 内存大小 */


malloc内容为
/* 定义三个内存池 */
#define SRAMIN                  0                               /* 内部内存池 */
#define SRAMCCM                 1                               /* CCM内存池(此部分SRAM仅仅CPU可以访问!!!) */
#define SRAMEX                  2                               /* 外部内存池(SDRAM) */

/* 定义内存管理表类型,当外扩SDRAM的时候,必须使用uint32_t类型,否则可以定义成uint16_t,以节省内存占用 */
#define MT_TYPE     uint32_t

#define SRAMBANK                3                               /* 定义支持的SRAM块数. */


/* mem1内存参数设定.mem1完全处于内部SRAM里面. */
#define MEM1_BLOCK_SIZE         64                              /* 内存块大小为64字节 */
#define MEM1_MAX_SIZE           60 * 1024                       /* 最大管理内存60K */
#define MEM1_ALLOC_TABLE_SIZE  MEM1_MAX_SIZE/MEM1_BLOCK_SIZE    /* 内存表大小 */
     
/* mem2内存参数设定.mem2处于CCM,用于管理CCM(特别注意,这部分SRAM,仅CPU可以访问!!) */
#define MEM2_BLOCK_SIZE         64                              /* 内存块大小为64字节 */
#define MEM2_MAX_SIZE           60 * 1024                       /* 最大管理内存60K */
#define MEM2_ALLOC_TABLE_SIZE   MEM2_MAX_SIZE/MEM2_BLOCK_SIZE   /* 内存表大小 */
     
/* mem3内存参数设定.mem2的内存池处于外部SDRAM里面 */
#define MEM3_BLOCK_SIZE         64                             /* 内存块大小为64字节 */
#define MEM3_MAX_SIZE           20*1024*1024                   /* 最大管理内存20M */
#define MEM3_ALLOC_TABLE_SIZE   MEM3_MAX_SIZE/MEM3_BLOCK_SIZE  /* 内存表大小 */

/* 内存管理控制器 */
struct _m_mallco_dev
{
    void (*init)(uint8_t);              /* 初始化 */
    uint16_t (*perused)(uint8_t);       /* 内存使用率 */
    uint8_t *membase[SRAMBANK];         /* 内存池 管理SRAMBANK个区域的内存 */
    uint32_t *memmap[SRAMBANK];         /* 内存管理状态表 */
    uint8_t  memrdy[SRAMBANK];          /* 内存管理是否就绪 */
};

extern struct _m_mallco_dev mallco_dev; /* 在mallco.c里面定义 */

void my_mem_set(void *s, uint8_t c, uint32_t count);  /* 设置内存 */
void my_mem_copy(void *des, void *src, uint32_t n);   /* 复制内存 */
void my_mem_init(uint8_t memx);                       /* 内存管理初始化函数(外/内部调用) */
uint32_t my_mem_malloc(uint8_t memx, uint32_t size);  /* 内存分配(内部调用) */
uint8_t my_mem_free(uint8_t memx, uint32_t offset);   /* 内存释放(内部调用) */
uint16_t my_mem_perused(uint8_t memx) ;               /* 获得内存使用率(外/内部调用)  */

/* 用户调用函数 */
void myfree(uint8_t memx, void *ptr);                   /* 内存释放(外部调用) */
void *mymalloc(uint8_t memx, uint32_t size);            /* 内存分配(外部调用) */
void *myrealloc(uint8_t memx, void *ptr, uint32_t size);/* 重新分配内存(外部调用) */


main里为

my_mem_init(SRAMIN);                                                        /* 初始化内部内存池 */
    my_mem_init(SRAMEX);                                                        /* 初始化外部内存池 */  
    my_mem_init(SRAMCCM);                                                       /* 初始化CCM内存池 */


回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 2025-12-11 10:19:26 | 显示全部楼层
方便的话,贴点emWin相关的代码,当前贴出的代码和emWin关系不大
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-9 16:56 , Processed in 0.058925 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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