OpenEdv-开源电子网

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

F746适用IAP启动RTX+emwin后卡死

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2016-9-1
在线时间
5 小时
发表于 2016-9-1 12:24:49 | 显示全部楼层 |阅读模式
1金钱
用的是stm32F746-disco,移植的IAP后,跳转到RTX+emwin+SIF字体库可以正常运行,但是一旦在任务中创建对话框,程序就不能正常运行,调试可以运行一次,断电后程序就无法运行,取消掉有对话框的任务,重新更新后可以运行,不断电,在加上对话框任务也能运行,就是不能断电。
但是把RTX+emwin+SIF字体直接下载到0x80000000后,运行正常,断电后也正常,这是怎么回事啊,弄了半天了都没有找出原因来,任务代码是这样的

#include "stm32f7xx_hal_conf.h"
#include "My_RTX_App.h"
#include "GUI.h"
#include "DIALOG.h"

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

static U32 OSTaskUse=0,OSTaskRe=0;
static BIT OSTaskflag=DISABLE;
static int pre=0;
OS_TID id1, id2, id3, TaskId4,TaskId5,ShowID,TimeID,loadzi,MyWin;
GUI_FONT SIF_Font;
extern WM_HWIN CreateFramewin(void);

void taskcount(void)
{
        OSTaskUse++;
}

extern __task void SysTick_Task (void);


__task void TaskUsePrecent(void)
{
  os_itv_set(1000);
        while(1)
        {
                os_itv_wait();
                if(OSTaskflag==ENABLE)
                {
                        pre=100-OSTaskRe*100/OSTaskUse;
                        OSTaskRe=0;
                        OSTaskflag=DISABLE;
                }
        }
}



__task void GUITouchSupport (void)
{
       
        while(1)
        {       
                GUI_TOUCH_Exec();
                os_dly_wait(50);
        }
}


__task void UserTask (void)
{
        int xSize,ySize;
        int x,y;
        U32 err_code;
        U32 CpuID[3];
  U32 Lock_Code,CPUFLASHSize;
        GUI_Init();
        GUI_CURSOR_Show();
        GUI_SetBkColor(GUI_WHITE);
        GUI_SetColor(GUI_BLUE);
        GUI_Clear();
        CpuID[0]=*(uint32_t*)(0x1FF0F420);
        CpuID[1]=*(uint32_t*)(0x1FF0F424);
        CpuID[2]=*(uint32_t*)(0x1FF0F428);
        Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
        CPUFLASHSize=*(uint16_t*)(0x1FF0F442);
        while(1) {
//        GUI_SetBkColor(GUI_WHITE);
//        GUI_SetColor(GUI_BLUE);
// GUI_Clear();
        GUI_SetBkColor(GUI_WHITE);
        GUI_SetColor(GUI_BLUE);
  xSize = LCD_GetXSize();
  ySize = LCD_GetYSize();
        x=GUI_TOUCH_GetxPhys();
        y=GUI_TOUCH_GetyPhys();
        GUI_SetFont(&SIF_Font);
        GUI_UC_SetEncodeUTF8();
        GUI_DispStringHCenterAt("设备硬件信息", xSize / 2, 0);
        //GUI_DispDecAt(i++, xSize/2, ySize-50, 5);       
        GUI_DispStringAt("X像素:", 10, 20);
        GUI_DispStringAt("Y像素:", 10, 40);
        GUI_DispDecAt(xSize, 150, 20, 3);       
        GUI_DispDecAt(ySize, 150, 40, 3);
        GUI_DispStringAt("X触摸像素:", 10, 60);
        GUI_DispStringAt("Y触摸像素:", 10, 80);
        GUI_DispDecAt(x, 150, 60, 3);       
        GUI_DispDecAt(y, 150, 80, 3);
        GUI_DispStringHCenterAt("By HouDaShuai. 2016/8/25", xSize/2, ySize-20);
        GUI_DispStringAt("CPU 负载:", 10, 100);
        GUI_DispDecAt(pre, 150, 100, 3);
        GUI_DispStringAt("CPU 编号:", 10, 120);
        GUI_DispDecAt(Lock_Code,150,120,10);
        GUI_DispStringAt("CPU Flash 空间:", 10, 140);
        GUI_DispDecAt(CPUFLASHSize,150,140,4);
        GUI_DispStringAt("GUI 版本:", 10, 160);
        GUI_DispDecAt(GUI_VERSION,150,160,5);
        GUI_DispStringAt("操作系统版本:", 10, 180);
        GUI_DispDecAt(__RL_ARM_VER ,150,180,3);
        GUI_DispStringAt("文件系统版本:", 10, 200);
        GUI_DispDecAt(_FATFS ,150,200,5);
//        CreateFramewin();
        os_dly_wait(700);
        }
}



__task void GUIRefresh (void)
{
        U32 NewTime;
        U32 err_code;
        NewTime=os_time_get();
  while(1)
        {
                OSTaskUse++;
                if(os_time_get()-NewTime>=500)
                        break;
        }
        LoadztCreate();
        while(1)
        {
                GUI_Exec();
                os_dly_wait(50);
        }
}
__task void OsIdel(void)
{
        U32 NewTime=0,OldTime=0;
        while(1)
        {
                OldTime=os_time_get();
                if(OSTaskflag==DISABLE){
                while(1)
                {
                  OSTaskRe++;
                        NewTime=os_time_get();
                        if(NewTime-OldTime>=500)
                        {
                                OldTime=NewTime;
                                if(OSTaskRe>OSTaskUse)
                                        OSTaskUse=OSTaskRe;
                                OSTaskflag=ENABLE;
                                break;
                        }
                }
        }
        }
}



