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

2020-01-13 18:25发布


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);
            }
        }
    }
}
执行完回调函数之后,局部变量被改变了,为什么啊?该怎么查找原因啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
mcu5i51
1楼-- · 2020-01-14 16:20
 精彩回答 2  元偷偷看……
ordman
2楼-- · 2020-01-14 16:21
michael.yang 发表于 2019-4-9 11:22
for循环后,就算不满足循环条件,“index++”一样会执行,结果当然是1了。你C语言没过关吗? ...

看清楚了!人家循环还没有结束呢。
多半是stack设置太小了,或者有指针溢出
zhugean
3楼-- · 2020-01-14 20:00
这种莫名其妙的局部变量改变很有可能是由于编译器优化的原因
innovision
4楼-- · 2020-01-14 22:59
KEIL C51吗?要手动调整overlay,链接器不知道函数与回调函数的调用关系。很可能以为2者之间没有调用关系,然后把变量放在一起了

一周热门 更多>