XC8编译器调用函数后局域变量值被改变

[复制链接]
16610|42
 楼主| ayfalcon 发表于 2024-5-8 22:25 | 显示全部楼层
kingTek 发表于 2024-5-8 18:43
极大概率是切bank所导致的问题,我们经历过类似情况,函数原来是好的,中间加了一个函数后就乱套了,就是因 ...

您是用汇编重新编了程序吗?我这个程序比较大,用汇编有点困难。
 楼主| ayfalcon 发表于 2024-5-8 22:28 | 显示全部楼层
cxz_00 发表于 2024-5-6 17:29
感觉像是堆栈不够用了

如何判断堆栈够用不够用呢!!
kingTek 发表于 2024-5-9 06:44 来自手机 | 显示全部楼层
本帖最后由 kingTek 于 2024-5-10 08:58 编辑

变量重叠,99.99%就是那个最垃圾的,最low的切bank思想所导致的混乱,白骨精就在这!
lb1057907736 发表于 2024-5-9 09:43 来自手机 | 显示全部楼层
ayfalcon 发表于 2024-5-8 22:24
我这边不是报错,就是函数局部变量和他调用的子函数的局部变量地址重了。 ...

把你的问题,详细反馈到这里。
先免费注册一个账户。

https://forum.microchip.com/s/sub-forums?&subForumId=a553l000000J2rAAAS&forumId=a553l000000J2pvAAC&subForumName=MPLAB%20XC8&forumName=Development%20Tools&page=1&offset=0
 楼主| ayfalcon 发表于 2024-5-9 12:13 | 显示全部楼层
本帖最后由 ayfalcon 于 2024-5-9 12:15 编辑

希望那位知道的大神给解答一下,
 楼主| ayfalcon 发表于 2024-5-9 12:14 | 显示全部楼层
lb1057907736 发表于 2024-5-9 09:43
把你的问题,详细反馈到这里。
先免费注册一个账户。

这个账号我有,但是英文水平有点差,发中文帖子可以吗?
kingTek 发表于 2024-5-10 14:50 | 显示全部楼层
应该就是bank号没切回所致,在调用函数后手动返回原bank号就可以了!
 楼主| ayfalcon 发表于 2024-5-10 15:36 | 显示全部楼层
kingTek 发表于 2024-5-10 14:50
应该就是bank号没切回所致,在调用函数后手动返回原bank号就可以了!

C语言,不用考虑BANK号呀!!
kingTek 发表于 2024-5-10 22:01 来自手机 | 显示全部楼层
本帖最后由 kingTek 于 2024-5-10 22:03 编辑

楼上就知道重复这句套话,你懂细节么?不注重细节你不出问题谁出问题?
lb1057907736 发表于 2024-5-18 22:07 来自手机 | 显示全部楼层
最近看到一个帖子,质疑编译器有错误,但又拿不出证据,只能被当作无聊的抱怨。https://forum.microchip.com/s/topic/a5CV400000013FBMAY/t395546
kingTek 发表于 2024-6-21 10:12 | 显示全部楼层
最近用回51系统写代码,感觉脑子才恢复正常,比起某某芯片来那丝滑简直爽翻!
digit0 发表于 2024-6-21 19:45 | 显示全部楼层
应该是银行号码没有剪回造成的,调用函数后手动返回原银行号码即可!

评论

我说其银行号的设计是蠢到极点的思想,没错吧!  发表于 2024-6-24 10:43
kingTek 发表于 2024-6-28 07:50 | 显示全部楼层
这些都是其万般垃圾之一种,这么垃圾的玩意竟然流传这么大
鹿鼎计 发表于 2024-7-1 18:17 | 显示全部楼层
在XC8编译器中调用函数时,局域变量的值可能会被改变,这是因为局部变量存储在栈内存中,函数调用会创建新的栈帧,可能会覆盖或修改原有局部变量值。确保正确使用引用或指针来避免意外修改。
北海道没有冬天 发表于 2025-8-30 14:25 | 显示全部楼层
可能因栈溢出、函数参数传递方式不当,或未声明 volatile 的变量被优化,导致 XC8 编译器调用函数后局部变量值异常改变。
小熊01 发表于 2025-9-1 14:25 | 显示全部楼层
函数内部的局部变量,在其生命周期内会保留值,调用完毕后,除非其他操作改变,否则其值不会自动变化。检查函数中是否有修改该变量的操作。
朝生 发表于 2025-9-1 23:46 | 显示全部楼层
函数内部对局域变量的修改不影响外部调用,除非使用了全局变量或传递了引用。检查是否有这样的操作。
天天向善 发表于 2025-9-2 16:58 | 显示全部楼层
使用xc8编译时,若遇到递归调用错误,是因为其不支持。应考虑使用循环或函数嵌套来代替。
星闪动力 发表于 2025-9-3 21:27 | 显示全部楼层
51单片机代码编写更顺滑,与某某芯片相比体验更佳。
LLGTR 发表于 2025-9-4 15:41 | 显示全部楼层
问题:为什么调用函数后需要手动返回原bank号?


回答:因为调用函数时可能更改了bank号,导致后续操作出错,返回原bank号可恢复正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部