stm32 cube ide 编译提示 undefined reference to

需求 编译的时候,提示 undefined reference to 解决 这种问题经常会碰到,一般就是相关源文件没有在编译列表里面,结果经过仔细查找,都添加进去了。后来经过仔细查找,发现原来是 c++ 和 c 混合编译的问题,在 c++ 中文件里面调用的函数,其所在的头文件没有使用 extern "C" 包含,导致的。想要修改也很简单,不需要改动头文件,只需要在 c++ 文件中这样: #include "gx_api.h" extern "C" { #include "gx_display.h" } 而且其实在 map 文件中是有相关线索的,下面分别是没有用 extern 包含,和用了 extern 包含的 map 文件中的函数信息。可以明显看到有 extern 包含的,有相关地址。 .text._gx_display_driver_565rgb_setup 0x0000000000000000 0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o .text._gx_display_driver_565rgb_setup 0x000000000801e6e8 0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o 0x000000000801e6e8 _gx_display_driver_565rgb_setup 参考 gcc “undefined reference to” 问题解决方法

<span title='2023-11-17 16:17:00 +0800 CST'>2023-11-17</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;53 words&nbsp;·&nbsp;RamLife

stm32 cube ide 寄存器变量监控

需求 调试的时候,有时候会比较在意某个寄存器到底是什么时候被修改? 解决 这个其实可以参照 eclipse 正常的变量监控的方法去做。 找到寄存器对应的结构体变量,比如说我需要监视 uart1 的 TCIE 在 DMA 发送的时候,是什么时候被置位的。我就可以先找到 uart1 对应的结构体变量 huart1. 添加变量监控。 在 右侧的 expressions 中添加 huart1 添加断点。 在 huart1 -> instance -> CR1 上面右键,点击 add watch point 就可以新增一个监视这个寄存器的断点了。 参考 Eclipse开启变量监控

<span title='2023-10-25 18:19:00 +0800 CST'>2023-10-25</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;36 words&nbsp;·&nbsp;RamLife

mdk compiler version 5

需求 新版本的 mdk 默认安装 v6 编译器,旧工程依赖 v5 编译器无法编译,需要解决。 解决 下载 v5 编译器 官网基本很难下载 第三方 csdn 下载 网盘 https://pan.baidu.com/s/1EgzGFCL7VflL9r6iJNj0sQ?pwd=5rhc 安装 安装可以和 mdk 安装到一起去,也可以安装到其他地方。 配置 点击魔棒右边的 file extensions. folder 标签 -> use arm compiler 右边的 … add compiler 选择你上一步安装的位置 close 使用 点击魔棒 target 标签 -> arm compiler 下拉,选择 v5.06… 参考 《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

<span title='2023-10-23 18:11:00 +0800 CST'>2023-10-23</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;53 words&nbsp;·&nbsp;RamLife

QT pri 文件,让工程更加模块化

需求 qtcreator 工程一但文件多了以后,看着就很乱。 解决 使用 pri 文件即可,这个文件相当于管理一个子文件夹的文件。 编写 pri 比如说,我需要在主源码目录下面新建一个 eventdispatcher_libev 这个子文件夹,并且使用 pri 进行管理。 HEADERS += \ $$PWD/eventdispatcher_libev.h \ $$PWD/eventdispatcher_libev_p.h \ $$PWD/qt4compat.h SOURCES += \ $$PWD/eventdispatcher_libev.cpp \ $$PWD/eventdispatcher_libev_p.cpp \ $$PWD/timers_p.cpp \ $$PWD/socknot_p.cpp LIBS += -lev 修改 pro 需要在 pro 文件中,包含相应的 pri 文件,只要没有问题,那么会自动把 pri 文件中注明的源文件给导入到项目文件列表中,不需要手动去添加已有文件。 INCLUDEPATH += $$PWD/eventdispatcher_libev # 工程编译时,会去INCLUDEPATH列表下的目录搜索头文件 unix:include($$PWD/eventdispatcher_libev/eventdispatcher_libev.pri) 如果是和系统相关的,比如说上面这个要求是 unix 类的系统,那么就需要增加 unix: ,否则不需要这个标注。 参考 Qt使用.pri模块化工程 在Qt项目中添加pri文件 Qt中pri文件介绍及使用(图文超级简单!!)

<span title='2023-07-21 18:42:00 +0800 CST'>2023-07-21</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;59 words&nbsp;·&nbsp;RamLife

Android Studio 如何单元测试

