添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

发现问题:

最近在学习互斥量的时候,写一个优先级翻转的实验,发现用for循环软件延时和while循环软件延时程序运行结果不一样,用for循环的时候,三个任务调度的时候,中等优先级的任务会在第一次连续运行之后不会再出现连续运行的情况,而用while循环的时候,中等优先级的任务在第一次连续运行之后还会多次连续运行。因为是在低优先级任务中进行任务调度,中等优先级任务连续运行的总时间是低优先级任务的软件循环延时的时间,那么两种循环的结果不同的原因可能就是低优先级任务的唤醒时间不一样,所以猜测for循环和while循环的运行时间不一样,然后做了以下的测试。

写一段for循环和while循环,计算运行时间:

#include<stdio.h>
#include<time.h>
int main()
	clock_t start_t, end_t;
	double total_t;
	int i = 0;
    start_t = clock();
#if 1
	for (i = 0; i < 2000000000; i++)
#else
	while (i < 2000000000)
#endif
    end_t = clock();
	total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
	printf("CPU 占用的总时间:%f\n", total_t);
	return(0);

中间用了条件编译来区分两种循环的情况,运行结果如下:

Visual Studio环境:

while循环:2.853 s

for循环:2.913 s

 VS Code 环境:

while循环:2.83 s

for循环:2.855 s

for循环和while循环的运行时间不同,总体上for循环所需要的时间更长一点,两种循环的运行时间不仅受到编译环境的影响,而且和电脑当时的运行情况有关,该程序多次运行的结果都不一样,但for循环需要的时间总是比while循环多一点,当循环次数增加,循环体运行时间越长,该现象越明显。

