[STM8] 几个工程师讨论没解决??? STM8S

[复制链接]
3637|10
 楼主| wgggjfg 发表于 2010-3-9 11:04 | 显示全部楼层 |阅读模式
reg=get_datas_bit(7654321,6);
该函数在main下掉用,返回的reg=6;
但从子函数中经过1个if,2个switch后掉用后返回的reg=0;
函数如下:
u8 get_datas_bit(u32 datain,u8 sp)
{        u8 i,value;
        for(i=1;i<sp;i++)
        {        datain/=10;
        }
        value=(u8)(datain%10);
        return value;
}
我试过关掉所有中断;编译器设置为不进行优化;甚至脱离仿真器直接运行,都表现为不正常。
单片机型号为:stm8s105k6
仿真器为:Rlink RAISONANCE
用的开发软件为:ST Visual Develop Version 4.1.3
我们几个工程师讨论都没解决,希望有高人解决。
lollipooop 发表于 2010-3-9 11:17 | 显示全部楼层
上完整代码,
不要让大家猜迷。
香水城 发表于 2010-3-9 11:17 | 显示全部楼层
有可能是堆栈有问题。

看看编译出的ASM代码,再单步调试看看。
ShakaLeo 发表于 2010-3-9 11:18 | 显示全部楼层
用仿真器单步运行到出错的那个地方,分析一下出错的那个地方的汇编代码比较有效。
 楼主| wgggjfg 发表于 2010-3-9 12:24 | 显示全部楼层
完整代码太长,而且在几个文件中,会看晕的。
我也觉得可能是堆栈有问题。
但怎么解决。
lxyppc 发表于 2010-3-9 13:30 | 显示全部楼层
看生成的汇编代码
t.jm 发表于 2010-3-9 23:38 | 显示全部楼层
也许返回值没用在有用的地方,被优化掉了。
bili 发表于 2010-3-10 14:03 | 显示全部楼层
将reg变量初始化为静态变量即可,堆栈本身没有问题。
bili 发表于 2010-3-11 15:15 | 显示全部楼层
将reg变量设置为全局变量也可以
有意思 发表于 2010-3-14 21:43 | 显示全部楼层
用printf打印每次循环的值,一看便知
草帽小子 发表于 2010-3-15 12:39 | 显示全部楼层
哎,Cosmic有点烂。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:专业人做专业事!高效充电。

65

主题

438

帖子

3

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