划分flash空间
需要更改STM32xxx_FLASH.ld文件
输出其他格式文件
代码补全功能
方法1
Cube IDE 实现自动代码补全功能_stm32cubeide代码补全-CSDN博客
太麻烦,不搞
方法2
打开程序Window菜单下Preferences选项,在 C/C++ --> Editor --> Content Assist --> Advanced
接下来设置相应快捷键 General --> Keys
搜索content assist
开启contextWindow
未找到该窗口,鼠标点中可以显示函数上下文
添加项目文件夹外的目录源码
相对路径
../
warning: AgingTestSlave.elf has a LOAD segment with RWX permissions
这是 Binutils 2.39 引入的一个新的安全类型的警告, GCC在升级版本时会带着新版本的 Binutils 一起发布. 如果要消除这个警告, 要么修改ld文件, 要么屏蔽掉它.
在嵌入式系统开发中,链接器脚本(ld文件)用于定义输出文件的内存布局。如果某个段被错误地定义为可读写和可执行(RWX),这可能会引发安全警告。以下是一些可能的原因:
-
链接器脚本配置不当:链接器脚本中的某些段可能没有被正确地设置为只读或只写。例如,代码段应该被设置为只读和可执行(RX),而数据段应该被设置为只读或读写(RW)。
-
编译器选项问题:某些编译器选项可能会导致生成的段具有不适当的权限。例如,使用
-z execstack
选项会使所有段都具有可执行权限,这可能是导致RWX段的原因。 -
自定义段未正确设置权限:如果项目中使用了自定义段,并且这些段在链接器脚本中没有正确设置权限,也可能导致RWX段的出现。
-
工具链版本问题:在某些情况下,升级到新版本的工具链(如GCC或Binutils)可能会引入新的安全检查,从而导致之前未被注意到的RWX段问题变得明显。
-
代码或数据布局不正确:代码和数据应该被放置在不同的段中,以确保它们具有正确的权限。如果代码和数据混合在同一段中,可能会导致该段被标记为RWX。
解决办法1:修改链接脚本
在"xx_FLASH.ld"文件中,找到并添加上(READONLY),即可消除
- .ARM.extab (READONLY) :
- .ARM (READONLY) :
- .preinit_array (READONLY) :
- .init_array (READONLY) :
- .fini_array (READONLY) :
解决方法2:屏蔽警告
printf浮点型
sprintf警告warning: format '%u' expects argument of type 'unsigned int', but argume
不同平台下不一样! 下面说的是arm 32位平台的
%d 输出有符号32位的
%ld 输出有符号32位的
%lld 输出有符号64位的
%u 输出无符号32位的
%lu 输出无符号32位的
%llu 输出无符号64位的
%x 输出32位16进制数的
%lx 输出32位16进制数的
%llx 输出64位16进制数的
清除所有断点
failed to insert all hardware breakpoints
字节对齐
typedef struct{
uint8_t check;
uint8_t len;
uint8_t id;
uint32_t res;
}SYS_CFG_INFO;
使用1字节对齐后
#pragma pack(1)
typedef struct{
uint8_t check;
uint8_t len;
uint8_t id;
uint32_t res;
}SYS_CFG_INFO;
#pragma pack()
multiple definition of `errno';
已解决:CubeIDE 1.9.0 FreeRTOS 高级设置 -> USE_NE...- STMicroelectronics 社区
问题已经在新版本V6.6中解决
旧版本的解决方法:
方法1: -fcommon(不建议)
不建议,不清楚会有啥风险
方法2:直接更改MX里面固件库源码(省的每次生成又要改一次)
例如我的路径在:
C:\Users\BANGONG1\STM32Cube\Repository\STM32Cube_FW_F4_V1.26.2\
修改Middlewares\Third_Party\LwIP\system\OS\sys_arch.c