国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

聊聊預編譯#Error的使用,你學會了嗎?

開發 前端
相信大家也看出來了,這樣管理參數地址,就顯得很合理,不會想增加一個參數時,不知道哪個扇區是空閑的,找到了一個扇區,還是擔心受怕,害怕和別的參數存儲地址沖突將其覆蓋。

?引言

說到預編譯,大家立刻就能想到#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 解決這個問題。

#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 #error#endif

這樣當你的參數最后地址大于0x0801E000,編譯器機會報錯,根本編譯不過,如下圖

圖片

類似的,#warning 用于生成編譯警告消息。warning可用來提示一些非致命錯誤。

其他用法

限定宏定義的數值范圍,下面SIZE被限制在0到100內。

#define#if SIZE < 0 || SIZE > 100#error#endifuint8_t buffer[SIZE];

指定使用VS編譯器

#ifndef#error#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

責任編輯:武曉燕 來源: 知曉編程
相關推薦

2024-08-19 10:24:14

2022-03-05 23:29:18

LibuvwatchdogNode.js

2023-07-10 08:36:21

工具pptword

2023-01-29 08:08:34

并發庫conc通用庫

2024-06-12 08:36:25

2024-03-05 10:09:16

restfulHTTPAPI

2022-12-26 07:48:04

敏捷項目

2024-02-02 11:03:11

React數據Ref

2024-04-29 06:55:34

RustMIDI應用程序

2023-03-07 07:50:15

Transactio事務代碼

2024-11-08 08:56:01

2023-06-05 08:36:04

SQL函數RANK()

2022-07-11 09:00:37

依賴配置文件Mybati

2022-09-26 08:49:11

Java架構CPU

2022-04-13 09:01:45

SASSCSS處理器

2022-12-08 10:49:43

2024-03-04 07:41:18

SpringAOPOOP?

2022-12-27 08:45:00

繪制菜單符號

2024-10-17 10:00:59

2023-04-04 08:14:45

點贊
收藏

51CTO技術棧公眾號