需求 编写注册资料中,需要写关于单元测试相关的资料,所以需要使用 android studio 来进行单元测试. 解决 android 单元测试分为两种: 本地测试,在 test 文件夹,只涉及 java 本身,可以用 jvm 来进行测试的。 仪器测试,在 androidTest 文件夹,涉及到 android 框架,或者其他特殊情况等等。 本地测试 本地测试很简单,在源码中需要测试的方法上,右键 -> generate -> test,就可以弹出创建 test 的窗口,根据自己需要进行勾选,然后点击 ok 即可。如果已经存在测试代码文件了,还会提示你更新。 在测试代码中,主要依靠各种 assert 来判断是否满足条件,满足就通过,不满足就不通过。还有建议使用 import org.junit.Test; 而不是 import junit.framework.TestCase; assertTrue assertFalse assertEquals 注意在比较浮点数时,最好使用带 delta 参数的方法。 assertNotNull assertNull assertSame 判断是否是同一个引用 assertNotSame 在测试代码的方法或者类左侧有 run 的图标,点击可以选择是否在测试的时候计算覆盖率。 另外,setUp 可以用来做测试前的准备,tearDown 可以用来做测试后的首尾。 仪器测试 参考 编写你的第一个 Android 单元测试 Android 单元测试,从小白到入门开始 在AndroidStudio中使用单元测试 Android 单元测试只看这一篇就够了 构建有效的单元测试 构建插桩单元测试 构建本地单元测试 在 Android Studio 中测试...

<span title='2023-06-03 10:58:00 +0800 CST'>2023-06-03</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;83 words&nbsp;·&nbsp;RamLife

stm32 cube ide 打印开启浮点数支持

需求 在使用 stm32 cube ide 开发的时候,调试时希望使用 sprintf, printf 等 通过 %f 打印浮点数,需要开启 ide 相关支持. 解决 开启 浮点数支持, =project –> properties –> c/c++ build –> setting –> tools setting –> mcu setting –> use float with printf from newlib-nano(-u_printf_float)= 参考 C语言用printf读取和输出double类型

<span title='2023-05-24 17:35:00 +0800 CST'>2023-05-24</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;40 words&nbsp;·&nbsp;RamLife

stm32 cube ide 使用 c 和 c++ 混合开发

需求 在使用 stm32 cube ide 开发的时候,希望通过 c++ 开发,但是自动生成的一些文件是 c 语言的,所以需要解决混合开发的问题。 解决 项目使用 cpp 在新建项目的时候,targeted language 选择 C++ 即可。 混合开发 所有 cpp 需要用到的 c 的头文件,都需要包含 extern "C" 这个标识,需要把相关代码如下包含起来: // may be main.h #ifdef __cplusplus extern "C" { #endif // something #ifdef __cplusplus } #endif 参考 STM32CubeIDE实现nRF24L01通信(C和C++混合编程) STM32CubeMX快速创建工程 点亮LED灯 设置C/C++混合编译 让你的 STM32Cube KEILV5 + HAL库工程支持C++开发 C 和 C++混合编译

<span title='2023-05-17 17:35:00 +0800 CST'>2023-05-17</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;56 words&nbsp;·&nbsp;RamLife

Android Studio 统计项目代码行数

需求 编写注册资料中,有一项是统计代码行数,所以需要获取在 android studio 中项目的代码行数,正常来说代码行数包含源码行数和注释行数。 解决 安装插件 在 android studio 中,依次点击 File -> Settings -> Plugins, 然后搜索 statistic, 点击安装。 使用插件 在屏幕下方 logcat 那一行,找到 statistic, 打开后,点击左上角的 refresh 第一个是 overview, 可以根据自己的需要点击 java 页面,就可以看到总的代码行数了。 参考 Android Studio 统计代码行数插件—{Statistic} Android studio统计代码行数 Android Studio 统计项目代码总行数

<span title='2023-02-20 07:40:00 +0800 CST'>2023-02-20</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;40 words&nbsp;·&nbsp;RamLife

QT 在 win 平台编辑,在 Linux 平台调试

需求 需要在 windows 平台使用 qtcreator 编辑,在 linux 平台下编译并调试,综合考虑还是 samba 最简单适合。 解决 linux 设备建立 qt 的工程. 复制工程目录下的 .pro.user, 并重命名在后面增加 .linux 的后缀。 linux 设备开启 samba. 并把工程文件夹共享出来。 windows 设备把 samba 目录映射为网络驱动器。 windows 上的 qtcreator 打开 samba 中的工程,会提示工程有些问题,并让你重新选择编译工具。 qtcreator 会自动重命名原来的 .pro.user, 在后面追加一串字符。 在 linux 设备,复制工程目录下的 .pro.user, 并重命名在后面增加 .win 的后缀。 建立两个脚本文件,一个用来复制 .linux 覆盖当前的 .pro.user, 另一个是用 .win 来覆盖。 使用时,在 win 可以正常的进行代码编辑,在 linux 调试前,执行脚本,替换为 linux 的 .pro.user, 当调试完成后,返回 win 进行编辑时,再替换成 win 的 .pro.user. 参考 ubuntu 20.04 安装配置Samba服务,Windows 和 linux协同工作

<span title='2023-02-15 17:01:00 +0800 CST'>2023-02-15</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;72 words&nbsp;·&nbsp;RamLife