完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在Keil中,有两个参数Stack_Size和Heap_Size可以设置,Heap_Size就是用来设置程序中内存申请的最大空间,malloc()申请的内存大小要小于Heap_Size,那么在MounRiver Studio中,这个参数在哪设置?
|
|
相关推荐
1个回答
|
|
CH573 官方提供的example中,其栈 是从ram最高地址 向低处放, 用多少,并没有严格的声明一个大小出来,例程工程的LD文件里的_eusrstack 即为栈顶地址:
.stack ORIGIN(RAM)+LENGTH(RAM) : { . = ALIGN(4); PROVIDE(_eusrstack = . ); } >RAM 而至于堆, 例程中,只是定义了其起始地址(LD 文件里): PROVIDE( end = . ); 这种参数将会在malloc之类的操作时候最终被调用: 代码原型:https://github.com/riscv/riscv-newlib/blob/riscv-newlib-3.1.0/libgloss/libnosys/sbrk.c 由于默认代码中,只有起始地址,没有结束地址约束,这样最终会导致malloc永远都不会返回NULL. 至于解决你可以定义一个自己的这个函数,然后ld文件里加一个自己的_sbrk 实现如: 函数 可以放在任意的工程的.c文件里: void *_sbrk(ptrdiff_t incr) { extern char _end[]; extern char _heap_end[]; static char *curbrk = _end; if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) return NULL - 1; curbrk += incr; return curbrk - incr; } 然后LD文件加入: image.png 其中,上面的 0x800即为heap的大小. |
|
|
|
只有小组成员才能发言,加入小组>>
516 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2901 浏览 2 评论
2396 浏览 1 评论
860浏览 2评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
402浏览 1评论
678浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
412浏览 1评论
511浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 16:17 , Processed in 1.137259 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号