亚洲中文字幕无码av永久| 亚洲第一福利一区| 色偷偷亚洲男人天堂| 久久国产精品72免费观看| 99www免费人成精品| 蜜桃视频第一区免费观看| 国产精品一色哟哟| 亚洲欧美另类久久久精品2019| 毛片在线免费| 久久精品72免费观看| 国产aaa一级片| 五月天婷婷综合| 小视频免费在线观看| 国产成人久久久| 北条麻妃在线观看| 欧美激情在线观看视频免费| 冲田杏梨av在线| 在线免费观看不卡av| 九色porny丨国产首页在线| 国内伊人久久久久久网站视频| 欧美va天堂在线| 超碰97在线看| 亚洲午夜一区二区| 四虎影视国产在线视频| 欧美大奶子在线| 亚洲黄色成人| 日韩a在线播放| 久久久国产在线视频| 国产精品久久久久久影院8一贰佰| 欧美 另类 交| 亚洲综合视频在线| 免费成人在线电影| 青少年xxxxx性开放hg| 亚洲男人天堂久| 欧美aaaa视频| 日本欧美视频在线观看| 尤物yw午夜国产精品视频明星| 婷婷综合伊人| 国产私人尤物无码不卡| 欧美成人精品在线| 亚洲国产精品av| 国产精品刘玥久久一区| 国模精品视频一区二区| 国产精品视频一二| 草草在线视频| 91国产丝袜在线放| 国产欧美一区二区精品婷婷| 欧美sss在线视频| 一二三四中文字幕| 久久在线视频在线| 全国精品久久少妇| 新欧美整片sss第一页| 欧美精品在线网站| 99久久婷婷| av片在线看| 国产精品美女视频网站| 国产精品99久久久久久久女警 | 色婷婷综合网站| 精品国产自在久精品国产| 日韩在线二区| 日本黄大片一区二区三区| 国产欧美精品xxxx另类| 国产欧美一区二区精品性色| av文字幕在线观看| 欧美日韩亚洲一区三区| 中文字幕无码不卡免费视频| 亚洲第一中文字幕在线观看| 欧美网站在线| 亚洲精品永久免费视频| 第四色婷婷基地| 国产高清一区视频| 色婷婷激情综合| 韩日一区二区| 永久久久久久| 制服丝袜成人动漫| 欧美aa国产视频| videos性欧美另类高清| 日韩性感在线| 51精品视频一区二区三区| 国产很黄免费观看久久| 大胆日韩av| 最新av番号| 热re91久久精品国99热蜜臀| 久久久精品tv| 午夜不卡一区| 日韩网站在线免费观看| 国产精品精品一区二区三区午夜版| 久久久国产一区二区三区四区小说| 色男人天堂综合再现| 久久影院午夜精品| 动漫成人在线| 成品人视频ww入口| 99久久99| 欧美精品一区在线播放| 日韩西西人体444www| 久久国产福利| 污的网站在线观看| 奇米影音第四色| 欧美精品电影免费在线观看| 尤蜜粉嫩av国产一区二区三区| 九九视频直播综合网| 欧美日韩精品专区| 亚洲国产专区校园欧美| 欧美国产亚洲精品| 久久精品午夜福利| 久久综合九色欧美狠狠| 日韩欧美二区三区| 蜜桃av一区二区三区电影| 九色精品国产蝌蚪| 日本v片在线免费观看| 亚洲一区二区免费| 在线观看免费视频综合| 久久久久久久av麻豆果冻| 男人天堂欧美日韩| 欧美日韩中文一区二区| 自拍偷拍在线视频| 国产成人一区二区三区免费看| 久久国产精品电影| 日韩一区二区三区视频| 亚洲成av人片一区二区梦乃| 国产一区日韩一区| 欧美三级黄网| 日本一区二区免费高清视频| 91久久精品一区二区别| 久久男人av资源网站| 亚洲精品色婷婷福利天堂| 99re热这里只有精品视频| 国产在线播放精品| 在线午夜视频| 日韩精品一区在线视频| 电影久久久久久| 一二三区高清| 成人国产亚洲精品a区天堂华泰| 欧美日韩另类在线| 先锋亚洲精品| 欧美a一级片| 狠狠操在线视频| 欧美日韩成人一区二区三区| 国产一区二区三区在线观看网站| 欧美日韩精品一区二区| 亚洲午夜久久久久久久久久久| 久久嫩草精品久久久久| 91成人免费| 美女的胸无遮挡在线观看| 成人动漫在线播放| 黄色成人在线免费观看| 国产做受高潮69| 中文字幕无线精品亚洲乱码一区 | 国产日本一区二区三区| 精品五月天久久| 欧美一级片在线看| 欧美视频三区在线播放| 成人精品免费看| 日韩国产一区二区| 色天天色综合| 国产高清在线a视频大全| av丝袜天堂网| 精品国产乱码久久久久久88av| 亚洲天堂av女优| 亚洲一区中文在线| 亚洲欧美日韩国产中文在线| 国产精品免费视频一区| 国产精品嫩草久久久久| 国产精品久久久久影院色老大 | 亚洲视频一区在线观看| 久久国产欧美| 亚洲专区免费| 视频一区二区三区中文字幕| 一区二区日韩| 国产激情小视频在线| 色综合久久久久综合一本到桃花网| 999在线观看视频| 精品国产一区二区三区无码| 人妻av中文系列| 久久国产精品网| 亚洲精品免费在线看| 91国产精品91| 51久久夜色精品国产麻豆| 欧美影视一区二区三区| 91免费国产在线观看| 91成人观看| 欧美视频日韩| 亚洲人人精品| 毛片av一区二区三区| 国产激情一区二区三区四区| 99视频精品在线| 在线视频日韩| h视频久久久| 日韩av官网| 欧美亚洲日本精品| 日韩网站中文字幕| 国产女主播在线写真| 第九色区av在线| 中日韩高清电影网| **欧美日韩在线观看| 久久精品a一级国产免视看成人| 97视频在线免费播放| 中文字幕第80页| 在线看视频你懂的| 成人软件网18免费视频|