OpenEdv-开源电子网

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

请教,FreeRTOS创建任务不成功

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
发表于 2018-1-17 14:46:06 | 显示全部楼层 |阅读模式
1金钱
#define configMAX_PRIORITIES                     ( 32 )
#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                    ((size_t)70*1024)
#define configMAX_TASK_NAME_LEN                  ( 16 )


//任务优先级
#define LED_TASK_PRIO                3                               
//任务堆栈大小       
#define LED_STK_SIZE                 128  
//任务句柄
osThreadId LEDHandle;
//任务函数
void led_task(void *pvParameters);


//任务优先级
#define TCP_Client_TASK_PRIO                24                                //数字越大,任务等级越高
//任务堆栈大小       
#define TCP_Client_STK_SIZE                 1000  
//任务句柄
osThreadId TCP_Client_Handler;
//任务函数
void tcp_client_task(void *pvParameters);

//接收任务
//任务优先级
#define TCP_Client_Rec_TASK_PRIO                22                                //数字越大,任务等级越高
//任务堆栈大小       
#define TCP_Client_Rec_STK_SIZE                 1000  
//任务句柄
osThreadId TCP_Client_Rec_Handler;
//任务函数
void tcp_client_rec_task(void *pvParameters);


void led_task(void  * argument)
{
    u16 uxHighWaterMark ;
    MX_LWIP_Init();
    CreateSgLinkListInit();                //初始化接收和发送的链表
    net_connect_server();
  while(1)
  {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    osDelay(500);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
    osDelay(500);  
         uxHighWaterMark = uxTaskGetStackHighWaterMark(LedHandle);   
        printf("LedHandle余栈空间是多少:%d.\r\n",uxHighWaterMark);
         printf("剩余的内存空间是:%d.\r\n",xPortGetFreeHeapSize());          
  }
}

void net_connect_server(){
        int res;
        taskENTER_CRITICAL();
    //创建TCP开始任务
    res =xTaskCreate((TaskFunction_t )tcp_client_task,            //任务函数
                (const char*    )"tcp_client_task",          //任务名称
                (uint16_t       )TCP_Client_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )TCP_Client_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&TCP_Client_Handler);   //任务句柄   
        printf("-------res = %d-----------\r\n",res);

        res = xTaskCreate((TaskFunction_t )tcp_client_rec_task,            //任务函数
                (const char*    )"client_rec_task",          //任务名称
                (uint16_t       )TCP_Client_Rec_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )TCP_Client_Rec_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&TCP_Client_Rec_Handler);   //任务句柄   
                               
                printf("-------res = %d-----------\r\n",res);
        taskEXIT_CRITICAL();                               
}

创建任务 printf("-------res = %d-----------\r\n",res);  输出永远都是 -1  
搞不明白了,空间应该是有的。昨天还能运行,今天就不行了。请大神帮忙看看。。

最佳答案

查看完整内容[请看2#楼]

谢谢,找到原因了,是前面初始化链表的时候内存出错了,所以出现了申请内存失败的原因
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-1-17 14:46:07 | 显示全部楼层
谢谢,找到原因了,是前面初始化链表的时候内存出错了,所以出现了申请内存失败的原因
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-1-17 15:21:53 | 显示全部楼层
请大声帮忙看看,非常的疑惑啊,我在创建任务的函数中查了,内存是够的,不知道为什么
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2018-1-17 22:12:41 | 显示全部楼层
本帖最后由 八度空间 于 2018-1-17 22:13 编辑

将任务中while中的内容屏蔽掉,加上一句VTaskDelay(10);,这样运行以下看下什么结果[mw_shl_code=applescript,true]void led_task(void  * argument)
{
    u16 uxHighWaterMark ;
    MX_LWIP_Init();
    CreateSgLinkListInit();                //初始化接收和发送的链表
    net_connect_server();
  while(1)
  {
        vTaskDelay(10);
        /*HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    osDelay(500);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
    osDelay(500);  
         uxHighWaterMark = uxTaskGetStackHighWaterMark(LedHandle);   
        printf("LedHandle余栈空间是多少:%d.\r\n",uxHighWaterMark);
         printf("剩余的内存空间是:%d.\r\n",xPortGetFreeHeapSize());          */
  }
}[/mw_shl_code]
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-1-18 11:08:53 | 显示全部楼层
找到原因了,是前面初始化链表的时候内存出错了,所以出现了申请内存失败的原因
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-1-18 11:09:06 | 显示全部楼层
找到原因了,是前面初始化链表的时候内存出错了,所以出现了申请内存失败的原因
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-1-31 21:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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