新手入门
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2016-9-1
- 在线时间
- 5 小时
|
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));
}
|
|