嵌入式学习小组
直播中

高阳

7年用户 169经验值
私信 关注

STM32移植uc/os II创建多任务,程序卡在优先级最高的任务中

#define START_TASK_PRIO 9     //开始任务优先级
#define START_STK_SIZE 64     //设置任务堆栈大小
static OS_STK  START_TASK_STK[START_STK_SIZE];   //创建任务堆栈空间
#define LED_TASK_PRIO 6     //led任务优先级
#define LED_STK_SIZE 64     //设置任务堆栈大小
static OS_STK  LED_TASK_STK[LED_STK_SIZE];   //创建任务堆栈空间
#define DHT11_TASK_PRIO 5     //DHT11任务优先级
#define DHT11_STK_SIZE 128     //设置任务堆栈大小
static OS_STK  DHT11_TASK_STK[DHT11_STK_SIZE];   //创建任务堆栈空间
#define PM25_TASK_PRIO 4     //PM25任务优先级
#define PM25_STK_SIZE 256     //设置任务堆栈大小
static OS_STK  PM25_TASK_STK[PM25_STK_SIZE];   //创建任务堆栈空间
#define TOUCH_TASK_PRIO 3     //PM25任务优先级
#define TOUCH_STK_SIZE 256     //设置任务堆栈大小
static OS_STK  TOUCH_TASK_STK[TOUCH_STK_SIZE];   //创建任务堆栈空间
#define BEEP_TASK_PRIO 2     //BEEP任务优先级
#define BEEP_STK_SIZE 64     //设置任务堆栈大小
static OS_STK  BEEP_TASK_STK[BEEP_STK_SIZE];   //创建任务堆栈空间
void start_task(void *pdata)    //开始任务
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit();  //初始化统计任务
OS_ENTER_CRITICAL();  //进入临界区,中断无法打断
OSTaskCreate(led_task,(void *)0,(OS_STK *)&LED_TASK_STK[LED_STK_SIZE-1]
,LED_TASK_PRIO);
OSTaskCreate(DHT11_task,(void *)0,(OS_STK *)&DHT11_TASK_STK[DHT11_STK_SIZE-1]
,DHT11_TASK_PRIO);
OSTaskCreate(PM25_task,(void *)0,(OS_STK *)&PM25_TASK_STK[PM25_STK_SIZE-1]
,PM25_TASK_PRIO);
OSTaskCreate(PM25_task,(void *)0,(OS_STK *)&PM25_TASK_STK[PM25_STK_SIZE-1]
,PM25_TASK_PRIO);
OSTaskCreate(beep_task,(void *)0,(OS_STK *)&BEEP_TASK_STK[BEEP_STK_SIZE-1]
,BEEP_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO);   //挂起起始任务
OS_EXIT_CRITICAL();  //退出临界区,中断可以打断
}
程序开始运行时,LED闪烁,传感器采集的数据通过LCD显示正常。运行一段时间后,程序卡在优先级最高的任务中,且每次程序从运行到卡住的时间不同。
请各位大牛不吝赐教,谢谢!!!

回帖(3)

杨季赟

2020-3-18 09:10:46
看一下是不是栈溢出了!
举报

吕声城

2020-3-18 09:16:21
将栈的值重新设置了,运行了8分钟左右出现卡顿,之前运行3分钟左右出现卡顿!!!在网上查了资料,是不是由于我没有将显示函数单独作为一个任务来运行的原因?
举报

袁丹

2020-3-18 09:21:22
谢谢回复!我刚刚把数据显示单独建立了一个任务来完成,程序能够正常运行了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分