OpenEdv-开源电子网

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

关于StEmWin的求助帖,大佬们求救

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-6-20
在线时间
7 小时
发表于 2019-8-15 20:05:26 | 显示全部楼层 |阅读模式
1金钱
我看原子哥的emwin的例程,emwindemo的优先级设置为6,然后我在我的程序中设置为6就跑不起来,要跟start任务同优先级才能跑起来,这是为什么?
#include "Led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "sys.h"
#include "Lcd5510.h"
#include "malloc.h"
#include "GUI.h"
#include "timer.h"
#include "touch.h"
#include "textdisplay.h"
#include "includes.h"  //UCOSIII头文件

/*************************************************************************************************/
/*************************任务优先级*******************/
#define START_TASK_PRIO           3     //初始任务
#define APPTask1_TASK_PRIO        5     //任务1
#define Touch_TASK_PRIO           4     //触控任务
#define EmwinDemo_TASK_PRIO       6     //EmwinDemo任务

/*************************任务堆栈大小****************/
#define START_STK_SIZE            256    //初始任务堆栈大小
#define APPTask1_START_STK_SIZE   64    //任务1堆栈大小
#define Touch_START_STK_SIZE      128     //触摸任务堆栈大小
#define EmwinDemo_START_STK_SIZE  2048   //Demo任务堆栈大小

/*************************任务控制块******************/
OS_TCB StartTaskTCB;                 //初始任务任务控制块
OS_TCB APPTask1TCB;                 //任务1任务控制块
OS_TCB TouchTaskTCB;                //触摸任务控制块
OS_TCB EmwinDemoTaskTCB;           //Demo任务控制块

/************************任务堆栈*********************/
CPU_STK START_TASK_STK[START_STK_SIZE]; //初始任务堆栈
CPU_STK APPTask1_START_STK[APPTask1_START_STK_SIZE];  //任务1堆栈
CPU_STK TouchTask_START_STK[Touch_START_STK_SIZE];  //触摸任务堆栈
CPU_STK EmwinDemoTask_START_STK[EmwinDemo_START_STK_SIZE];  //Demo任务堆栈


/************************任务函数********************/
void start_task(void *p_arg);
void APPTask1(void *p_arg);
void TouchTask(void *p_arg);
void EmwinDemoTask(void *p_arg);
int main(void)                       
{
        OS_ERR err;
        CPU_SR_ALLOC();
  delay_init();            //延迟初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        LED_Init();             //Led灯初始化
        KEY_Init();            //初始化按键
        uart_init(115200);
        TFTLCD_Init();
        tp_dev.init();       
        my_mem_init(SRAMIN);
        /*创建初始任务*/
        OSInit(&err);                       //初始化UCOSIII
        OS_CRITICAL_ENTER();        //进入临界区       
        OSTaskCreate((OS_TCB         * )&StartTaskTCB,           //任务控制
                     (CPU_CHAR *)"start task",                        //任务名字块
                     (OS_TASK_PTR )start_task,                       //任务函数
               (void                 *)0,                                                     //传递给任务函数的参数
                                                         (OS_PRIO          )START_TASK_PRIO,       //任务优先级
                                                         (CPU_STK  *)&START_TASK_STK[0],    //任务堆栈基地址
                     (CPU_STK_SIZE)START_STK_SIZE/10,  //任务堆栈深度限位
                                                         (CPU_STK_SIZE)START_STK_SIZE,                //任务堆栈大小
                     (OS_MSG_QTY)5,                                        //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                                                         (OS_TICK          )0,                                        //当使能时间片轮转时的时间片长度,为0时为默认长度,
                                                         (void           * )0,                                        //用户补充的存储区
                                                         (OS_OPT    )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                                                         (OS_ERR         * )&err);                                //存放该函数错误时的返回值
        OS_CRITICAL_EXIT();        //退出临界区         
        OSStart(&err);      //开启UCOSIII       
        while(1);
}

