Keil uVision4之debug精确调时间

首先设置频率

第一步
在这里插入图片描述
第二步,点击Target,设置频率,之后确定
在这里插入图片描述

代码设置

我的定时时间

	TH0 = (65536-922)/256; //为T0赋初值,定时1ms
	TL0 = (65536-922)%256;

进入调试

第一步
在这里插入图片描述
第二步,进行复位,清除起始点,使程序从第一步运行
在这里插入图片描述
-------------------------------------------------------------------------可跳过-----------------------------------------------------------------------
若是不清除,程序则会从黄标位置开始
在这里插入图片描述
黄标位置为可设置的起始点
选择自己需要开始的程序位置,点击右键,选择Set Program Counter,设置自己需要的起点
-------------------------------------------------------------------------可跳过-----------------------------------------------------------------------

第三步,设置终止点,选择1s结束位置
选择自己需要开始的程序位置,点击右键,选择Insert/Remove Breakpoint,设置自己需要的终点。也可双击设置或者取消
效果如图
在这里插入图片描述

运行进行调试

第一步,点击运行
在这里插入图片描述
第二步,查看时间,单位s
在这里插入图片描述
设置的是需要的是1s运行到终点位置,如今多了,则需要进行调整。

第三步,计算调整代码
发现,多了0.0124s,多的值是经过1000次累加之后的,也就是每一次多了0.0124ms

晶振频率选择的11.0592MHz
一个机器周期的时间为: a=12/11059200 s
经 1/a=922 个机器周期到 1ms

但此时每过 1ms 便多出 0.0124ms
故需要减少 0.0124*922≈11 个机器周期,才能减少误差

故调整后需要 922-11=911 个机器周期

代码调整为

	TH0 = (65536-911)/256; //为T0赋初值,定时1ms
	TL0 = (65536-911)%256;

此时的时间变为如图所示,误差大大减小。
在这里插入图片描述

### Keil UVision5 试教程 #### 打开并加载项目 为了开始试过程,在UVision环境中需先打开已创建好的工程文件。通过菜单栏中的`Project -> Open Project`选项来指定路径下的`.uvprojx`文件[^2]。 #### 设置断点 在源代码窗口内左侧的空白处单击鼠标左键可以设置断点,这允许开发者暂停执行以便检查特定位置的状态变量或其他资源情况。也可以右键点击某行代码选择“Toggle Breakpoint”,实现相同功能[^1]。 #### 启动试会话 完成上述准备工作之后,按下F5键启动全速运行直至遇到第一个断点;或者利用工具条上的绿色箭头按钮同样能触发这一操作。此时目标板会被重置并且程序计数器(PC)指向入口地址准备开始逐步跟踪指令流。 #### 查看寄存器与内存 当处于停顿状态时(即命中某个设定过的中断),可以通过`View->Registers`查看当前CPU内部各通用目的寄存器的内容变化趋势以及特殊功能单元的工作模式。对于想要观察的数据区段,则可通过Memory Window直观获取其映射关系及数值表现形式。 #### 单步执行命令 借助于Step Into (F7), Step Over (F8) 和 Run to Cursor等功能按键可控制应用程序按照行号顺序逐句解析或跳过函数用细节直接返回上层框架继续前进。这些特性极大地提高了定位逻辑错误效率的同时也方便理解复杂算法流程走向[^3]。 #### 常见问题及其解决方案 - **无法找到 Reset_Handler** 如果收到类似 "Cannot find argument 'Reset_Handler'" 的警告信息,通常是因为链接脚本丢失或者是startup文件夹下缺少对应的.s文件定义了复位向量表项。确认项目属性里的Target标签页中Startup File字段是否正确指定了初始化汇编源码的位置,并且确保该文件确实存在于工作空间里。 ```c extern void _start(void); __attribute__((section(".isr_vector"))) const unsigned long vectors[] = { /* Stack Pointer initial value */ __StackTop, /* Reset Handler Address */ (unsigned long)&_start, }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值