我是微控制器的新手。我已经阅读了很多关于volatilec 中变量的文章和文档。我的理解是,在使用时volatile我们告诉编译器不要cache优化变量。但是我仍然没有得到真正应该使用它的时间。
例如,假设我有一个简单的计数器和这样的 for 循环。
for(int i=0; i < blabla.length; i++) {
//code here
}
Run Code Online (Sandbox Code Playgroud)
或者当我写这样一段简单的代码时
int i=1;
int j=1;
printf("the sum is: %d\n" i+j);
Run Code Online (Sandbox Code Playgroud)
我从不关心此类示例的编译器优化。但是在许多范围内,如果变量未声明为volatile输出,则不会如预期的那样。我怎么知道我必须关心其他示例中的编译器优化?
我是 FreeRTOS 和实时操作系统的新手。我想知道在 FreeRTOS 任务中实现功能是否是一种好的编程风格。例如
void displayTask(void* param) {
static void Factorial (params) {
// doSth
}
for(;;) {
//call it here
Factorial(params);
}
}
Run Code Online (Sandbox Code Playgroud)
还是只是在任务之外实现它更好?,因为如果我有很多功能,我猜很难阅读代码。