OpenEdv-开源电子网

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

战舰开发板上移植ucos2+emWin,使用GUIBuilder创建的一个按钮 运行后卡死问题,求解

[复制链接]

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2014-8-24 19:48:11 | 显示全部楼层 |阅读模式
5金钱
我战舰开发板上移植ucos2+emWin,
emWin使用的是5.22的
LCD 和触摸屏都正常了,

然后使用5.22里的GUIBuilder,创建了一个button控件,
生成一个FramewinDLG.c文件后加入工程

但是下载到板子之后就死了,进入HardFault_Handler中断了,纠结啊????、、
源码如下

#include"includes.h"
#include"gui.h"
#include"ILI93XX.h"
#include"touch.h"
#include"wm.h"

static OS_STK LcdTaskStk[LCD_TASK_STK_SIZE];
static OS_STK TouchTaskStk[TOUCH_TASK_STK_SIZE];
static OS_STK TouchExecTaskStk[TOUCHEXEC_TASK_STK_SIZE];

WM_HWIN CreateFramewin(void);

void taskLED(void *p_arg)
{
 static u8 uLedFlag=0;
   (void)p_arg;

   LED_GPIO_Config();
   OSTaskCreate(taskLcd,(void *)0,
                &LcdTaskStk[LCD_TASK_STK_SIZE - 1],LCD_TASK_PRIO);
   OSTaskCreate(taskTouch,(void *)0,
                &TouchTaskStk[TOUCH_TASK_STK_SIZE - 1],TOUCH_TASK_PRIO);
   OSTaskCreate(taskTouchExec,(void *)0,
                &TouchExecTaskStk[TOUCHEXEC_TASK_STK_SIZE - 1],TOUCHEXEC_TASK_PRIO);

   
    while(1)
    {
     // LED1(ON);
      //
      //LED1(OFF);
      uLedFlag=~uLedFlag;
      LED2(uLedFlag);
      OSTimeDlyHMSM(0,0,0,500);
      //LED2(OFF);
     // OSTimeDlyHMSM(0,0,0,200);

    }
}

void taskLcd(void *p_arg)
{
   (void)p_arg;
   
  LCDx_Init();
   GUI_Init();
   //GUI_DispString("Hello STemWin!");
  CreateFramewin();
    while(1)
    {
    OSTimeDlyHMSM(0,0,0,200);

 

    }
}


void taskTouch(void *p_arg)
{
   (void)p_arg;
    TP_Init();
  GUI_TOUCH_Exec();
    GUI_CURSOR_Show();
    while(1)
    {

   // GUI_TOUCH_Exec();
    GUI_Exec();
    OSTimeDlyHMSM(0,0,0,100);


 

    }
}


void taskTouchExec(void *p_arg)
{
   (void)p_arg;

    while(1)
    {

    GUI_TOUCH_Exec();
    OSTimeDlyHMSM(0,0,0,20);

    }
}


红色的那一句是FramewinDLG文件里的一个函数,发现只要执行这一句,必死,注释掉就正常
该函数如下

WM_HWIN CreateFramewin(void) {
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}

求解????????????
另外,我在不使用UCOS2的情况下试了一下,能正常运行,


最佳答案

查看完整内容[请看2#楼]

回复【6楼】冰封嗜魔: --------------------------------- 我改成这样就正常了, void taskLcd(void *p_arg) {    (void)p_arg;       LCDx_Init();    GUI_Init();    //GUI_DispString("Hello STemWin!");   CreateFramewin();     while(1)     {     GUI_Exec( ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-24 19:48:12 | 显示全部楼层
回复【6楼】冰封嗜魔:
---------------------------------
我改成这样就正常了,
void taskLcd(void *p_arg)
{
   (void)p_arg;
   
  LCDx_Init();
   GUI_Init();
   //GUI_DispString("Hello STemWin!");
  CreateFramewin();
    while(1)
    {
    GUI_Exec();//===============================增加了这一句
    OSTimeDlyHMSM(0,0,0,200);

 

    } 
}

但是增加的那一句在下面有调用的,
void taskTouch(void *p_arg)
{
   (void)p_arg;
    TP_Init();
  GUI_TOUCH_Exec();
    GUI_CURSOR_Show();
    while(1)
    {

   // GUI_TOUCH_Exec();
    GUI_Exec();
    OSTimeDlyHMSM(0,0,0,100);


 

    } 
}

不知道咋回事  ??、、
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-8-24 20:22:20 | 显示全部楼层
LcdTaskStk[LCD_TASK_STK_SIZE - 1]检查一下这个栈大小?
态度决定一切
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-24 20:42:24 | 显示全部楼层
回复【2楼】冰封嗜魔:
---------------------------------
已经增加到1000了,不小了吧
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-8-24 20:57:37 | 显示全部楼层
回复【3楼】wang12zhe:
---------------------------------
恩,够了。
态度决定一切
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-24 21:13:44 | 显示全部楼层
回复【4楼】冰封嗜魔:
---------------------------------
还是一个样子,咋回事
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-8-24 21:28:06 | 显示全部楼层
回复【5楼】wang12zhe:
---------------------------------
不知道哇,自己仿真看看呢,看内存哪边出问题了。
态度决定一切
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-26 17:54:44 | 显示全部楼层
就这么沉入海底了吗???
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2382
金钱
2382
注册时间
2012-11-22
在线时间
403 小时
发表于 2014-8-26 22:55:53 | 显示全部楼层
回复【8楼】wang12zhe:
---------------------------------
这个函数是重绘用的,单线程运行GUI,必须用这个函数来更新界面的,不然界面就卡死了。
态度决定一切
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-27 13:51:19 | 显示全部楼层
回复【9楼】冰封嗜魔:
---------------------------------
之前也有调用这个函数啊,在一个任务里调用的
关键是为什么在不同位置调用,差别这么大呢
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2014-8-25
在线时间
9 小时
发表于 2014-10-16 03:06:30 | 显示全部楼层
楼主,你的ucos+enwin是怎么移植的,可否分享一下
回复

使用道具 举报

7

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-6-14
在线时间
1 小时
发表于 2015-2-7 17:43:53 | 显示全部楼层
回复【3楼】wang12zhe:
---------------------------------
楼主你好,能否分享下这个程序,现在UCOS ENWIN都移植成功能,就是想学习一下如何用GUIBuilder生成代码加入到工程中
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-3-27
在线时间
2 小时
发表于 2016-3-27 14:24:24 | 显示全部楼层
楼主解决了吗,我也遇到同样的问题了
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2014-12-6
在线时间
10 小时
发表于 2016-11-22 16:17:30 | 显示全部楼层
我去  牛鼻啊,加个GUI_Exec();就好了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 03:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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