搜索
bottom↓
回复: 10

求助:执行完回调函数之后,局部变量莫名其妙被改变了

[复制链接]

出0入0汤圆

发表于 2019-4-8 23:19:04 | 显示全部楼层 |阅读模式

void SCH_Dispatch_Tasks(void)
{
    u8 Index = 0;

    for(Index = 0; Index < SCH_MAX_TASKS; Index++)
    {
        if(g_SCHTasks[Index].RunMe > 0)
        {
            (g_SCHTasks[Index].pTask)();                /** 执行改函数之前Index=0,但是执行完之后Index=1了,求解,为什么啊?????? **/

            g_SCHTasks[Index].RunMe = 0;

            if(g_SCHTasks[Index].Period == 0)
            {
                SCH_Delete_Task(Index);
            }
        }
    }
}
执行完回调函数之后,局部变量被改变了,为什么啊?该怎么查找原因啊?

出0入0汤圆

发表于 2019-4-8 23:55:51 来自手机 | 显示全部楼层
内存写断点

出0入442汤圆

发表于 2019-4-9 00:05:31 来自手机 | 显示全部楼层
回调函数把栈写爆了吧。

出200入2554汤圆

发表于 2019-4-9 04:12:32 | 显示全部楼层
F11啊,去汇编层面看看

出0入4汤圆

发表于 2019-4-9 08:24:43 | 显示全部楼层
内存溢出了呗. 仔细检查下数组,指针的溢出.  用汇编代码单步运行下, 看下堆栈情况

出0入0汤圆

发表于 2019-4-9 11:22:26 | 显示全部楼层
for循环后,就算不满足循环条件,“index++”一样会执行,结果当然是1了。你C语言没过关吗?

出0入0汤圆

发表于 2019-4-9 12:00:43 | 显示全部楼层
代碼好懶給全吧!

出0入0汤圆

发表于 2019-4-9 14:33:17 | 显示全部楼层
下写断点呀

出10入0汤圆

发表于 2019-4-9 14:40:07 来自手机 | 显示全部楼层
michael.yang 发表于 2019-4-9 11:22
for循环后,就算不满足循环条件,“index++”一样会执行,结果当然是1了。你C语言没过关吗? ...

看清楚了!人家循环还没有结束呢。
多半是stack设置太小了,或者有指针溢出

出0入0汤圆

发表于 2019-4-9 15:05:43 | 显示全部楼层
这种莫名其妙的局部变量改变很有可能是由于编译器优化的原因

出0入0汤圆

发表于 2019-4-10 08:57:52 | 显示全部楼层
KEIL C51吗?要手动调整overlay,链接器不知道函数与回调函数的调用关系。很可能以为2者之间没有调用关系,然后把变量放在一起了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 08:38

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

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