STM32串口通信颜色识别程序调试与错误解决

在使用STM32微控制器进行串口通信颜色识别程序开发过程中,遇到了一些编译错误和警告信息。本文将详细介绍这些错误信息的原因以及解决方法。

错误信息

以下是编译过程中遇到的错误信息:

../Core/Src/main.c: In function 'splitString':
../Core/Src/main.c:110:21: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
  110 |         output[i] = malloc(2);
      |                     ^~~~~~
../Core/Src/main.c:26:1: note: include '<stdlib.h>' or provide a declaration of 'malloc'
   25 | #include <stdio.h>
  +++ |+#include <stdlib.h>
   26 | /* USER CODE END Includes */
...
../Core/Src/main.c:407:13: error: invalid storage class for function 'MX_USART1_UART_Init'
  407 | static void MX_USART1_UART_Init(void)
      |             ^~~~~~~~~~~~~~~~~~~
...
../Core/Src/main.c:536:1: error: expected declaration or statement at end of input
  536 | }
      | ^
...
make: *** [Core/Src/subdir.mk:34: Core/Src/main.o] Error 1
"make -j8 all" terminated with exit code 2. Build might be incomplete.

23:34:41 Build Failed. 7 errors, 24 warnings. (took 310ms)

错误分析

  1. malloc函数未声明: 编译器提示malloc函数未声明,这是因为代码中没有包含stdlib.h头文件。
  2. main函数重复定义: 代码中出现了两个main函数的定义,导致编译器报错。
  3. 函数存储类别错误: 编译器提示MX_USART1_UART_Init等函数的存储类别错误,这可能是由于这些函数在头文件中被声明为static,但在源文件中没有使用static关键字定义。
  4. 代码结尾错误: 编译器提示代码结尾错误,这可能是由于代码中缺少必要的括号或分号。

解决方法

  1. 包含stdlib.h头文件: 在代码开头添加#include <stdlib.h>,以声明malloc函数。
  2. 删除重复的main函数定义: 只保留一个main函数的定义。
  3. 检查函数定义: 确保MX_USART1_UART_Init等函数在源文件中的定义使用了static关键字。
  4. 检查代码结尾: 确保代码结尾有正确的括号和分号。

修改后的代码

以下是修改后的代码示例,其中包含了上述错误的解决方法以及一些警告信息的处理:

#include "main.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

// ... 其他代码 ...

int main(void)
{
  // ... 其他代码 ...

  // ... 代码逻辑 ...

  while (1)
  {
  }
}

// ... 其他函数定义 ...

总结

通过仔细分析编译错误和警告信息,并采取相应的解决方法,成功解决了STM32串口通信颜色识别程序的编译问题。在嵌入式软件开发过程中,遇到编译错误和警告信息是很常见的,重要的是要学会分析问题并找到解决方法。


原文地址: https://www.cveoy.top/t/topic/hGC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录