OpenEdv-开源电子网

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

求大神帮助,ucos任务的问题

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-3-29
在线时间
0 小时
发表于 2015-3-29 22:27:29 | 显示全部楼层 |阅读模式
5金钱
求大神帮看看这个程序,为什么只有启动任务是运行的,TASK1和TASK2在串口一点显示都没有。。

#include <stdio.h>
#include "hw_config.h"
#include "stm32f10x.h"
#include <ucos_ii.h>
#include "os_cpu.h"
#include  <cpu.h>
#include  <app_cfg.h>
#include "usart.h"

#define    APP_TASK_STK_SIZE 512

static OS_STK AppTask1Stk[APP_TASK1_STK_SIZE]; //????1????
static OS_STK AppTask2Stk[APP_TASK2_STK_SIZE]; //????2????

static void AppTaskCreate(void *p_arg);
static void AppTask1(void *p_arg);
static void AppTask2(void *p_arg);
INT8U  err;
OS_EVENT *Str_Box;

char *s="Hollo!";
char* ss;
/*****************************************************************************
** ????????: int main(void)
** ?????è??: ?÷????????
** ????????: ??
** ????????: ??
*****************************************************************************/
int  main (void)
{
SysTick_Configuration(); //?????¨?±?÷??????
USART_Configuration();   //?®????????

OSInit();       //usos ii??????
printf("Create Task Start;\r\n");

  OSTaskCreate(AppTaskCreate,
                (void *)0,
(OS_STK *)&AppTask1Stk[APP_TASK_STK_SIZE-1],
0);//???¨????

 
if(err==OS_NO_ERR)
   {USART_Send_Str("AppTask Created seccuss;\r\n");}                     //???¨????1????
 else
   {USART_Send_Str("AppTask1 Created Fault;\r\n");}                       //???¨????1?§°? 
    USART_Send_Str("Create a Mbox;\r\n");
    Str_Box=OSMboxCreate((void*)0);
OSStart();      //?????????÷??
}

/*********************************************************************************************************
**                           ????AppTask
********************************************************************************************************/
static  void  AppTaskCreate(void *p_arg)
{
     p_arg=p_arg;
OSTaskCreate(AppTask1,
                (void *)0,
(OS_STK *)&AppTask1Stk[APP_TASK1_STK_SIZE-1],
1);  
  OSTaskCreate(AppTask2,
(void *)0,
(OS_STK *)&AppTask2Stk[APP_TASK2_STK_SIZE-1],
2);

      while(1)
{
OSTimeDlyHMSM(0,0,200,0);
}                                          
}
/*****************************************************************************
** ????????: static  void  AppTask1 (void *p_arg)
*****************************************************************************/
 static  void  AppTask1 (void *p_arg)
 {
p_arg=p_arg;
while(1)
{
printf("Task A send to Taske B a message,it is Hollo;\r\n");
OSMboxPost(Str_Box,s);
OSTimeDlyHMSM(0,0,200,0);
}
}

/*****************************************************************************
** ????????: static  void  AppTask2 (void *p_arg)
*****************************************************************************/
static  void  AppTask2 (void *p_arg)

{   p_arg=p_arg;
   while(1)
{
printf("Task A receive a message;\r\n");
ss=OSMboxPend(Str_Box,10,&err);
if(err==OS_NO_ERR){printf("Task B reveive success;\r\n");}else{printf("no success;\r\n");}
USART_Send_Str(ss);
printf("\r\n");
OSTimeDlyHMSM(0,0,200,0);
}
}
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/





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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-29 22:51:51 | 显示全部楼层
1、AppTaskCreate任务用了任务堆栈AppTask1Stk,结果你的任务AppTask1也用了堆栈AppTask1Stk,没进hardfault算你走运啊。
2、AppTaskCreate创建完其他任务以后最好删除掉。
3、创建任务的时候把OSTaskCreate()函数的返回值打印出来,看任务有没有创建成功
开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-3-30 00:20:17 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
谢谢大神。。我尝试修改一下看看情况怎么样。
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-3-30 00:54:45 | 显示全部楼层
[mw_shl_code=c,true]#include <stdio.h>[/mw_shl_code] [mw_shl_code=c,true]#include "hw_config.h" #include "stm32f10x.h" #include <ucos_ii.h> #include "os_cpu.h" #include <cpu.h> #include <app_cfg.h> #include "usart.h" #define APP_TASK_STK_SIZE 256 static OS_STK AppTaskStk[APP_TASK_STK_SIZE]; static OS_STK AppTask1Stk[APP_TASK1_STK_SIZE]; static OS_STK AppTask2Stk[APP_TASK2_STK_SIZE]; static void AppTaskCreate(void *p_arg); static void AppTask1(void *p_arg); static void AppTask2(void *p_arg); INT8U err; OS_EVENT *Str_Box; char *s="Hollo!"; char* ss; int main (void) { SysTick_Configuration(); USART_Configuration(); OSInit(); //usos ii?????? USART_Send_Str("Create Task Start;\r\n"); err = OSTaskCreate(AppTaskCreate, (void *)0, (OS_STK *)&AppTaskStk[APP_TASK_STK_SIZE-1], 0); if(err==OS_NO_ERR) {USART_Send_Str("AppTask Created seccess;\r\n");} else {USART_Send_Str("AppTask Created Fault;\r\n");} USART_Send_Str("Create a Mbox;\r\n"); Str_Box=OSMboxCreate((void*)0); OSStart(); }[/mw_shl_code] [mw_shl_code=c,true]这一段代码和[/mw_shl_code] [mw_shl_code=c,true]
[mw_shl_code=c,true]#include <stdio.h> #include "hw_config.h" #include "stm32f10x.h" #include <ucos_ii.h> #include "os_cpu.h" #include <cpu.h> #include <app_cfg.h> #include "usart.h" #define APP_TASK_STK_SIZE 256 static OS_STK AppTaskStk[APP_TASK_STK_SIZE]; static OS_STK AppTask1Stk[APP_TASK1_STK_SIZE]; static OS_STK AppTask2Stk[APP_TASK2_STK_SIZE]; static void AppTaskCreate(void *p_arg); static void AppTask1(void *p_arg); static void AppTask2(void *p_arg); INT8U err; int main (void) { SysTick_Configuration(); USART_Configuration(); OSInit(); err = OSTaskCreate(AppTaskCreate, (void *)0, (OS_STK *)&AppTaskStk[APP_TASK_STK_SIZE-1], 0); if(err==OS_NO_ERR) {USART_Send_Str("AppTask Created seccess;\r\n");} else {USART_Send_Str("AppTask Created Fault;\r\n");} OSStart(); return 0 ; }[/mw_shl_code]

这两段代码几乎一样的任务创建方式,而且都是同一个 工程里修改的,为什么上面的代码在串口显示失败,而下面的显示任务创建成功呢。。。求教[/mw_shl_code]
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-30 10:51:07 | 显示全部楼层
把err打印出来,看一下是在调用OSTaskCreate()函数创建任务的时候是什么错误导致的任务创建失败。
开往春天的手扶拖拉机
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-3-30 13:16:58 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
错误代码是60  也就是OS_ERR_TASK_CREATE_ISR ,我在网上查了一下,好像关于这个的不多,不懂是什么意思,
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-3-30 13:22:48 | 显示全部楼层
回复【6楼】GodMan:
---------------------------------
我可不可以把工程发上来你帮我看看哪里错了?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 14:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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