完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
如题!keil编译程序的时候,调用子函数越多,RAM占用越少!麻烦大家帮忙看看!源码有点长,而且可读性比较差,所以就不发出来了,几个子程序唯一的关系就是共用3个全局变量,都是用作for循环的,并没有影响,结果如下图:
|
|
相关推荐
6个回答
|
|
首先,你的表述有误,不是调用的子函数越多占用的RAM越少,而是“越少未调用的子函数,占用的RAM越少”。原因很简单,如果你定义了一个子函数但却没有被调用,那么在编译的时候就会被当做相当于中断函数而分配独立的RAM。但如果调用了,Keil会对其进行优化吗,通过整合资源达到减少RAM的目的。你可以把未调用的子函数注释掉再编译看看结果。
|
|
|
|
|
|
|
|
2楼讲的确实是有道理的。
|
|
|
|
谢谢您的回答,但我测试了,结果不是这样的,我在主函数里写两个死循环,第一个死循环放一个子函数,其它的全部放在第二个死循环,这样就调用了所有子函数,实际上只执行了一个,结果和只调用一个子函数的结果是一样的,RAM占用还是很大,这又是怎么回事呢? |
|
|
|
Keil对于在主程序中独立的程序(多处死循环)都独立分配资源,但这只是对非常明显的死循环Keil才能识别,比如While(1){}这样的死循环。如果你了解单片机的实时多任务系统如Keil自带的RTx Tiny系统去编程就知道,多任务在主函数都是用Whie(1){任务x}这样写的。如果没有使用多任务系统,Keil其实是会报个警报,提示会有代码无法执行,这样编译效果与函数没被调用是一样的。 |
|
|
|
非常感谢您的回答,我明白了! |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12034 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 20:26 , Processed in 0.637972 second(s), Total 51, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号