那些年写过的Bug

所写的bug不分先后顺序,完全看心情(碰到的时间👏)

No.1 sizeof()

对,就是这个 sizeof()导致的一个bug,找到半天,迫不得已换了一个方式。

简单说下上下文,在需要传递一个 float[5]到后面的函数中,所以在声明函数的时候我使用了 flaot param[5]来接收,然后我在拷贝这个数组的时候使用了 memcpy()。第三个参数回给一个size来表示拷贝多少字节的数据,然后我在这里就使用的是 memcpy(&hndl->param, &param, 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 我给的是一个文件,其实他是一个目录,不能写一个文件

  1. 直接添加到 add_executeble 中add_executable(sfud

  2. 使用 FILE

    FILE (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}
    )