搜索
bottom↓
回复: 16

函数返回1,返回之后变成0,什么原因?

[复制链接]

出5入4汤圆

发表于 2020-10-24 16:06:05 | 显示全部楼层 |阅读模式
产品是freertos系统的,最近给产品某个task增加了一些功能,说白了就是多了一些功能函数。然后发现不相干的另一个任务出现了一个很奇怪的现象,有个函数 return 1,但是返回之后值就变成 0 了
请大家看看下面的图片:







我做过如下尝试,都没啥效果:
1、增加非操作系统的cstack和heap 没啥用
2、增加所在task 的栈深度,没啥用

而且有一个规律,只要运行过我新加的功能函数,就会复现上面的问题,但是我新加的函数也没有用什么动态申请内存之类的操作,就是普通的处理过程
请教坛里大神指点迷津

编辑原因:图片顺序调整

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出5入4汤圆

 楼主| 发表于 2020-10-25 07:52:04 来自手机 | 显示全部楼层
这么多浏览,没人回复…我顶一次

出0入42汤圆

发表于 2020-10-25 08:44:03 来自手机 | 显示全部楼层
这个函数定义的返回类型没错吧

出0入8汤圆

发表于 2020-10-25 12:09:28 来自手机 | 显示全部楼层
单从第一张图片来看,其实,你那个函数,返回的就是 0,光标显示不准确,你把优化关掉,再跟踪一下。

出5入4汤圆

 楼主| 发表于 2020-10-25 13:28:32 来自手机 | 显示全部楼层
security 发表于 2020-10-25 12:09
单从第一张图片来看,其实,你那个函数,返回的就是 0,光标显示不准确,你把优化关掉,再跟踪一下。 ...

试过关闭优化,现象一样的,不过你是哪里看到是零的,R1吗?

出5入4汤圆

 楼主| 发表于 2020-10-25 13:28:56 来自手机 | 显示全部楼层
albert_w 发表于 2020-10-25 08:44
这个函数定义的返回类型没错吧

类型是int没错的

出0入14汤圆

发表于 2020-10-25 13:42:49 | 显示全部楼层
楼主强行给result赋值试一下,看是运算出问题还是返回值出问题

出0入8汤圆

发表于 2020-10-25 17:16:30 来自手机 | 显示全部楼层
tim4146 发表于 2020-10-25 13:28
试过关闭优化,现象一样的,不过你是哪里看到是零的,R1吗?

返回值在 R0。

出5入8汤圆

发表于 2020-10-25 17:28:25 | 显示全部楼层
把result定义成static的 在仿真看下值

出10入12汤圆

发表于 2020-10-25 17:40:30 | 显示全部楼层
搞定了吗

出30入54汤圆

发表于 2020-10-25 17:51:00 | 显示全部楼层
第一张图看R0返回的就是0

出5入4汤圆

 楼主| 发表于 2020-10-25 18:20:53 来自手机 | 显示全部楼层
442502587 发表于 2020-10-25 17:40
搞定了吗

还没呢,今天周日没发调试了,代码在公司,希望明天能搞定,产品功能已经差不多了准备给客户试用呢

出0入131汤圆

发表于 2020-10-25 18:58:09 | 显示全部楼层
看变量 应该用watch啊,研究汇编代码干啥。如果局部变量看不到,就暂时吧变量设置为全局的

出5入4汤圆

 楼主| 发表于 2020-10-25 19:10:18 来自手机 | 显示全部楼层
security 发表于 2020-10-25 17:16
返回值在 R0。

为什么是R0呢,汇编打断点的那条语句看起来是R1啊,不过R7-R4这个不懂什么意思

出0入8汤圆

发表于 2020-10-25 20:18:07 来自手机 | 显示全部楼层
tim4146 发表于 2020-10-25 19:10
为什么是R0呢,汇编打断点的那条语句看起来是R1啊,不过R7-R4这个不懂什么意思 ...

这是 arm 的「调用约定」规定的。
R0 存储返回值。
你光标定住的那行,只是弹出栈,R7-R4,表示 4、5、6、7 寄存器,至于为什么是这些,因为这些在函数入口处,被压入栈里面了,函数结束后,要出栈,恢复原样。

出0入0汤圆

发表于 2020-10-25 20:46:35 | 显示全部楼层
本帖最后由 Scarlette 于 2020-10-25 20:57 编辑

0x80176F8那里生成的
MOV R0, R6
是有问题的。前面有BL指令函数调用,R6内容已经废掉了。
—————
EDIT:
嗯,刚才表达的可能有点歧义……我是说BL调用的目标函数,就是那个fmc_lock,好像没按规矩办事儿,把R6破坏了

出5入4汤圆

 楼主| 发表于 2020-10-26 09:09:34 来自手机 | 显示全部楼层
感谢大家,刚刚找到问题了,是我把函数的参数表搞错了顺序,导致有个空指针被赋值了…导致flash的状态寄存器感知到这个错误置位了,大乌龙………
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 07:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表