keil有bug吗?我怎么不能单步调试?进来看看!

2020-01-30 14:05发布

写了很简单的一个程序,但是查看了反汇编之后,那个函数根本就没有对应的汇编,我设置断点之后,在stepin进去,直接就出来函数了,难道keil有bug?

这是主程序:
void data_tst();

void main()

{
        uint i = 0;
        i = sizeof(uint);
        data_tst();
}

void data_tst(void)
{
        uint temp = 0,yy = 0;
        temp = sizeof(uchar);
        yy = sizeof(uint);
}
下面上图:


我调试时候的图片 (原文件名:keil.JPG)


当单步进入data_tst()函数的时候,汇编是:
C:0x0013    020016   LJMP     data_tst(C:0016)
但是再继续往下执行时 下一条指令是:
C:0x0016    22       RET      
直接就返回了,那我写的函数语句呢???
再往下执行就是 :
C:0x0017    00       NOP      
C:0x0018    00       NOP
C:0x0019    00       NOP
C:0x001A    00       NOP

难道是我的keil版本的问题??



我的keil版本 (原文件名:keil_version.JPG)


大家有遇到过这个问题吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
tcp1985
1楼-- · 2020-01-31 03:32
另:不用随便怀疑编译器,人家做编译器的焉是吃干饭的!
KunShan_a_dai
2楼-- · 2020-01-31 03:45
回复【7楼】tcp1985  你是不是党员
-----------------------------------------------------------------------
你的头像太让人销魂了;
那是谁啊?
tcp1985
3楼-- · 2020-01-31 07:46
 精彩回答 2  元偷偷看……
real_zyf
4楼-- · 2020-01-31 13:05
简单来说,编译器发现你的函数完全没意义,于是进去之后就直接结束了
ohmytime
5楼-- · 2020-01-31 15:18
回复【6楼】tcp1985 你是不是党员
是被编译器优化掉了,这便是volatile的神奇作用了,将子函数的局部变量加入volatile即可了


-----------------------------------------------------------------------

奇怪了!我不对它进行初始化的时候 编译器是不会对它进行优化的,

uint temp,yy;  //这样就不会优化了

uint temp = 0 ,yy = 0;  //但是这样就会优化掉!!!!
我以前只听说过对一个IO口进行多次操作,编译器会进行优化,但是想不到今天这样也会被优化掉!

麻烦请讲一下一般在什么情况下会进行优化呢!
tcp1985
6楼-- · 2020-01-31 15:28
对于volatile的作用我很多时候也搞不清楚,我将你的程序copy进去不行我就想到是不是被优化掉了,后来加了volatile果然行了。
故开头的时候就说神奇的volatile。
下面有帖子是说volatile的,你可进去看一下。。。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=460256&bbs_page_no=1&search_mode=4&search_text=tcp1985&bbs_id=9999

一周热门 更多>