最新要闻
- 每日快讯!元旦假期首日火车票今开抢!迎出行小高峰:五大热门目的地出炉
- 观天下!Find N2系列发布背后:OPPO再次展示对产品精益求精态度
- 天天要闻:全国冻哭预警地图来了:周末20余省份或被冻哭 冷到破纪录
- 热议:售价超300万!乔布斯亲手编号Apple-1电脑落锤成交:46年后 开机画面眼前一亮
- 世界最大独立圆柱体水族馆爆裂:1500多条鱼全军覆没
- 世界杯决战前夕 法国又有两大主力倒下!5人感染神秘流感
- 【环球热闻】被加价千元:AMD喊话正加大RX 7900系生产!NV 4080笑而不语
- 世界上最大的鱼缸今日突然破裂:100万升水泄露 1500条鱼死亡
- 放假3天不调休!2023年元旦假期首日火车票开售 除夕票这一天就能买
- 天天报道:学谁不好学特斯拉!几十万的宝马车 容不下一个收音机
- 观天下!骗子诈骗1250万 买彩票中1450万:已退还给39名聋哑人
- 全球热讯:XSX性能比PS5强 但为何游戏性能总是输?
- 天天热点!女子发烧敷20分钟面膜揭下变3D立体面具 医生提醒:影响退热 当心面瘫
- 方便面消费第一大国是我们:超6成人每周吃三次
- 热推荐:锂金属电池爱长枝晶?韩国科学家找到破解之法
- 【当前独家】确认了!《阿凡达2:水之道》没有片尾彩蛋
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
滚动:预编译#error的使用
1、引言
说到预编译,大家立刻就能想到#define、#if、#ifdef和#ifndef等熟悉的预编译命令。其实#include,我们通常放在源文件用来包含头文件,它也是预编译命令。当然这不是这篇文章的重点。
这篇文章主要讲解下#error预编译命令,对于什么是预编译,预编译的作用等基础知识点不再讲解,不懂的同学请自行百度。
在MCU的开发中,我们经常需要用到Flash存储一些参数,且通常情况下有很多参数需要存储。
(资料图)
一般采用一个扇区存储一种类型的参数(可能造成Flash空间浪费),但对于一些内部Flash容量很大的MCU,这样做也是可行的。
示例demo如下
#define PARA_BATTERY_ADDR 0x08019000 //存储电池参数#define PARA_ETH_ADDR 0x0801B800 //存储网络参数..........#define PARA_USER_CONFIG_ADDR 0x0801C400 //存储用户参数
很多开发工程师喜欢这样做,如果参数少时还好,当有很多参数时,这将是一个噩梦。如果这些参数分散在各个文件中,阅读这份源码将是恶心他妈给恶心开门,恶心到家了。
当想增加一个参数存储时,如果不很熟悉代码,根本不知道哪个扇区是空闲的。
优化版本如下,将这这些宏定义统一定义在flashmap.h中
#define PARA_STARADDR (0x08000+(100*1024)) //前100K用于存储固件,参数存储开始地址。#define FLASH_SECTOR_SIZE (2*1024) //Flash每个扇区的大小#define PARA_BATTERY_ADDR PARA_STARADDR //存储电池参数#define PARA_BATTERY_SIZE (1*FLASH_SECTOR_SIZE) //电池参数所占空间大小#define PARA_ETH_ADDR (PARA_BATTERY_ADDR+PARA_BATTERY_SIZE) //存储网络参数#define PARA_ETH_SIZE (2*FLASH_SECTOR_SIZE) //网络参数所占空间大小
相信大家也看出来了,这样管理参数地址,就显得很合理,不会想增加一个参数时,不知道哪个扇区是空闲的,找到了一个扇区,还是担心受怕,害怕和别的参数存储地址冲突将其覆盖。
当然它也有弊端,如果问你PARA_ETH_ADDR存储地址,并不能立刻从代码中看出,这个问题,我一般使用printf打印出来。
还有个问题,如果加了很多参数,最后一个参数地址大于Flash空间怎么办,或者软件设计一段Flash空间作为参数区,不被允许超过这个地址。
在这个代码结构中,无法从代码中直接获取,有不行使用printf肉眼判断,那么可以使用#error 解决这个问题。
2、#error
#error 是一种预编译器指示字,用于生成一个编译错误消息。
用法:#error [message] //message为用户自定义的错误提示信息,可缺省。
#error 可用于提示编译条件是否满足。编译过程中的任何错误意味着无法生成最终的可执行程序。
上面的程序优化为
#define PARA_STARADDR (0x08000+(100*1024)) //前100K用于存储固件,参数存储开始地址。#define FLASH_SECTOR_SIZE (2*1024) //Flash每个扇区的大小#define PARA_BATTERY_ADDR PARA_STARADDR //存储电池参数#define PARA_BATTERY_SIZE (1*FLASH_SECTOR_SIZE) //电池参数所占空间大小#define PARA_ETH_ADDR (PARA_BATTERY_ADDR+PARA_BATTERY_SIZE) //存储网络参数#define PARA_ETH_SIZE (2*FLASH_SECTOR_SIZE) //网络参数所占空间大小#define PARA_END_ADDR (PARA_ETH_ADDR+PARA_ETH_SIZE)// 参数的结束地址#if (PARA_END_ADDR > 0x0801E000) #error Flash Map Error#endif
这样当你的参数最后地址大于0x0801E000,编译器机会报错,根本编译不过,如下图
类似的,#warning 用于生成编译警告消息。warning可用来提示一些非致命错误。
3、其他用法
限定宏定义的数值范围,下面SIZE被限制在0到100内。
#define SIZE 10#if SIZE < 0 || SIZE > 100#error SIZE must be between 1 and 100.#endifuint8_t buffer[SIZE];
指定使用VS编译器.
#ifndef _MSC_VER#error require visual studio compiler#endif
判断是否定义了某个宏,比如FreeRTOS源码中
#ifndef configMINIMAL_STACK_SIZE #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value.#endif
点击查看:C语言进阶专辑
滚动:预编译#error的使用
全球要闻:YoloV7 标签匹配机 loss 计算详解
安全多方计算(1):不经意传输协议
每日快讯!元旦假期首日火车票今开抢!迎出行小高峰:五大热门目的地出炉
观天下!Find N2系列发布背后:OPPO再次展示对产品精益求精态度
天天要闻:全国冻哭预警地图来了:周末20余省份或被冻哭 冷到破纪录
热议:售价超300万!乔布斯亲手编号Apple-1电脑落锤成交:46年后 开机画面眼前一亮
世界最大独立圆柱体水族馆爆裂:1500多条鱼全军覆没
世界杯决战前夕 法国又有两大主力倒下!5人感染神秘流感
【环球热闻】被加价千元:AMD喊话正加大RX 7900系生产!NV 4080笑而不语
世界简讯:VUE数据双向绑定
第一百一十四篇: JS数组Array(三)数组常用方法
世界上最大的鱼缸今日突然破裂:100万升水泄露 1500条鱼死亡
放假3天不调休!2023年元旦假期首日火车票开售 除夕票这一天就能买
天天报道:学谁不好学特斯拉!几十万的宝马车 容不下一个收音机
观天下!骗子诈骗1250万 买彩票中1450万:已退还给39名聋哑人
全球热讯:XSX性能比PS5强 但为何游戏性能总是输?
天天速看:Python函数/动态参数/关键字参数
天天热点!女子发烧敷20分钟面膜揭下变3D立体面具 医生提醒:影响退热 当心面瘫
方便面消费第一大国是我们:超6成人每周吃三次
世界速读:注解在Android中的使用场景
热推荐:锂金属电池爱长枝晶?韩国科学家找到破解之法
【当前独家】确认了!《阿凡达2:水之道》没有片尾彩蛋
天天观速讯丨1152分区+4K 144Hz 联合创新32寸miniLED显示器首发5399元
终于修好了!Win11新补丁解决22H2大文件复制缓慢Bug
首款第二代骁龙8游戏旗舰!红魔8 Pro来了
今日最新!王思聪投资百万成立新公司 经营范围包括动漫游戏开发
全球最资讯丨全自动门锁比半自动更人性化!但半自动更受青睐 真相终于揭开
世界简讯:Hessian2序列化支持这一点,让重构dubbo接口更容易了
【热闻】-真正的国产亲民MPV 新款传祺M6 PRO上市:11.98万起
看点-旗下新作首月收入超4.8亿!腾讯成为《妮姬》开发商Shift Up第二大股东
女子高烧39.8度喊妈 妈妈以为鸭子叫没搭理 网友:怎么又变异了
观察-《三体》动画明天开播第3集 官方公布史强、古筝行动档案
【天天聚看点】微信小程序报错“getLocation:fail the api need to be declared in the requiredPriva
【全球快播报】记录--三分钟打造自己专属的uni-app工具箱
视点!小米万兆路由器用上企业级处理器!卢伟冰:降维打击
【天天报资讯】LCD面板价格连连下跌!LG P7 LCD工厂停产
环球关注:中国高速看山东!山东高速施工用上北斗卫星:精度达到毫米级
世界要闻:三大板卡品牌之一的微星缺席RX 7900首发 原因揭晓:直接非公版
世界快消息!女生手捏温度计度数直线飙到38度!腋下一测39.5度
天天日报丨项目经理的核心价值:以目标为导向做正确的事
环球热点评!Vue3项目-生成Cron表达式组件
世界今亮点!MIUI 14终于再次成为最好用的操作系统
ChatGPT已经牛到取代谷歌了?测试结果来了
男子每天点赞上万次被处罚 当庭演示一分钟才点赞91个
【当前独家】“智轨列车”亮相咸阳:可识别虚拟轨道 载客达300人
全球新动态:研究揭示马桶不盖盖后果多严重:致病菌满屋乱飞
全球滚动:Java 反射概念的引入
天天热议:小米13太火爆了 博主准点抢购结果秒没:最后等了20分钟捡漏 成功上车
【天天速看料】“火流星”掉落 专家判断陨石来自46亿年前:比地球上所有石头都古老
当前速看:《阿凡达2》成2022进口片首日票房冠军!时隔69天单日再破亿 豆瓣8.4分
价格能顶半套正版Win11 老牌压缩软件WinZip 27发布 你会买吗?
快播:44岁的泰国长公主因心脏问题失去知觉:紧急送医
渗透实录-01
要闻:Nacos 2.2 正式发布,这次更新太炸了!
世界关注:Kerberos身份验证在ChunJun中的落地实践
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
【聚看点】多数据源事务处理-涉及分布式事务
怎么硬盘安装ubuntu?硬盘ubuntu安装教程
佳能5d系列哪个最好?佳能5DX相机参数
诺基亚6200上市价格是多少?诺基亚6200手机参数
烤箱如何预热?烤箱预热的方法有哪些?
短讯!IDEA没有新建jsp文件按钮
VS2022生成控制台引用程序,.net应用导出成exe文件,发部成独立文件的详细图解
MySQL学习笔记2
网页字体变大是怎么回事?网页字体变大了怎么还原?
洞庭连天是什么意思?洞庭连天九疑高是什么生肖?
国庆一词最早出现在什么时候?国庆一词最早出现在什么地方?
蝴蝶发现花蜜靠的是什么?蝴蝶发现花蜜的句子有哪些?
造梦西游3金角大王怎么打?造梦西游3金角大王掉什么?
传闻中的陈芊芊韩烁失忆是第几集?传闻中的陈芊芊韩烁失忆是真的吗?
爱情公寓决战紫禁之巅是第几集?爱情公寓决战紫禁之巅花了多少经费?
曾小莲是什么梗?爱情公寓曾小莲是哪一集?
睢宁县属于哪个市?睢宁县旅游景点有哪些?
类似于惊天魔盗团的电影有哪些?惊天魔盗团剧情解析
独家首发是什么意思?独家首发和普通授权有什么区别?
环球短讯!认证管理(锐捷网关篇)
世界即时看!C语言字符串拆分的两种方式strtok和正则表达式
全球通讯!低代码靠不靠谱?看看低代码在智能物联系统搭建中的应用
美国一战机垂直降落失控 飞行员弹射7秒落地:现场机头先撞地
世界时讯:可拆卸手柄神似Switch!OnexPlayer 2掌机海外发布:起售价超6200元
全球要闻:混动车鼻祖上新 全新丰田普锐斯售价公布:约19.10万元起
一加10T漫威限定版上架:用4年仍然很流畅 4700元
天天观焦点:三连降稳了!新一轮油价三天后开调:预计下跌0.41元/升
世界资讯:因MacBook Pro蝶式键盘翻车:苹果赔了3个多亿
速递!贾跃亭造车梦要成了?FF91交付计划公布 还差10几亿资金
全球热议:爱奇艺VIP会员今起涨价:连续包月黄金25元/月
今日热讯:浙江“火流星”现场被砸大坑!专家:捡到陨石碎片别用水清洗
焦点精选!机械硬盘真没人买!西数股价大跌 公司业绩要暴雷:或将大清库存
每日精选:V2Board机场项目泄露400余万条数据
环球快报:《阿凡达2:水之道》今日内地正式上映:票房瞬间破亿
日系车为什么在中国卖不动了?你为什么不买了?
每日速讯:Blazor和Vue对比学习(进阶.路由导航五):路由守卫
观点:【从零开始学爬虫】采集收视率排行数据
mvn 打包报错:no compiler is provided in this environment
天天微动态丨JavaScript DOM的性能优化详解
每日资讯:VUE的实例的生命周期
每日热门:河洛肉鸽卡牌《天外武林》上架Steam 明年1月发售
别急换机!本月还有6场发布会:劝你先等等再买
世界微动态丨《阿凡达:水之道》预测票房仅25.11亿!远不到《长津湖》一半