OpenEdv-开源电子网

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

No space in execution regions with .ANY selector matching os_cfg_app.o(.bss).

[复制链接]

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
发表于 2021-11-24 16:07:52 | 显示全部楼层 |阅读模式
5金钱
    如标题,程序编译报错,共19个error,标题是第一个。程序是通过串口接收数据,临时存放在字符数组中,然后再写入W25Q16芯片。代码如下。网上有说是数组过大,堆栈溢出。因此我使用了malloc和free来给数组临时分配内存空间。但错误依然没有消失。请问有没有人遇到过,求指教!
//任务4的任务函数----接收串口发送的数据,并写入FLASH,执行一遍就挂起
void task4_task(void *p_arg)
{   
    u8 * data_buff;
    int len,t;//最大65535
   
    OS_ERR err;
//  CPU_SR_ALLOC();
    p_arg = p_arg;
//  OS_CRITICAL_ENTER();    //进入临界区,任务禁止打断

    while(1)
    {
        
        if(USART_RX_STA&0x8000)//收到数据了
        {   
            data_buff=(u8 *)malloc(18000);//使用内存管理为数组分配内存,避免堆栈溢出
            memset(data_buff,0,sizeof(u8)*18000);//内存初始化为0
           len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度,数据总量不超过65535
            for(t=0;t<len;t++)
            {
                data_buff[t]=USART_RX_BUF[t];
            }
   
             printf("Start Write W25Q16....");
            W25QXX_Write(data_buff,FLASH_SIZE-18000,len);        //从倒数第18000个地址处开始,写入len长度的数据(len小于18000字节,否则增加地址大小)
            printf("W25Q16 Write Finished!");    //提示传送完成
            
            free(data_buff);//释放大数组所占的内存空间
            USART_RX_STA=0;//事情办完,清空接收数据状态标记
        }
   //   OS_CRITICAL_EXIT();    //退出临界区
    }
}


最佳答案

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

找到了这篇帖子,说KEIL模拟的内存比实际的小,可以在Target选项卡里加大:https://www.cnblogs.com/cxcmirror/p/14671296.html 我照着做了,末尾都加了一个0,果然错误减少到了1个。启动文件的堆栈还是400和200,数组大小还是18000,依然使用了malloc和free.但是不知道这样改行不行,会不会对单片机造成影响。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
 楼主| 发表于 2021-11-24 16:07:53 | 显示全部楼层
找到了这篇帖子,说KEIL模拟的内存比实际的小,可以在Target选项卡里加大:https://www.cnblogs.com/cxcmirror/p/14671296.html
我照着做了,末尾都加了一个0,果然错误减少到了1个。启动文件的堆栈还是400和200,数组大小还是18000,依然使用了malloc和free.但是不知道这样改行不行,会不会对单片机造成影响。
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-24 16:23:37 | 显示全部楼层
改.s启动文件的堆栈大小分配
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
 楼主| 发表于 2021-11-24 16:47:46 | 显示全部楼层
本帖最后由 Leechun1996 于 2021-11-24 16:50 编辑
lpwithv 发表于 2021-11-24 16:23
改.s启动文件的堆栈大小分配

谢谢回复!我按照这2个帖子的方法修改了堆栈的大小,两个都改成了2000:https://blog.csdn.net/qq_27747359/article/details/109106895https://www.icxbk.com/ask/detail?tid=7792    ,如图。
    但是重新编译后还是出错了。头两个error是:No space in execution regions with .ANY selector matching startup_stm32f40_41xxx.o(STACK)
    No space in execution regions with .ANY selector matching startup_stm32f40_41xxx.o(HEAP).
    我对这个堆栈的大小的含义不是很清楚,不知道为啥改为了2000还是不对呢?

修改堆栈大小.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2021-11-25 01:01:40 | 显示全部楼层
就是内存不够了,再改小
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3606
金钱
3606
注册时间
2019-8-14
在线时间
1052 小时
发表于 2021-11-25 11:46:08 | 显示全部楼层
空间不够,申请的空间再改小一些
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
 楼主| 发表于 2021-11-25 13:26:18 | 显示全部楼层
正点原子 发表于 2021-11-25 01:01
就是内存不够了,再改小

谢谢原子哥!我把stack加到了0x5000,Heap加到0x2000,不行。这篇帖子有人说数组大于几十Byte,就应该使用全局变量或静态变量了,这样系统会自动分配内存:https://bbs.elecfans.com/jishu_1691093_1_1.html
   于是我这样改了:static u8 data_buff[18000]={0};同时去掉了malloc,但编译还是报错。我又把数组改小,改到200或100,编译还是不行。不知道是不是有其他原因,正在思考。
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
 楼主| 发表于 2021-11-25 13:35:37 | 显示全部楼层
hou18 发表于 2021-11-25 11:46
空间不够,申请的空间再改小一些

数组改到10都不行呢
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
 楼主| 发表于 2021-12-24 11:32:00 | 显示全部楼层
这样做,编译是通过了,但是下载到单片机后,会一直进到硬件错误里面,实际还是内存溢出了。把堆栈加到0x5000,把大数组注释掉,都没用。最后发现在usart.h文件中,我定义的串口接收数据长度是20000.一直减,直到减到500,就可以了。很奇怪为啥堆栈定义得那么大都没用,必须减小数据长度才行。看来不好通过串口一次性接收太多数据,会噎住的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 09:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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