完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
使用freertos了没有,堆栈的空间是否设置合理呢?
|
|
|
|
|
|
没有操作系统,同样的程序,O0编译出来66KB,O1编译出来是62KB就是正常的,这就是我说为什么程序超过60多kb就出问题(我怀疑64KB是个分水岭).
|
|
|
|
|
|
看看ld文件里面的配置
|
|
|
|
|
|
没有ld文件,只有sct,里面东西是工程自己生成的
|
|
|
|
|
|
感觉是栈被破坏了
|
|
|
|
|
|
应该是你的代码无意改写了该寄存器
|
|
|
|
|
|
不可能,其他功能都正常~
|
|
|
|
|
|
应该没有吧,我只是将优化等级从O0改成O1就都正常了.
|
|
|
|
|
|
目前程序40多kb了
|
|
|
|
|
|
你这不是程序大小的问题。栈溢出的症状
|
|
|
|
|
|
你这是典型的栈溢出问题。O0编译,是对代码不做任何优化;O1编译是编译时进行了优化,部分问题编译时给你优化了。你这个问题查一下定义的变量以及使用
|
|
|
|
|
|
优化等级对RAM基本上没有影响,另外栈足够大
|
|
|
|
|
|
栈溢出跟栈足够大没关系。这个是编程代码规范的问题。举个例子,定义一个char变量a, 然后给个memcpy(&a,"aa",2); 之类的都会导致栈溢出。后面的栈数据会被无意识的给改变了
|
|
|
|
|
|
这样给你说吧,定义一个变量,系统会在栈上开辟一个空间用于存储这个变量,但是在向这个栈空间传的值所占空间大于定义的空间时,这个栈临近的空间会被无意识的改变了
|
|
|
|
|
|
你说的情况对于有些问题是可以这样分析的,但我的这个非常奇怪,我若删除掉一些无关的语句,减少程序大小后,ADC又正常了,这个怎么看都是编译器的问题,但我又不擅长汇编,所以这个问题我也不太好查.
|
|
|
|
|
|
你对比下汇编代码,是不是改了栈的数据,调用函数就会有栈操作
|
|
|
|
|
|
空间溢出
|
|
|
|
|
|
可以试试中断
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 16:06 , Processed in 1.448968 second(s), Total 108, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1145