完善资料让更多小伙伴认识你,还能领取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的大小. |
|
|
|
|
只有小组成员才能发言,加入小组>>
347 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
861 浏览 0 评论
1461 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3417 浏览 2 评论
2822 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1461浏览 1评论
348浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863浏览 0评论
468浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:42 , Processed in 0.818281 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
582