新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2013-4-27
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-6-13 11:05:03
|
显示全部楼层
我想把写SD卡的任务挂起,但是现在又恢复不了,退出这个时要用到OSTaskDel,我把恢复任务加在前面,OSTaskDel会进入硬件错误中断(HardFault_Handler),加在后面有运行不到,求指点啊。
下面是运行任务的代码
初始菜单:
void Task_Menu(void *pdata)
{
GUI_Init();
MainMenu_Init();
while(1) {
if(TouchCmd == 1 && Menu_ID == MainMenu_ID){
TouchCmd = 0;
switch(GUI_GetKey()) {
case GUI_ID_BUTTON0:
GUI_MessageBox("Function does not support!","GUI MessageBox0",GUI_MESSAGEBOX_CF_MOVEABLE);
break;
case GUI_ID_BUTTON1: //退出主界面并创建文件浏览任务
Out_MainMenu();
//GUI_SetColor(GUI_BLACK);//
//GUI_MessageBox("Function does not support!","GUI MessageBox1",GUI_MESSAGEBOX_CF_MOVEABLE);
OSTaskCreate(Task_FileBrowser, (void * )0, (OS_STK *)&TASK_FileBrowser_STK[FileBrowser_STK_SIZE-1], FileBrowser_TASK_Prio);
break;
case GUI_ID_BUTTON2:
OSTaskSuspend(ADPut_STK_Prio);//任务挂起
OSTaskCreate(Task_TextBrowser, (void * )0, (OS_STK *)&TASK_TextBrowser_STK[TextBrowser_STK_SIZE-1], TextBrowser_TASK_Prio);
// OSTaskResume(ADPut_STK_Prio);//运行任务
break;
case GUI_ID_BUTTON3: //退出主界面并创建设置任务
Out_MainMenu();
//WM_SetDesktopColor(GUI_BLACK);
//GUI_SetColor(GUI_BLACK);
Out_MainMenu();
OSTaskCreate(Task_Setting, (void * )0, (OS_STK *)&TASK_Setting_STK[Setting_STK_SIZE-1], Setting_TASK_Prio);
break;
case GUI_ID_BUTTON4:
Out_MainMenu();
OSTaskCreate(Task_ADC, (void * )0, (OS_STK *)&TASK_ADC_STK[ADC_STK_SIZE-1], ADC_TASK_Prio);
break;
default:
TouchCmd = 1;
break;
}
}
WM_MoveCtrl();
GUI_Exec();//重绘
OSTimeDly(3);
}
}
读txt文件任务:
void Task_TextBrowser(void *pdata)
{
WM_HWIN hWM;
OS_CPU_SR cpu_sr;
u16 br = 0;
u16 File_Buffer[32];
GUI_CreateDialogBox(TextBrowseDialog, GUI_COUNTOF(TextBrowseDialog), TextBrowseCallBack, 0, 0, 0);
//建立一个非阻塞式的对话框,0(表示没有父窗口),0(x),0(y)
//TextBrowseDialog(定义包含在对话框中所有控件的资源表的指针)
//GUI_COUNTOF(包含在对话框中所有控件的数量)
//TextBrowseCallBack(回调函数的指针)
Exit_Browser = 0;
/*******************************************************************************************************/
while(1){
if(TouchCmd == 1){
TouchCmd = 0;
}
if(Exit_Browser == Back){
Exit_Browser = 0;
GUI_CreateDialogBox(TextBrowseDialog, GUI_COUNTOF(TextBrowseDialog), TextBrowseCallBack, 0, 0, 0);
//建立一个非阻塞式的对话框
}
if(Exit_Browser == Exit){//按文件浏览的exit的按钮,退出进入主界面
WM_SetDesktopColor(DesktopColor);//设置背景颜色
Go_MainMenu(); //进入主界面
OSTaskDel(OS_PRIO_SELF); //删除自己
//OSTaskResume(ADCMenu_STK_Prio);//运行任务
OSTaskResume(ADPut_STK_Prio);//运行任务
}
else if(Exit_Browser == OpenFile) {//打开文档
Exit_Browser = 0;
OS_ENTER_CRITICAL(); //宏,进入临阶段
f_open(&f_file,(const TCHAR*)buf1,FA_READ);//打开文件
f_read(&f_file,File_Buffer,1020,(UINT*)&br);
f_close(&f_file);//关闭文件
OS_EXIT_CRITICAL();//宏,退出临界段(开中断)
buf1[30] = 0;
WM_SetDesktopColor(DesktopColor);//设置背景颜色
GUI_Exec();//重绘
hWM = GUI_CreateDialogBox(TextViewDialog, GUI_COUNTOF(TextViewDialog), TextViewCallBack, 0, 0, 0);
//建立一个对话框
MULTIEDIT_SetText(WM_GetDialogItem(hWM,GUI_ID_MULTIEDIT0), (const char*)File_Buffer);
//WM_GetDialogItem返回一个对话框项目(控件)的窗口句柄
//设置MultiEdit的显示文本,MULTIEDIT,可以多行输入
}
OSTimeDly(10); //保证50Hz的执行频率
}
} |
|