..\HARDWARE\bsp_exti.c(86): error: #142: expression must have pointer-to-object type
时间: 2024-10-19 18:11:57 浏览: 37
这个错误信息来自嵌入式开发环境,通常与硬件中断相关的EXTI (External Interrupt)处理程序的C代码文件"bsp_exti.c"。错误编号#142表示在第86行遇到了一个编译错误,原因可能是试图对非指针类型的表达式进行了操作,而EXTI中断服务 Routine (ISR) 需要一个指向函数的指针。
在ARM Cortex-M系列微控制器中,EXTI中断经常会通过`EXTI_Callback`这样的函数指针结构来注册中断处理函数。如果代码中某个地方没有正确地将中断回调函数设置为指针形式,就会触发这种错误。检查86行的上下文,看看是否有如下情形:
```c
// 错误示例
void myFunction(void); // 没有指定类型为pointer
bsp_exti_Init(line86, myFunction); // 应该是myFunction();
// 正确示例
void (*myFunction)(void); // 指定为function pointer类型
bsp_exti_Init(line86, &myFunction); // 使用&符号获取函数地址
```
相关问题
..\src\app_gpio.c(835): error: #20: identifier "CHARGE_DETECT_INPUT_EXTI_LINE" is undefined if (EXTI_GetITStatus(CHARGE_DETECT_INPUT_EXTI_LINE) != RESET) ..\src\app_gpio.c(877): error: #20: identifier "CHARGE_DETECT_INPUT_PIN" is undefined GPIO_InitStructure.Pin = CHARGE_DETECT_INPUT_PIN; ..\src\app_gpio.c(880): error: #20: identifier "CHARGE_DETECT_INPUT_PORT" is undefined GPIO_InitPeripheral(CHARGE_DETECT_INPUT_PORT, &GPIO_InitStructure); ..\src\app_gpio.c(960): error: #20: identifier "PREDIS_PIN" is undefined GPIO_InitStructure.Pin = PREDIS_PIN | PRECHG_PIN; ..\src\app_gpio.c(960): error: #20: identifier "PRECHG_PIN" is undefined GPIO_InitStructure.Pin = PREDIS_PIN | PRECHG_PIN; ..\src\app_gpio.c(963): error: #20: identifier "PREDIS_PRECHG_PORT" is undefined GPIO_InitPeripheral(PREDIS_PRECHG_PORT, &GPIO_InitStructure);
这是一些编译错误,看起来是在应用程序的gpio.c文件中出现的。错误信息说找不到一些标识符,如CHARGE_DETECT_INPUT_EXTI_LINE、CHARGE_DETECT_INPUT_PIN、CHARGE_DETECT_INPUT_PORT、PREDIS_PIN、PRECHG_PIN和PREDIS_PRECHG_PORT。这些标识符可能没有被正确地定义或声明。你需要检查一下gpio.c文件,看看这些标识符在哪里定义或声明,或者是否有任何拼写错误。如果你无法解决这些错误,你可以尝试在相关开发论坛或社区上寻求帮助。
..\HARDWARE\EXTI\exti.c(52): error: #268: declaration may not appear after executable statement in block
根据你提供的错误信息,编译器报告了一个在可执行语句后出现声明的错误。这意味着在 exti.c 文件的第52行之后出现了一个声明,但是根据 C 语言的语法规则,声明必须在可执行语句之前。
要解决这个问题,你需要将声明放在可执行语句之前,或者将其移动到适当的位置。请注意,C 语言要求在同一个代码块中,声明必须在可执行语句之前。
例如,如果你的代码是这样的:
```c
void myFunction()
{
int myVariable = 10;
printf("Hello, world!\n");
int anotherVariable; // 错误:声明出现在可执行语句之后
}
```
你可以将声明放在可执行语句之前,或者将其移到适当的位置:
```c
void myFunction()
{
int myVariable = 10;
int anotherVariable; // 正确:声明出现在可执行语句之前
printf("Hello, world!\n");
}
```
请检查你的代码,并确保在可执行语句之后没有出现声明。如果你需要进一步的帮助,请提供相关的代码片段,以便我能更好地帮助你解决问题。
阅读全文