发现问题:
最近在学习互斥量的时候,写一个优先级翻转的实验,发现用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助手:
C++引用(常量引用、左值引用和右值引用)
CSDN-Ada助手:
定时器和外部触发的同步
CSDN-Ada助手:
定时器同步
CSDN-Ada助手:
Windows+Ubuntu双系统下卸载Ubuntu
blacegg: