全国药品招商网_keil uvision4调试模式下不是c语言好像是汇编 怎么改回c语言调试

2020-07-10

keil uvision4调试模式下不是c语言好像是汇编 怎么改回c语言调试


view里Disassembly Window关掉
在Keil uvision4中使用C语言进行编程,在进行debug调试时,反汇编窗口都是nop,无法单步执行?
你先确认一下项目编译是否正常,是否生成了目标文件。Keil是不能仿真的,不能单步执行的 不过你可以通过串口打印信息 查看程序是怎么运行的那说明你的项目还有问题,你看看哪里的配置还有问题恩单步的话,软仿真试试
在keil软件中调试程序时,无法设置断点,必须切换到汇编语言窗口才能设置断点,怎么办?
在想设置断点的某行,在该行的最后一个字母后面,双击鼠标左键就可以了首先要说的Keil是非常不错的模拟和调试工具。
其说的就个人理解的经验:
1、keil是模拟MCU的内部和外部设备(I/O口、中断、串行、定时等)特性,其模拟是一种“自内向外”的真实模拟,换句话说,可以又任意一个内部数据处理结果去指导I/O口工作,但这种I/O工作的方向是“输出型”的(广义),而对于MCU要去获取外部状态的工作(我把它称作为“输入型”的),则在Keil中调试无法能反映真实情况,必须要配合相应硬件才能正常调试,因为当仅用Keil软件(不用任何其他硬件)在电脑上“软”调试工程时,读取外部I/O口,读过来的数据都是1,但这可能并不意味着你的软件有问题。
2、有了真实“输出型”的调试,而无法“输出型”的调试,你是不是觉得只有一半的功能呢?其实不是这样的。当我们要去调试“输出型”时,我的做法是用软件去制作一个和外部硬件特性一样的软件模块(一般这个模块做起来是比较费力的),也就是说用我做的另一个独立的软件模块去产生或选取MCU需求的输入数据,这样就能验证某些过程是否在执行中按照自己的意识操作。
我曾经就只有keil做过DS18B20的“搜索ROM”的算法实现和整个过程(因为如果直接烧进MCU程序的话,如果不出正确结果,其实根本就发现不了错误存在),我做了一个外部DS18B20的硬件仿真软件模块(由很多个函数组成),后来就是在Keil的一些“软”单步调试中发现了我所有算法中的出现的问题,最后我才把多个DS18B20连接在一个MCU的I/O口上,全部正确的获取了在线的能正常工作的DS18B20的64位地址。

最后我想说的就是,仅在keil下去仿真外部硬件特性做需要的软件模块比较会忽略某些方面而出错的(一般而言),所以要开发keil工程话,我非常推荐用相应的仿真器(这个可是硬件哦)去调试你的项目。

PS:可惜我一直都是没有硬件仿真器的条件下开发工作的,有的时候会相当耗时。我也遇到楼主相同问题,
待解
keil4在汇编语言程序中如何指定堆栈地址和深度
堆栈栈顶默认状态下就是07H,要修改直接赋值就可以了。比如:
SP=0x5f;
至于深度,只受空间限制,比如以上执行后,那么如果是51,那么就有20H个,如果是52,那么就有A0H个。