嵌入式开发使用 GCC编译器警告错误问题

24 篇文章 132 订阅
订阅专栏
用arm-none-eabi-gcc开发STM32也这么长时间了,期初编译过程也遇到过或多或少的问题,
与Keil的ARMCC还是有一些不同的,最近一次为了跑系统节约RAM空间,对以前的代码进行过一些修改,
又发现了一些问题,想着还是记录下来,方便你我他。

写在前面,本文说明的都是使用STM32CubeMX生成的工程,警告等级是生成工程默认的,没有修改:
在这里插入图片描述

1、加了 const 以后引用的问题

警告如下:
expected 'uint8 * {aka unsigned char *}' but argument is of type 'const uint8 * {aka const unsigned char *}'
在这里插入图片描述问题的起因:

在源程序中本来定义了几个数组:
在这里插入图片描述
在其他地方有调用这数组,其实就是使用串口发送数组:
在这里插入图片描述
以上程序没有任何问题,是正常的,只是这几个数组在程序运行的时候会占用 ram 空间(属于 .data 段数据),所以为了优化一下,我加上了 const 修饰。

不明白这段话的可以查看我的其他博文:
STM32的内存管理相关(内存架构,内存管理,map文件分析)

这里的目的为的是将数组 保存至 flash 空间。
实际上加了const修饰也表示我把这个数组定义为常量数组,函数调用不允许修改这个数组的值

所以我做了如下修改,在素组前面加了一个 const :
在这里插入图片描述
改完以后,其他地方没有变,编译过后,就出现了开头的警告了!

查了一些相关资料得出:

C语言来说: const int和 int 是两种不同的类型 这点一定要弄清楚。

从 const int 转换到 int 就会警告 这时C语言的规定

我们可以通过C语言库函数中的 strstr 来加深一下对 const 是认识。

extern char *strstr(char *str1, const char *str2);
在这里插入图片描述
解决办法:

所以为了解决,我去修改了调用这个数组的函数:
在这里插入图片描述
但是只是这样修改,又出了一个警告,其实是同样的警告,HAL库函数中的HAL_UART_Transmit函数参数问题:

在这里插入图片描述最后在这个参数前加了一个强制转换,编译才顺利通过:
在这里插入图片描述
最后测试了下,修改后的 Uart3_sendBuffer 在发送不带 const 的数组也不会有警告,所以这个问题暂时这样。

2、missing braces around initializer [-Wmissing-braces]

警告如下:
warning: missing braces around initializer [-Wmissing-braces]

二维数组定义的时候,虽然C语言会自动分配,但是gcc编译器还是会提示少括号的警告(KEIL下不会有):
在这里插入图片描述
解决办法:

上图中消除警告的方式,就是加上括号:
在这里插入图片描述

3、‘xxx’ may be used uninitialized in this function [-Wmaybe-uninitialized]

警告如下:
warning: 'ReturnCode' may be used uninitialized in this function [-Wmaybe-uninitialized]

在函数中定义了一个枚举类型RETURN_TYPE ReturnCode;,但是没有赋初始值,会报警告(KEIL下不会有):
在这里插入图片描述
其中的 RETURN_TYPE 是枚举类型:
在这里插入图片描述
解决办法:

定义的时候给一个初始值:
在这里插入图片描述

4、printf 打印类型不匹配警告

警告如下:
warning: format '%x' expects argument of type 'unsigned int', but argument 6 has type 'uint32 {aka long unsigned int}' [-Wformat=]

在使用 printf 打印数据的时候,使用%x ,打印一个 uint32 变量, 出现警告的代码如下:
在这里插入图片描述
解决办法:

看来gcc下有严格的数据类型对应,消除警告需要强制转化:
在这里插入图片描述

5、void* 类型作为函数变量

错误如下:
warning: dereferencing 'void *' pointer uint32_t gpio_num = (uint32_t)*num;
error: invalid use of void expression uint32_t gpio_num = (uint32_t)*num;

在这里插入图片描述
解决办法:
这个问题其实是C语言的使用问题,解决办法如下:
在这里插入图片描述

6、enumeration value ‘xxx’ not handled in switch [-Wswitch]

使用switch结构时出现警告"enumeration value ‘xxxxx’ not handled in switch"

解决办法:

在switch结构末添加语句 default:break;

