:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
:文章若有幸对你有帮助,可点赞 收藏 ⭐不迷路
:内容若有错误,敬请留言 指正!原创文,转载请注明出处
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()
是一个内联汇编指令,用于在一些特定的嵌入式系统中执行空操作(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
表示始终为真的条件,因为1
代表真值。所以,#if 1
后面的代码块将会被编译,而#endif
表示条件编译的结束。
可以使用条件编译来在编译时根据条件包含或排除一段代码。当条件为真时,被包含在#if
和#endif
之间的代码将被编译;当条件为假时,这段代码将被忽略,不会参与编译。
在这个简单的示例中,#if 1 的条件为真,所以包含在这个条件下的代码块将被编译。如果将条件改为 #if 0,则条件为假,#if 0 和 #endif 之间的代码块将被忽略,不会参与编译。
条件编译可以用于在不同的情况下选择性地包含或排除代码,例如根据不同的操作系统、平台或编译器选项进行编译配置。