那些年写过的Bug
所写的bug不分先后顺序,完全看心情(碰到的时间👏)
No.1 sizeof()
对,就是这个 sizeof()导致的一个bug,找到半天,迫不得已换了一个方式。
简单说下上下文,在需要传递一个 float[5]到后面的函数中,所以在声明函数的时候我使用了 flaot param[5]来接收,然后我在拷贝这个数组的时候使用了 memcpy()。第三个参数回给一个size来表示拷贝多少字节的数据,然后我在这里就使用的是 memcpy(&hndl->param, ¶m, sizeof(param));这样实现,最开始没有发现问题,在测试的时候发现现象怎么都不对,打印了一下参数才发现这个数组只有前两个有值,其他都是0。
这也是一个非常基础错误,关键点在于🌟数组是通过指针传递的,所以他sizeof的时候其实没有算整个数组的大小,而是地址。所以结果是 sizeof(param) = 8。
所以这里其实就最简单的赋值方式,遍历拷贝赋值方式就行。
No.2 QT读取串口
不是我的bug,是和同事一起调试出现的。
我们测试arm和上位机串口通信时出现问题。接受我arm发送的数据就不行,但是他自己用回环测试就可以,最后发现他时使用QT中的 serial port的一个函数,大概就是等待数据然后然后会发送一个 singal,但是他没有使用信号去触发,直接用if去判断这个函数的,所以他就一直收不到我给的数据,最后换到信号与槽处理就问题。
虽然不搞QT但是也记录下
No.3 CMake无法找到main
cmake_minimum_required(VERSION 3.16)
project(sfud)
set(CMAKE_CXX_STANDARD 17)
add_definitions("-g")
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/inc
${CMAKE_CURRENT_SOURCE_DIR}/cDraw/spi
)
aux_source_directory(test_sfud_c.c SRC_SFUD_TEST)
aux_source_directory(inc SFUD_INC)
aux_source_directory(src SFUD_SRC)
aux_source_directory(port SFUD_PORT)
aux_source_directory(cDraw/spi CDraw_SPI)
add_executable(sfud
${SRC_SFUD_TEST} ${SFUD_INC} ${SFUD_SRC} ${SFUD_PORT} ${CDraw_SPI}
)
上面是有问题的 CMakeList.txt 问题在于第一个 aux_source_directory 我给的是一个文件,其实他是一个目录,不能写一个文件
-
直接添加到
add_executeble中add_executable(sfud -
使用
FILEFILE (GLOB current_source_list . "*.c") aux_source_directory(inc SFUD_INC) aux_source_directory(src SFUD_SRC) aux_source_directory(port SFUD_PORT) aux_source_directory(cDraw/spi CDraw_SPI) add_executable(sfud ${current_source_list} ${SRC_SFUD_TEST} ${SFUD_INC} ${SFUD_SRC} ${SFUD_PORT} ${CDraw_SPI} )