实验3使用gcc编译器.pdf
10-02
实验3使用gcc编译器.pdf
常见错误及解决
weixin_41791402的博客
06-05 654
variable `xxx' has initializer but incomplete type的解决方法: 出现这个错误字面意思是变量xxx定义了,但是不完整, 解决方法是,没有找到xxx变量的头文件,包含头文件即可解决 warning: missing braces around initializer 这个错误是因为给结构体初始化的时候初始化了一部分 ...
gcc编译器下载-4.6.0-Windows版
07-19
gcc编译器是一款由GNU打造的编程语言编译器软件,支持处理C语言、Fortran、Pascal、Objective-C、Java等多种语言,实用性强,能够帮助用户进行高效的编译工作。gcc编译器是一套以 GPL 及 LGPL许可证所发行的自由软件,适用于windows的各个操作系统。 【gcc编译器使用说明】 1、在gcc--4.9.1的平级目录建一个编译目录 2、配置 ../gcc-4.9.1/configure --prefix=/usr/local/gcc-4.9.1 --enable-threads=posix --enable-stage1-checking=release --enable-stage1-languages=c,c++ --disable-multilib 3、编译 make 4、安装 make install 5、修改环境变量 export PATH=/usr/local/gcc-4.9.1/bin/:$PATH 6、查看gcc版本 gcc -v
Keil5配置GCC编译器_Keil5配置GCC编译器_
10-04
Keil5配置GCC编译器文档,Keil一般使用ARMCC编译MCU工程代码。
实验10:gcc编译器使用与编程环境.pdf
11-16
实验10:gcc编译器使用与编程环境.pdf
warning: missing braces around initializer
yannwpu的专栏
11-16 6887
warning: missing braces around initializer  这主要发生在结构体中多维或多个数组初始化的时候,其错误发生的原因是没有用大括号明确的区分出初始化数据的归类,改正的方法如下例子     二维数组定义如下:                             char s1[4][16] =  { 14, 4,13, 1, 2,15,11,
C语言告警warning: missing braces around initializer详解
热门推荐
yihongxiaoxiang的专栏
12-17 11万+
 warning: missing braces around initializer 警告的意思是初始化缺少了大括号,也就是没有用大括号明确的区分出初始化数据的归类。 那什么时候会使用到大括号初始化呢?一般情况下初始化使用到大括号的情况是初始化结构体struct或者数组时。 首先说明一下多维数组和结构体的初始化,下面以二维数组的初始化为例(使用默认值为0): 1、分行初始化:int
GCC警告&报错2】warning: missing braces around initializer [-Wmissing-braces]
kk1kk2kk3kk4的博客
03-26 2779
本文主要解释了missing braces around initializer [-Wmissing-braces]报错警告的两个原因,并且给出了正确的语法。
C语言警告warning: ‘b’ may be used uninitialized in this function [-Wmaybe-uninitialized]
m0_73770012的博客
11-04 2万+
C语言警告—warning: ‘b’ may be used uninitialized in this function
tdm64-gcc编译器,V10.3.0版本
06-19
TDM-GCC-64是一个基于GCC的c++编译器,可以在Windows上进行C/C++语言编译。 TDM-GCC是非官方组织提供及维护的编译器集成包。TDM-GCC集成了最新的稳定版本的GCC工具集,以及一些实用的补丁。
gcc最新编译器GCC编译器套件
07-19
GCC编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC原本作为GNU操作系统的官方编译器,现已被大多数类...
嵌入式开发GCC编译器使用
weixin_34001430的博客
03-13 140
嵌入式开发GCC编译器使用Linux系统下GCC是GNU推出的功能强大的性能优越的多平台编译器,是GNU的代表作之一。GCC 可以在多种硬件平台上编译出可执行程序,其执行效率一般比其他编译器高%20到%30.GCC编译器能将C C++语言程序汇编程序编译,链接成可执行程序。在linux文件没有统一的后缀,...
【原创】arm-linux-gccmissing braces around initializer编译错误处理
池上好风---码农改变世界
05-23 3317
【原创】arm-linux-gccmissing braces around initializer编译错误处理 Author: chad Mail: [email protected] 本文可以自由转载,但转载请务必注明出处以及本声明信息。程序编译出现如下错误: db_app.c:24: warning: missing braces around initializer
嵌入式linux学习(4)编译器GCC使用
weixin_47566927的博客
03-30 184
GCC的全称是”GNU C Compiler“,原来是基于C/C++的编译器。但是随着发展,目前,GCC 可以用来编译 C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。这里再放一个学习的链接。w3school的GCC教程c语言中文网GCC教程预处理(pre-processing)编译(compliling)汇编(assembling)链接(linking)
myfile.cpp:15:6 warning: ‘val‘ may be used uninitialized in this function [-Wmaybe-uninitialized]
十一月zz的博客
03-29 5064
本身这个问题很简单,提示也说的很清楚,val没有初始化。 但是,奇怪的地方在于去查看myfile.cpp:15并没有 val 这个变量,myfile.cpp:15 指向了一个函数myfunc()的开头,这个函数里面压根并没有定义val这个变量。甚至,整个myfile.cpp里面也没有定义这个变量。 解决方法: 经过查找资料发现,myfile.cpp在编译的时候是加了 -O3优化选项的,经过测试发现除去把-O3删掉,问题就会消失,O3优化具体做了什么可以自行google。但问题是我就是需要-O3,那怎么办?
STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)
不浮夸,不将就,认真对待学知识的我们
10-08 2万+
了解STM32在MDK和GCC开发环境的下的启动过程,过分析STM32 的startup_xxxx.s
linux怎么使用gcc编译器
最新发布
09-25
要在Linux下使用gcc编译器,您需要按照以下步骤进行操作: 1. 打开终端或命令行界面。 2. 确保已经安装了gcc编译器。您可以在终端中输入以下命令来检查是否已安装gcc: ``` gcc --version ``` 如果已经安装,您...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 全面认识MOS管,一篇文章就够了 92114
  • 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构) 35100
  • 自己画一块ESP32-C3 的开发板(立创EDA)(PCB到手) 33129
  • 全面认识二极管,一篇文章就够了 31951
  • 聊聊电源自动切换电路(常用自动切换电路总结) 24505

分类专栏

  • 目录 5篇
  • RT-Thread 24篇
  • FreeRTOS 12篇
  • ESP32-C3 29篇
  • STM32 24篇
  • 嵌入式Linux 19篇
  • 嵌入式 Linux 环境篇 6篇
  • 嵌入式 Linux 入门篇 11篇
  • 电路小课堂 11篇
  • 嵌入式基础 4篇
  • 硬件设计基础 11篇
  • 方案记录 11篇
  • nRF52xxx 系列芯片 16篇
  • 所见所闻所想所做 4篇
  • C语言 4篇
  • C# 1篇
  • Java 1篇
  • 网络技术 1篇
  • 其他随笔 1篇

最新评论

  • FreeRTOS记录(三、RTOS任务调度原理解析_Systick、PendSV、SVC)

    洒去犹能化碧涛: 请问下,你这说的最低优先级是指的优先级数值最小?还是优先级本身最小啊表情包

  • 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

    陈跃光: 关注就算了,已打赏宝贵的1块钱表情包

  • FreeRTOS记录(十、FreeRTOS实现带 I2C 通讯的 ModbusRTU 协议从机实例)

    洒去犹能化碧涛: i2c的延时使用软件实现,是确保不会进行任务调度吗?

  • FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)

    洒去犹能化碧涛: 都使用cubemx吗 表情包

  • 嵌入式 Linux 入门(十一、make 和 MakeFile)

    洒去犹能化碧涛: 感觉还是在讲linux的各种概念,嵌入式linux怎么体现的啊

大家在看

  • 深度学习之基于Python+OpenCV+Tensorflow+Keras实时口罩检测系统
  • 关于Java Agent的使用、工作原理、及hotspot源码 解析
  • vue测试环境打包文件不添加hash和生产环境打包不一致
  • AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用 643
  • 最新海外炼游地铁跑酷全自动搬砖挂机项目,单窗口一天收益30+【挂机脚本+使用交】 313

最新文章

  • 使用 C# 设计ToF测距传感器 VL53L5CX 上位机软件
  • ToF 测距传感器 VL53L5CX 使用记录
  • ToF 测距传感器 VL6180 测量范围修改(软件 I2C)
2024年3篇
2023年18篇
2022年94篇
2021年50篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矜辰所致

您们的鼓励是我奋斗的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源昆明起名大师企业起名大全三个字顺风车平台迫在眉睫电视剧姥姥语录武汉宝宝起名别墅大门牌匾起名字卖厨卫电器起什么店名天然气ng三角泳衣钰起名女宝宝女孩起名姜西安市房屋出租韩国皮肤管理店起名字两个人一起做羞羞的事视频刘姓马年宝宝起名大全异次元杀阵唇亡齿寒的意思青盲局域网无法访问绝世名医免费阅读全文车行起名给龙凤胎宝宝起什么名字好听鬼帝的驭兽狂妃计划起一个名字从容不迫的近义词黑金教父免费起名字测试吉凶查询宁的女孩起名字会有天使替我去爱你淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化