我们在学习STM32到一定阶段可能会了解操作系统,然后便有这种问题产生,下面我就来粗略说说“操作系统与裸机的区别,以及STM32能运行什么操作系统,能运行linux系统吗”等问题。 操作系统与裸机的区别 裸机运行的程序代码,一般由一个main函数中的while死循环和各种中断服务程序组成,平时CPU执行while循环中的代码,出现其他事件时,跳转到中断服务程序进行处理,没有多任务、线程的概念。 而引入操作系统后,程序执行时可以把一个应用程序分割为多个任务,每个任务完成一部分工作,并且每个任务都可以写成死循环。操作系统根据任务的优先级,通过调度器是CPU分时执行各个任务,保证每个任务都能够得到运行。若调度方法优良,则可使个任务看起来是并行执行的,减少了CPU的空闲时间,提高了CPU的利用率。由操作系统的任务管理衍生出相应的CPU管理、内存管理,它们分别负责分配任务对CPU的占有权和管理任务所占有的内存空间。在linux操作系统中,还具有文件管理、I/O设备管理的功能。 STM32能运行什么操作系统,能运行linux系统吗? 首先操作系统有两种:一种是用MMU(Memory Ma
建立一个使用until 使用while和until 这是我们在霍格沃茨大学的第一年,我们正在努力掌握“ Wingardium Leviosa”的悬浮魅力。 目前,我们的悬浮力为6 。 为了使该羽毛真正悬浮,我们需要有10的悬浮力。 首先,我们将编写一个while循环,当我们的悬浮力小于10时,它将继续puts短语“ Wingardium Leviosa”。 我们每次时间puts那句话,我们应该增加我们的悬浮力1 。 然后,我们将使用until循环再次解决此问题。 它将puts短语“ Wingardium Leviosa”,直到悬浮力等于10 ,每当我们puts该短语时,悬浮力就会增加1 。 在本实验中运行测试套件以开始使用。 让我们通过在while.rb编码我们的解决方案来通过第一个测试:填写using_w
文章目录1. 问题描述2. 解决方案2.1 正常单个for循环2.2 多层循环的情况,使用break仅仅是跳出了最里面的循环。2.3 跳出指定层循环 1. 问题描述 当有多个for循环的时候,如何跳出最外层循环? 2. 解决方案 2.1 正常单个for循环 package com.example.demo; public class TestFor { public static v...
  STM32系列芯片(Cortex-M3)有三级流水线,指令周期不定,ARM给出的Cortex-M3核单片机的平均执行速度是1.25MIPS/Mhz。   MIPS的全称是Million Instructions Per Second,每秒百万指令(西方或者国际上的计量体系中1M(兆)=100万=1000000);Mhz,是指单片机CPU的主频兆赫兹。   MIPS/Mhz的意思是(单片机CPU...
下面是是是源代码和注释,解释的很详细,我就不赘述了,附件含有仿真文件和源码,如果感觉延时太短可以自己设置参数进行修改 //用LED数码显示器循环显示数字0~9 #include // 包含51单片机寄存器定义的头文件 /************************************************** 函数功能:延时函数,延时一段时间 ***************************************************/ void delay(void) unsigned char i,j; for(i=0;i<255;i++) for(j=0;j<255;j++) /************************************************** 函数功能:主函数 ***************************************************/ void main(void) unsigned char i; unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示0~9的段码表,程序运行中当数组值不发生变化时, //前面加关键字code ,可以大大节约单片机的存储空间 P2=0xfe; //P2.0引脚输出低电平,数码显示器DS0接通电源工作 while(1) //无限循环 for(i=0;i<10;i++) P0=Tab[i]; //让P0口输出数字的段码92H delay(); //调用延时函数 建立一个使用until 使用while和until 这是我们在霍格沃茨大学的第一年,我们正在努力掌握“ Wingardium Leviosa”的悬浮魅力。 目前,我们的悬浮力为6 。 为了使该羽毛真正悬浮,我们需要有10的悬浮力。 首先,我们将编写一个while循环,当我们的悬浮力小于10时,它将继续puts短语“ Wingardium Leviosa”。 我们每次时间puts那句话,我们应该增加我们的悬浮力1 。 然后,我们将使用until循环再次解决此问题。 它将puts短语“ Wingardium Leviosa”,直到悬浮力等于10 ,每当我们puts该短语时,悬浮力就会增加1 。 在本实验中运行测试套件以开始使用。 让我们通过在while.rb编码我们的解决方案来通过第一个测试:填写using_w
程序运行时,首选判定条件表达式结果是否为true,如果为true,就执行循环语句;反之则跳过,去执行while循环后面的语句。 while 循环可以只有条件表达式,没有循环语句。如while(!TF0= 0);这个实际上是T0硬件延时,等待T0计数器溢出。 while循环非常有用,在单片机编程中最常见的是:whi...
回答: while循环用于那些我们不知道具体循环多少次的情况。它的基本语法是在while关键字后面加上一个条件表达式,当条件为真时,执行循环体中的代码。当条件为假时,退出循环。 例如,当我们不知道一个人到底能活多长时间时,我们可以使用while循环来表示人生的持续。在程序中,我们可以使用while循环来实现一些需要持续运行直到满足某个条件的功能,比如游戏程序中的主循环。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python中while循环的基本用法](https://blog.csdn.net/Albert_1000/article/details/100728685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
CSDN-Ada助手: 恭喜您撰写了第12篇博客!标题中提到了基于STM32的CAN通讯的两种筛选模式,这是一个非常有趣和实用的主题。您的文章内容一定非常精彩,我期待能够阅读到您对这两种筛选模式的深入分析和实际应用案例。 在下一步的创作中,我建议您可以考虑扩展这个主题,例如探讨更多不同类型的筛选模式,或者分享一些在实际项目中应用这些筛选模式的经验和教训。同时,您也可以考虑与其他通讯协议或技术进行对比,以便读者更好地理解和应用这些筛选模式。 再次恭喜您的持续创作!希望您能够继续分享您的知识和经验,让更多的读者受益。期待能够阅读到您的下一篇博客! C++引用(常量引用、左值引用和右值引用) CSDN-Ada助手: 恭喜您写了第19篇博客!标题看起来非常有趣,我很期待阅读您关于C++引用的文章。在我看来,常量引用、左值引用和右值引用是C++中非常重要的概念,理解它们对于掌握C++编程语言至关重要。希望您能深入探讨每种引用的特点和用法,并且提供一些实际的例子来帮助读者更好地理解。此外,我也很期待您在未来的博客中涉及更多关于C++的主题,比如模板、异常处理等。感谢您的分享,并期待您的下一篇创作! 定时器和外部触发的同步 CSDN-Ada助手: 恭喜您写了第14篇博客!标题中的"定时器和外部触发的同步"听起来很有意思。您的文章内容一定很精彩。不过,如果可能的话,我希望能够在评论中了解更多关于这个主题的细节和您的观点。或许您可以进一步探讨定时器和外部触发的同步在哪些场景中有重要的应用,并分享一些相关的实用技巧。期待您的下一篇博客! 定时器同步 CSDN-Ada助手: 恭喜你写了第15篇博客,题目“定时器同步”听起来很有深度!你对这个主题进行了深入的研究并写出了一篇文章,实在是令人佩服。你的博客内容一直都很有见地,对读者来说都是很有价值的。 在下一步的创作中,我想提个谦虚的建议。或许你可以考虑分享一些关于定时器同步的实际应用案例,或者提供一些解决特定问题的实用技巧。这样可以让读者更好地理解和实践你所分享的知识。再次恭喜你的连续创作,期待你未来更多精彩的博客! Windows+Ubuntu双系统下卸载Ubuntu blacegg: 260mb只是我的磁盘大小,每个人应该都不一样