FreeRTOS缩小bss段的处理

bss太大了,有60多M,客户要求处理一下   

readelf -s  app.elf  | grep "OBJECT"
发现有一条
592: 8800dd78 0x4000000 OBJECT  LOCAL  DEFAULT   15 ucHeap
长度64M,地址8800dd78刚好在bss段里,bss段地址如下:
readelf -S  app.elf
 [15] .bss              NOBITS          8800aee0 0bc218 4890eac 00  WA  0   0  4

于是需要把ucHeap单独放到一段

ucHeap是freeRTOS里内存分配里的一个静态变量,freeRTOS的堆分配都是在这个ucHeap上

/* Allocate the memory for the heap. */
#if ( configAPPLICATION_ALLOCATED_HEAP == 1 )
/* The application writer has already defined the array used for the RTOS
* heap - probably so it can be placed in a special segment or address. */
    extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#else
    static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif /* configAPPLICATION_ALLOCATED_HEAP */

修改方式如下

a、FreeRTOSConfig.h里定义
#define configAPPLICATION_ALLOCATED_HEAP 1

b、增加一个ucHeaps段0x06000000==100,663,296,100M,应该够了,调整一下段地址
ucHeaps                               0x84000000   0x06000000

c、程序里定义一个
uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__((section(".ucHeap"))) __attribute__((aligned(4096)));

重新编译一个app.elf就行了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值