1点击Debug图标,进入仿真模式,MDK多出一个工具条,这就是Debug工具条,这个工具条在仿真的时候非常有用。
工具条介绍:

1复位:其功能相当于硬件上的复位按键,按下一次后代码会重新从头开始执行。
2执行到断点处:用于快速执行到断点处,有的时候并不需要观看每步是怎么执行的,而是想快速执行到程序的某个地方查看结果,在你需要查看结果的地方打上断点。
3停止执行:使程序停止下来进入单步调试模式。
4执行进去:用来实现执行到某个函数里面去的功能。
5执行过去:再碰到有函数的地方,通过该按钮就可以单步执行过该函数,而不进入这个函数单步执行。
6执行出去:在进入该函数单步调试的时候,有时候你不需要再哦执行函数的剩余部分了,通过该按钮直接执行完函数余下的部分,并跳出函数,回到函数被调用的位置。
7执行到光标处:迅速使函数运行到光标处,光标只有一个但是短点可以有多个。
8汇编窗口:查看汇编代码。
9堆栈局部变量:显示当前函数局部变量及其值,方便查看。
10观察窗口:MDK5提供了2个观察窗口,按下按钮会d出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值。
11内存查看窗口:MDK5提供了4个内存查看窗口,该按钮按下,可以在里面输入你要查看的内存地址,然后观察者一片内存变化情况。
12串口打印窗口:MDK5提供了4个串口打印窗口, 该按钮按下,会d出类似于串口调试助手的窗口,用于显示串口打印出来的内容。
13逻辑分析窗口:我们一般用第一个,逻辑分析窗口,通过SETUP按钮新建一些IO口,以多种形式展示出来这些IO口变化情况,比较直观。
14系统查看窗口:提供各种外设寄存器的查看窗口,选择对应的外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便的查看设置是否正确。
在使用的过程中去实际 *** 作这些按钮才能去真正明白这些工具条对应的功能,不知道什么意思可以先看一下,大体了解一下,再去实际调试。……如果你的工程针对汇编程序,那么要从工程里移除startupa51文件……
startupa51是干吗的?它是一个引导文件,完成基本的内核初始化工作并与主函数(__main符号)建立映射关系,这样才能正确对C文件编译得到的目标文件进行连接。C语言的调试步骤如下:
在keil中调试c语言程序:1、打开我们的程序,点击菜单栏右侧的start/stopdebug按钮,进入调试模式。2、左侧为寄存器窗口,右上方是汇编窗口,我们可以看到各个寄存器的数值和c语言对应的汇编代码。3、点击单步执行按钮或者点击f11、f10,都可以进入单步执行模式,方便我们看程序流程和执行步骤。4、点击菜单栏的串口按钮,我们来调试串口的输出,这里有很多对应的调试工具可供选择。5、单步执行,我们看到各个窗口的变化,当直行到输出时,可以看到串口窗口有相应的字符输出。6、再次点击start/stop按钮来停止调试。
用vs2012对C语言进行调试:1、要对编程环境左边的一条竖直的空开的地方进行点击,点击的是你要调试的相应的语句。2、点击窗口上方的工具栏的调试界面,点击逐语句或逐过程,都没关系。3、开始调试,在调试过程中每个调试语句都要按一次F5键,在键盘上按下,你可以看到执行的当前的语句中,左边位置的红点有个箭头。4、在每次调试语句中,变量值发生改变时,下方的小界面都会显示出来,看是否正确。5、不断地重复这个步骤,知道发现错误的地方为止。6、发现错误后,停止调试,修改相应的代码,即完成此次调试。1、首先显示三菱PLC梯形图监控屏幕。设置远程 *** 作CPU的STOP钥匙开关到STEP-RUN。
2、其次单击三菱PLC编程软件的OnlineDebugStepexecution,选择开始位置,并单击Optionsetup。
3、然后单击重复数次数并输入“10次”。单击重复间隔,并输入“1”,设置完后,单击Set。
4、最后单击Stepexecute。执行从第0步开始到第10步结束即可。
任务之间需要协调。写一个类似printf()的函数,把调试的信息输出到UART,在电脑上用串口助手查看调试信息。这样就可以在不中断程序执行的情况下调试程序了。
2021年10月8日,为防止未成年人沉迷网络游戏,维护未成年人合法权益,文化和旅游部印发通知,部署各地文化市场综合执法机构进一步加强网络游戏市场执法监管。据悉,文化和旅游部要求各地文化市场综合执法机构会同行业管理部门。
重点针对时段时长限制、实名注册和登录等防止未成年人沉迷网络游戏管理措施落实情况,加大辖区内网络游戏企业的执法检查频次和力度;加强网络巡查,严查擅自上网出版的网络游戏;加强互联网上网服务营业场所、游艺娱乐场所等相关文化市场领域执法监管,防止未成年人违规进入营业场所。
这种方式的话只能通过多线程来解决。原因是如果你直接把当前程序直接停住,其实你是把当前程序的 UI 线程(主线程)给暂停了。也就是说程序根本就不会响应用户 *** 作,按钮单击也就自然不会响应了。
那么,为了能够使得新的线程被暂停后,只有在主线程按下按钮线程才会继续。我们得用 ManualResetEvent 类来解决这个方法。具体的还是看代码吧:
using SystemThreading;
ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
while()
{
for(int i = 0; i < 5; i++)
{
mreWaitOne(); // 阻止新线程,直到 mre 对象被按钮单击事件处理方法调用其 Set() 方法
}
}
});
private void button对象_Click(object sender, EventArgs e)
{
mreSet(); // 调用 ManualResetEvent 对象的 Set 方法以让新线程继续执行
}
ManualResetEvent 的作用就是允许线程直接互相发送信号,指示对方线程是否应该被暂停(阻止)一段时间,直到当前线程执行好自己的任务并允许另一线程继续执行。
比方说,我新建了一个线程,负责输出 2 这个数字。然而我希望这个线程能够在主线程开始输出 1 这个数字前就开始执行,但是 2 这个数字却出现在 1 之后。代码如下:
ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
mreWaitOne(); // 调用了 mre 的 WaitOne 方法使当前线程(根据上下文判断是新线程)阻止,直到其它线程对 mre 对象调用了其 Set 方法
ConsoleWriteLine("来自新线程的:2");
});
newThreadStart();
ConsoleWriteLine("来自主线程的:1");
newThreadSet();
输出结果如下:
来自主线程的:1
来自新线程的:2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)