//初始任务函数
void start_task(void *p_arg)
{
        OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;
        CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
   OSStatTaskCPUUsageInit(&err);          //统计任务               
#endif
       
#ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了测量中断关闭时间
    CPU_IntDisMeasMaxCurReset();       
#endif
       
#if        OS_CFG_SCHED_ROUND_ROBIN_EN  //当使用时间片轮转的时候
         //使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
        OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
#endif       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);  //打开CRC时钟
//        WM_SetCreateFlags(WM_CF_MEMDEV);
        GUI_Init();  //EMWIN初始化
        OS_CRITICAL_ENTER();        //进入临界区       
        //EmwinDemo任务创建
        OSTaskCreate((OS_TCB         * )&EmwinDemoTaskTCB,           //任务控制
                     (CPU_CHAR *)"EmwinDemo Task",                        //任务名字块
                     (OS_TASK_PTR )EmwinDemoTask,                       //任务函数
               (void                 *)0,                                                     //传递给任务函数的参数
                                                         (OS_PRIO          )EmwinDemo_TASK_PRIO,       //任务优先级
                                                         (CPU_STK  *)&EmwinDemoTask_START_STK[0],    //任务堆栈基地址
                     (CPU_STK_SIZE)EmwinDemo_START_STK_SIZE/10,  //任务堆栈深度限位
                                                         (CPU_STK_SIZE)EmwinDemo_START_STK_SIZE,                //任务堆栈大小
                     (OS_MSG_QTY)5,                                        //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                                                         (OS_TICK          )0,                                        //当使能时间片轮转时的时间片长度,为0时为默认长度,
                                                         (void           * )0,                                        //用户补充的存储区
                                                         (OS_OPT    )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                                                         (OS_ERR         * )&err);                                //存放该函数错误时的返回值
        //Touch任务创建
        OSTaskCreate((OS_TCB         * )&TouchTaskTCB,           //任务控制
                     (CPU_CHAR *)"Touch Task",                        //任务名字块
                     (OS_TASK_PTR )TouchTask,                       //任务函数
               (void                 *)0,                                                     //传递给任务函数的参数
                                                         (OS_PRIO          )Touch_TASK_PRIO,       //任务优先级
                                                         (CPU_STK  *)&TouchTask_START_STK[0],    //任务堆栈基地址
                     (CPU_STK_SIZE)Touch_START_STK_SIZE/10,  //任务堆栈深度限位
                                                         (CPU_STK_SIZE)Touch_START_STK_SIZE,                //任务堆栈大小
                     (OS_MSG_QTY)5,                                        //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                                                         (OS_TICK          )0,                                        //当使能时间片轮转时的时间片长度,为0时为默认长度,
                                                         (void           * )0,                                        //用户补充的存储区
                                                         (OS_OPT    )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                                                         (OS_ERR         * )&err);                                //存放该函数错误时的返回值
        //创建APP任务
        OSTaskCreate((OS_TCB         * )&APPTask1TCB,           //任务控制
                     (CPU_CHAR *)"APP Task1",                        //任务名字块
                     (OS_TASK_PTR )APPTask1,                       //任务函数
               (void                 *)0,                                                     //传递给任务函数的参数
                                                         (OS_PRIO          )APPTask1_TASK_PRIO,       //任务优先级
                                                         (CPU_STK  *)&APPTask1_START_STK[0],    //任务堆栈基地址
                     (CPU_STK_SIZE)APPTask1_START_STK_SIZE/10,  //任务堆栈深度限位
                                                         (CPU_STK_SIZE)APPTask1_START_STK_SIZE,                //任务堆栈大小
                     (OS_MSG_QTY)5,                                        //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                                                         (OS_TICK          )0,                                        //当使能时间片轮转时的时间片长度,为0时为默认长度,
                                                         (void           * )0,                                        //用户补充的存储区
                                                         (OS_OPT    )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                                                         (OS_ERR         * )&err);                                //存放该函数错误时的返回值
  OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);                //挂起开始任务
        OS_CRITICAL_EXIT();         //退出临界区
//        OSTaskDel((OS_TCB*)0,&err);        //删除start_task任务自身
}
//EmwinDemo任务
void EmwinDemoTask(void *p_arg)
{
        printf("\r\nDebug1\r\n");
        //GUI_CURSOR_Show(); //显示鼠标
        printf("\r\nDebug4\r\n");
        emwin_texttest();
        //printf("\r\nDebug2\r\n");
        while(1)
        {
                printf("\r\nDebug5\r\n");
                GUI_Delay(100);
        }
}
//触控任务
void TouchTask(void *p_arg)
{
        printf("\r\nDebug2\r\n");
        OS_ERR err;
        while(1)
        {
                GUI_TOUCH_Exec();       
                OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);//延时5ms
        }
}
//任务1
void APPTask1(void *p_arg)
{
        printf("\r\nDebug3\r\n");
        OS_ERR err;
        p_arg = p_arg;
        while(1)
        {
                LED1 = ~ LED1;
                OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);
        }
}


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

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-6-20
在线时间
7 小时
 楼主| 发表于 2019-8-15 20:17:31 | 显示全部楼层
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-6-20
在线时间
7 小时
 楼主| 发表于 2019-8-16 20:36:33 | 显示全部楼层
没有大佬吗?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-6-20
在线时间
7 小时
 楼主| 发表于 2019-8-16 20:37:03 | 显示全部楼层
没有大佬回复吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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