有关B站“单片机应用之独立按键的应用基于底层程序模块的应用层程序开发”(BV1oV411C7vj)实验调试相关

引言

在随着金善愚老师学习单片机时,在学习单片机应用之独立按键的应用基于底层程序模块的应用层程序开发时遇到一个BUG,在评论区也有人提出
在这里插入图片描述

虽然有解决方案,但截至本人写稿前,未曾见有人搞清楚此问题来源,现将本人调试过程记录如下

发现问题

跟着老师一步步做
在这里插入图片描述
到此出现问题,上图是老师的图,下面贴出我的图
在这里插入图片描述
数码管根本就没亮

问题所在

就如同评论区所说,把Display函数里面的变量 i定义成静态变量static就行了,但这并不能搞清楚问题,所以本人进行了一番调试
在这里插入图片描述
可以看到第一次进入DIsplay函数后,i变成1出来,这是符合我们的程序设计的
继续调试,当再次进入DIsplay函数,你会发现i变成0了
在这里插入图片描述
按照我们的构想,此时的i应该还是1才对,故出现BUG。
那么,为什么i会变成0?我们看一下,keil分配给i的内存位置,将鼠标放在i上,可以看到i(D:0x0C)= 0x00,即iD:0x0C
在这里插入图片描述
memory中,如下图的位置可以看到此位置的值
在这里插入图片描述
Display函数中,i再次+1
在这里插入图片描述
进入Key.c后,执行完unsigned char KeyNum = 0;,d:0x0c的值变为0
在这里插入图片描述
将鼠标放在变量KeyNum上可以看到,分配的位置也是d:0x0c
在这里插入图片描述
至此,问题已经清晰了,keil分配给iKeyNum的内存位置是同一个,故每次执行Key_Scan函数时,都会被unsigned char KeyNum = 0;重新赋0。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用深度优先搜索算法来判断以邻接表方式存储的有向图中是否存在从顶点vi到vj的路径(i≠j)。 具体实现方法如下: 1. 从顶点vi开始进行深度优先搜索,遍历所有与vi相邻的顶点。 2. 对于每个与vi相邻的顶点vj,如果vj等于目标顶点vj,则说明存在从vi到vj的路径,返回true。 3. 如果vj不等于目标顶点vj,则继续对vj进行深度优先搜索,直到找到目标顶点vj或者遍历完所有与vj相邻的顶点。 4. 如果遍历完所有与vi相邻的顶点后仍然没有找到目标顶点vj,则返回false。 下面是一个基于图的深度优先搜索策略的示例代码: ``` #include <iostream> #include <vector> using namespace std; const int MAXN = 100; vector<int> adj[MAXN]; // 邻接表存储图 bool visited[MAXN]; // 标记是否已经访问过 bool dfs(int u, int v) { visited[u] = true; // 标记当前顶点已经访问过 if (u == v) { // 如果当前顶点就是目标顶点,则返回true return true; } for (int i = ; i < adj[u].size(); i++) { // 遍历与当前顶点相邻的所有顶点 int next = adj[u][i]; if (!visited[next]) { // 如果该顶点还没有访问过,则继续进行深度优先搜索 if (dfs(next, v)) { // 如果搜索到目标顶点,则返回true return true; } } } return false; // 如果遍历完所有相邻的顶点都没有找到目标顶点,则返回false } int main() { int n, m; // n表示顶点个数,m表示边数 cin >> n >> m; for (int i = ; i < m; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); // 添加一条从u到v的有向边 } int u, v; cin >> u >> v; bool hasPath = dfs(u, v); // 判断是否存在从u到v的路径 if (hasPath) { cout << "存在从" << u << "到" << v << "的路径" << endl; } else { cout << "不存在从" << u << "到" << v << "的路径" << endl; } return ; } ``` 在上面的代码中,我们使用了一个visited数组来标记每个顶点是否已经访问过,避免重复访问。在dfs函数中,我们首先将当前顶点u标记为已经访问过,然后遍历与u相邻的所有顶点,对于每个相邻的顶点next,如果它还没有访问过,则继续进行深度优先搜索。如果搜索到目标顶点v,则返回true,否则继续遍历下一个相邻的顶点。如果遍历完所有相邻的顶点都没有找到目标顶点v,则返回false。 最后,在主函数中,我们输入图的顶点个数n和边数m,然后依次输入每条边的起点和终点。然后输入需要判断的起点u和终点v,调用dfs函数判断是否存在从u到v的路径。如果存在,则输出存在路径的提示信息,否则输出不存在路径的提示信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值