【C语言基础】分享近期学习到的volatile关键字、__NOP__()函数以及# #if 1 #endif

:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
:文章若有幸对你有帮助,可点赞 收藏 ⭐不迷路
:内容若有错误,敬请留言 指正!原创文,转载请注明出处

文章目录

  • volatile的使用方法
  • __NOP__()是什么函数?
  • #if 1 #endif


volatile的使用方法

volatile的作用: 当我们在使用C语言时,volatile关键字用于告诉编译器不要对某个变量进行优化。它通常用于修饰那些可能被硬件设备、中断或其它线程修改的变量。

下面通过使用volatile关键字的示例代码进行说明:

volatile int counter = 0;
void incrementCounter() {
        counter++;
    }
    int main() {
        printf("Initial counter value: %d\n", counter);
        incrementCounter();
        printf("Counter after increment: %d\n", counter);
        return 0;
    }

代码解释: 在上述代码中,counter变量被声明为volatile int类型。这意味着编译器不会对counter进行任何优化,以确保每次对counter的读取和修改都是直接从内存中进行,而不是从寄存器或其它缓存中读取。
在一些特定的场景下,例如在嵌入式系统中操作硬件寄存器或处理中断时,使用volatile关键字非常重要。它确保我们在读取和修改变量时的可见性和一致性,避免了编译器可能进行的优化,从而保证了代码的正确性。
需要注意的是,volatile关键字仅仅用于告诉编译器不要对变量进行优化,它并不能解决所有的并发多线程问题。对于需要实现同步和互斥的场景,我们仍然需要使用适当的同步机制(如互斥锁或原子操作)来保证线程安全。
参考:https://www.runoob.com/w3cnote/c-volatile-keyword.html

NOP()是什么函数?

NOP()是什么? __NOP() 是一个内联汇编指令,用于在一些特定的嵌入式系统中执行空操作(no operation),相当于一个延时函数
具体来说,__NOP__() 是一个特殊的汇编指令,它告诉处理器不执行任何操作,即产生一个空的机器指令。这个指令通常用于延迟一段时间或调整代码的执行速度。
使用条件:当使用_nop_()函数(可理解为软件延时)时,必须在开头添加头文件#include
延时大小:而_nop_()函数的空操作产生的时间与晶振有关,用stc-isp软件,自动给你计算出来的
代码示例:

//100us
void Delay100us()		//@12.000MHz
{
	unsigned char i;
 
	_nop_();
	i = 47;
	while (--i);
}

#if 1 #endif

#if 1#endif 是条件编译的预处理指令。在这个示例中,#if 1 表示始终为真的条件,因为 1
代表真值。所以,#if 1 后面的代码块将会被编译,而 #endif 表示条件编译的结束。
可以使用条件编译来在编译时根据条件包含或排除一段代码。当条件为真时,被包含在 #if#endif 之间的代码将被编译;当条件为假时,这段代码将被忽略,不会参与编译。
在这个简单的示例中,#if 1 的条件为真,所以包含在这个条件下的代码块将被编译。如果将条件改为 #if 0,则条件为假,#if 0 和 #endif 之间的代码块将被忽略,不会参与编译。
条件编译可以用于在不同的情况下选择性地包含或排除代码,例如根据不同的操作系统、平台或编译器选项进行编译配置。

在这里插入图片描述

你可能感兴趣的:(#,C语言,c语言,学习,开发语言)