__task void MyShowJPG(void)
{
        GUI_HMEM hMem;
        FRESULT result;
        FIL file;
        UINT bw;
        char *_acBuffer2;
        U32 err_code;
        GUI_JPEG_INFO JpegInfo;
//        OS_RESULT sdstu;
        FATFS SDFatFs;  /* File system object for SD card logical drive */
//        FIL MyFile;     /* File object */
        char SDPath[4]; /* SD card logical drive path */
        GUI_Init();
//        GUI_CURSOR_Show();
        GUI_SetBkColor(GUI_WHITE);
        GUI_SetColor(GUI_BLUE);
  GUI_Clear();
//       
        while(1){
       
                sdmont:         while(BSP_SD_IsDetected() != SD_PRESENT)
  {
                os_dly_wait(5000);
  }
        if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
        {
        if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
    {
                        goto sdmont;
    }
        }
        /* 申请一块内存空间 并且将其清零 */
        //MyFats();
        while(1) {
               
    hMem = GUI_ALLOC_AllocZero(1024*512);
        /* 将申请到内存的句柄转换成指针类型 */
        _acBuffer2 = GUI_ALLOC_h2p(hMem);

//        while(BSP_SD_IsDetected() != SD_PRESENT)
//        {
//                os_dly_wait(3000);
//  }
       
//        sdstu=os_evt_wait_and(0,0xffff);
        /* 打开文件 */
//  rt_tsk_lock();               
        result = f_open(&file,"2.jpg", FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
//        rt_tsk_unlock();       
        if (result != FR_OK)
        {
        //        return;
        }

        /* 加载图片到内存中 */
        rt_tsk_lock();       
        result = f_read(&file, _acBuffer2, file.fsize, &bw);
        rt_tsk_unlock();       
          if (result != FR_OK)
          {
//                return;
          }


        GUI_JPEG_GetInfo(_acBuffer2, file.fsize, &JpegInfo);
        GUI_JPEG_Draw(_acBuffer2,
                                  file.fsize,
                              300,
                              20);

        GUI_ALLOC_Free(hMem);
        f_close(&file);
       
                os_dly_wait(5000);
//                GUI_Clear();
        }
}
}





__task void MyUserTime(void)
{
        uint8_t Hour=12,Min=0,Sec=0;
        U32 NewTime=0,OldTime=0;
        U32 err_code;
        GUI_Init();
        GUI_SetBkColor(GUI_WHITE);
        GUI_SetColor(GUI_BLUE);
        GUI_Clear();
        NewTime=os_time_get();
        OldTime=NewTime;
        os_itv_set(995);
        while(1)
        {
                os_itv_wait();
                OldTime=NewTime;
                Sec++;
                if(Sec>=60)
                {
                        Min++;
                        Sec=0;
                }
                if(Min>=60)
                {
                        Min=0;
                        Hour++;
                }
                if(Hour>23)
                {
                        Hour=0;
                }
                GUI_DispDecAt(Hour ,220,230,2);
                GUI_DispString(":");
                GUI_DispDec(Min,2);
                GUI_DispString(":");
                GUI_DispDec(Sec,2);
        }
}





__task void MyZiTiLoad(void)
{
        FRESULT result;
        FIL file;
        UINT bw;
        char *_acBuffer;
        U32 err_code;
        FATFS SDFatFs;  /* File system object for SD card logical drive */
        char SDPath[4],takflag=1; /* SD card logical drive path */       
        GUI_Init();
        while(BSP_SD_IsDetected() != SD_PRESENT)
  {
                goto appcreat;
  }
        if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
        {
        if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
    {
                        os_dly_wait(5000);
    }
        }
        else
        {
                os_dly_wait(5000);
        }

        _acBuffer = (char *)0xC0300000;
        result = f_open(&file, "0:/system/font/son.sif", FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);       
        rt_tsk_lock();       
        result = f_read(&file, _acBuffer, file.fsize, &bw);
        GUI_SIF_CreateFont(_acBuffer, &SIF_Font, GUI_SIF_TYPE_PROP);
        rt_tsk_unlock();
        f_close(&file);
        appcreat:AppTaskCreate ();
        os_tsk_delete_self();
}

extern void MainTask(void);

__task void MyWindows(void)
{
        MainTask();
}



static void LoadztCreate (void)
{

        loadzi=os_tsk_create_user(MyZiTiLoad,6,&loadzt,sizeof(loadzt));
}



static void AppTaskCreate (void)
{
        os_tsk_create(SysTick_Task, 2);               
        id1 = os_tsk_create_user (GUITouchSupport, 2, &stk1, sizeof(stk1));
        id2 = os_tsk_create_user (UserTask, 4, &stk2, sizeof(stk2));
        TaskId4=os_tsk_create_user(TaskUsePrecent,3,&Taskstk4,sizeof(Taskstk4));
        TaskId5=os_tsk_create_user(OsIdel,1,&Taskstk5,sizeof(Taskstk5));
        ShowID=os_tsk_create_user(MyShowJPG,4,&ShowJpg,sizeof(ShowJpg));
        TimeID=os_tsk_create_user(MyUserTime,3,&UserTime,sizeof(UserTime));
        MyWin=os_tsk_create_user(MyWindows,5,&Mywinstk,sizeof(Mywinstk));
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-9-3 22:02:32 | 显示全部楼层
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-1-21
在线时间
2 小时
发表于 2019-1-21 16:41:03 | 显示全部楼层
问题找到没,我遇到同样的问题,急求解决方法
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-3-5
在线时间
0 小时
发表于 2019-3-5 11:43:44 | 显示全部楼层
同问,我的f429,iap后直接卡死,只要屏幕是亮的,iap前没事
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-23 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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