volatile的一段for循环例子

本文对比了使用 volatile 和无修饰变量在Java中进行空循环的性能表现,展示了volatile变量每次从内存地址中重新读取的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

case1:
	private static int i=0;
	
	public static void main(String[] args) {
		for(i=0;i<100000000;i++);
	}

case2:

	private volatile static int i=0;
	
	public static void main(String[] args) {
		for(i=0;i<100000000;i++);
	}

这2个语句用来测试空循环的速度的
但是case1里编译器肯定要把它优化掉,根本就不执行。volatile会每次从内存地址中重新读取这个变量。
### Code Composer Studio 中 `for` 循环的使用方法 在嵌入式开发环境中,`for` 循环是一种常用的控制结构,用于重复执行一段代码特定次数。以下是关于如何在 Code Composer Studio (CCS) 中编写和调试 `for` 循环的具体说明。 #### 基本语法 C 语言中的 `for` 循环具有以下基本形式: ```c for (初始化; 条件判断; 更新表达式) { // 要执行的代码块 } ``` - **初始化**:设置循环变量的初始值。 - **条件判断**:每次进入循环前都会检查此条件是否成立(通常是一个布尔表达式)。如果为真,则继续执行;否则退出循环。 - **更新表达式**:每完成一次迭代后运行的操作,通常是修改循环计数器的值。 #### 示例程序 下面展示了一个简单的例子,在 CCS 的项目中可以用来测试 LED 点亮功能。假设我们有一个 GPIO 引脚连接到外部硬件上的 LED。 ```c #include <stdint.h> #include "driverlib/gpio.h" #include "inc/hw_gpio.h" void delay(uint32_t count); // 函数声明 int main(void){ uint8_t i; MAP_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2); while(1){ for(i=0;i<5;i++) { // 控制点亮次数 MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1); delay(1000000); // 延迟函数调用 MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0); delay(1000000); // 关闭LED并延迟一段时间 } for(i=0;i<3;i++) { // 另一组不同的操作 MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2); delay(500000); MAP_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); delay(500000); } } } // 定义延时函数 void delay(uint32_t count){ volatile uint32_t j; for(j = 0 ;j<count;j++); } ``` 上述代码展示了两个独立的 `for` 循环分别控制不同端口上的 LED 状态切换[^3]。第一个循环让 PF1 上的 LED 连续闪烁五次,而第二个则使 PF2 上的灯泡闪三次,两次之间有明显的时间间隔差异通过调整参数实现。 #### 注意事项 当利用 `for` 结构编程时需要注意几个方面: - 初始化部分只会在整个语句开始之前被执行一次; - 如果省略掉任何一部分(比如不写终止条件),可能会导致无限循环或者编译错误; - 应该合理设定步长以及边界范围以免越界访问数组或其他资源造成不可预期的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值