完善资料让更多小伙伴认识你,还能领取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的大小. |
|
|
|
只有小组成员才能发言,加入小组>>
447 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2863 浏览 2 评论
2350 浏览 1 评论
794浏览 2评论
CH565W以太网,是必须有SKCKET中断才能发送数据吗?
425浏览 1评论
329浏览 1评论
用DVP采集图像,用UDP传给PC端,采集两帧后图像报错是什么原因?
465浏览 1评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
620浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 12:20 , Processed in 0.806770 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号