.\src\tm1668.c:43: error 146: two or more storage classes in declaration for 'delay_nms' .\src\tm1668.c:53: error 146: two or more storage classes in declaration for 'delay_us'
时间: 2023-06-27 13:03:56 浏览: 69
这个错误是因为在函数声明中同时使用了多个存储类别,比如在函数声明中同时使用了 static 和 extern 修饰符。这是不允许的,因为这些存储类别之间存在冲突。
你需要检查一下 tm1668.c 文件中的 delay_nms 和 delay_us 函数声明,看看是否同时使用了多个存储类别。如果是的话,你需要将其中一个存储类别去掉,只保留一个即可。例如,如果你想让这两个函数都是静态函数,那么可以将它们的声明改成:
```c
static void delay_nms(unsigned int n);
static void delay_us(unsigned int n);
```
如果你想让这两个函数都是外部可见的函数,那么可以将它们的声明改成:
```c
extern void delay_nms(unsigned int n);
extern void delay_us(unsigned int n);
```
如果你不确定该如何修改,可以将相关代码贴出来,我们再一起看看如何修改。
相关问题
../Core/Inc/main.h:55:23: error: two or more data types in declaration specifiers typedef unsigned char _Bool;
这 error 的原因是 `_Bool` 是 C99 中的关键字,但在某些编译器中,可能已经定义了 `_Bool` 作为其他类型的别名。因此,您可以尝试使用 `<stdbool.h>` 头文件来定义布尔类型,而不是使用 `_Bool`。
要使用 `<stdbool.h>` 头文件,请在代码中添加以下行:
```
#include <stdbool.h>
```
然后,您可以使用 `bool` 代替 `_Bool`:
```
typedef bool my_bool;
```
或者,您也可以使用 `#define` 来定义布尔类型:
```
#define my_bool unsigned char
```
请注意,这种方法可能会导致一些编译器警告或错误,因为它不是标准的布尔类型定义方式。
src\led.c(15): error: #268: declaration may not appear after executable statement in block
这个错误意味着在函数内部的代码块中,有一个声明语句出现在一个可执行语句之后。这通常是因为程序员在代码块中放置了一个语句,而忘记了在语句前面声明所需的变量或函数。
例如,在以下代码中,变量i的声明出现在循环语句之后,这将导致编译器产生类似于 "#268: declaration may not appear after executable statement in block" 的错误:
```
void loop_function() {
int j;
for (j = 0; j < 10; j++) {
printf("%d\n", j);
}
int i = 0; // 这个声明语句出现在可执行语句之后,会导致错误。
}
```
要解决这个错误,您需要将声明放在可执行语句之前或将其移到函数的顶部。例如:
```
void loop_function() {
int i = 0; // 声明语句现在在可执行语句之前
int j;
for (j = 0; j < 10; j++) {
printf("%d\n", j);
}
}
```
或者,您可以将声明放在代码块外,以便在整个函数中都可以使用该变量:
```
int i; // 声明现在在函数外
void loop_function() {
int j;
for (j = 0; j < 10; j++) {
printf("%d\n", j);
}
i = 0; // 可以在代码块中使用i
}
```