OpenEdv-开源电子网

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

求助:STM32F407运行FreeRtos后进HardFault_Handler的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-4
在线时间
3 小时
发表于 2020-3-7 16:15:57 | 显示全部楼层 |阅读模式
2金钱
FreeRtos目前已经移植成功,任务切换和消息也正常。
但是正式运用到项目上时,发现诡异的现象,运行其中一个任务的xQueueReceive就进HardFault_Handler了。

目前代码已经被最精简如下。下面的“double val = 0.0;”代码行一旦屏蔽,运行就正常了。调了两天都没结果,望大侠帮助。


xQueueHandle q1;
xQueueHandle q2;
xQueueHandle q3;

void WorkTask_Work1()
{
    int xResult;
    uint8 msg1 = FALSE;
    while(1)
    {
        xResult = xQueueReceive( q1, &msg1, 200 );
        if(xResult == pdPASS)
        {   
            double val = 0.0;   //这一行注释掉,程序运行就正常了,奇怪?!
            vTaskDelay(10);
        }
    }
}

void WorkTask_Work2(void)
{
    int xResult;
    uint8 msg1, msg2= FALSE;
    while(1)
    {
        xResult = xQueueReceive( q2, &msg1, 200 );
        if(xResult == pdPASS)
        {
        }
        xResult = xQueueReceive( q3, &msg2, 200 );
        if(xResult == pdPASS)
        {
        }
    }
}

void WorkTask_Test(void)
{
    WorkTask_Reset();
    q1 = xQueueCreate(1, sizeof(uint8));
    q2 = xQueueCreate(1, sizeof(uint8));
    q3 = xQueueCreate(1, sizeof(uint8));
    xTaskCreate((pdTASK_CODE)WorkTask_Work1,    "WorkTask_Work1",  1024,  NULL, 2, NULL);
    xTaskCreate((pdTASK_CODE)WorkTask_Work2,    "WorkTask_Work2",  1024,  NULL, 2, NULL);
    vTaskStartScheduler();
    while(1);
}


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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10566
金钱
10566
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-3-7 17:23:54 | 显示全部楼层
改大栈大小或者看下是否内存有越界行为
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-7 17:35:29 | 显示全部楼层
peng1554 发表于 2020-3-7 17:23
改大栈大小或者看下是否内存有越界行为

感谢回复。
“double val = 0.0;" 这句话去了就不会进hardFault,程序运行也可以按预期进行。这句话应该没有内存越界。

我以下这两个地方修改了一下,还是不行。看看还有改哪里(1)FreeRTOSConfig.h
#define configTOTAL_HEAP_SIZE                ( ( size_t ) ( 48 * 1024 ) )(2)以上代码中
xTaskCreate((pdTASK_CODE)WorkTask_Work1,    "WorkTask_Work1",  4096,  NULL, 2, NULL);
xTaskCreate((pdTASK_CODE)WorkTask_Work2,    "WorkTask_Work2",  4096,  NULL, 2, NULL);



回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-7 17:38:34 | 显示全部楼层
Stack_Size      EQU      0x00002000
Heap_Size       EQU     0x00002000
这两个改大了也不能解决问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-4 08:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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