在 Keil MDK 開發(fā)環(huán)境中,經(jīng)常會(huì)遇到類似于unsigned int 8、uint8_t 、u8等數(shù)據(jù)變量定義,對于初學(xué)者來講確實(shí)是有點(diǎn)痛苦,后來查詢發(fā)現(xiàn)以上三種方式均表示——無符號的8位整形數(shù)據(jù)。
由于C語言類型的長度完全由編譯器決定,char 通常被定義成 8 位寬;int 通常被定義成 16 位或 32 位寬(或更高),它取決于平臺(tái)(編譯器將在這兩者間選擇最合適的字寬);short 通常被定義成 16 位寬;long 通常被定義成 32 或 64位寬。
所以 C99 中引進(jìn)了一個(gè)標(biāo)準(zhǔn)C庫頭文件 stdint.h ,方便精確確定整數(shù)類型的寬度
定義標(biāo)準(zhǔn)的擴(kuò)展整數(shù)類型_stdint.h文件(部分)
/* Signed. */
/* There is some amount of overlap with #ifndef __int8_t_defined # define __int8_t_defined typedef signed char int8_t; //標(biāo)準(zhǔn)表達(dá)方式 signed char 被等同于 int8_t; typedef short int int16_t; typedef int int32_t; # if __WORDSIZE == 64 typedef long int int64_t; # else __extension__ typedef long long int int64_t; # endif #endif /***************************************/ /* Unsigned. */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; #ifndef __uint32_t_defined typedef unsigned int uint32_t; # define __uint32_t_defined #endif #if __WORDSIZE == 64 typedef unsigned long int uint64_t; #else __extension__ typedef unsigned long long int uint64_t; #endif /***************************************/ /* Small types. */ /* Signed. */ typedef signed char int_least8_t; typedef short int int_least16_t; typedef int int_least32_t; #if __WORDSIZE == 64 typedef long int int_least64_t; #else __extension__ typedef long long int int_least64_t; #endif /***************************************/ /* Unsigned. */ typedef unsigned char uint_least8_t; typedef unsigned short int uint_least16_t; typedef unsigned int uint_least32_t; #if __WORDSIZE == 64 typedef unsigned long int uint_least64_t; #else __extension__ typedef unsigned long long int uint_least64_t; #endif /***************************************/ /* Fast types. */ /* Signed. */ typedef signed char int_fast8_t; #if __WORDSIZE == 64 typedef long int int_fast16_t; typedef long int int_fast32_t; typedef long int int_fast64_t; #else typedef int int_fast16_t; typedef int int_fast32_t; __extension__ typedef long long int int_fast64_t; #endif /***************************************/ /* Unsigned. */ typedef unsigned char uint_fast8_t; #if __WORDSIZE == 64 typedef unsigned long int uint_fast16_t; typedef unsigned long int uint_fast32_t; typedef unsigned long int uint_fast64_t; #else typedef unsigned int uint_fast16_t; typedef unsigned int uint_fast32_t; __extension__ typedef unsigned long long int uint_fast64_t; #endif /***************************************/ /* Types for `void *' pointers. */ #if __WORDSIZE == 64 # ifndef __intptr_t_defined typedef long int intptr_t; # define __intptr_t_defined # endif typedef unsigned long int uintptr_t; #else # ifndef __intptr_t_defined typedef int intptr_t; # define __intptr_t_defined # endif typedef unsigned int uintptr_t; #endif /***************************************/ /* Largest integral types. */ #if __WORDSIZE == 64 typedef long int intmax_t; typedef unsigned long int uintmax_t; #else __extension__ typedef long long int intmax_t; __extension__ typedef unsigned long long int uintmax_t; #endif *_t結(jié)尾的類型,可以理解為type/typedef的縮寫,就是一個(gè)結(jié)構(gòu)標(biāo)注,表示是通過typedef定義的,而不是其它數(shù)據(jù)類型。(程序的可擴(kuò)展性) 無符號類型 可表示 unsigned char u8 unsigned short u16 unsigned int u32 這樣定義的好處在于使用時(shí)不會(huì)感覺太混亂,從而能有效的維護(hù)代碼。 類 型 說 明 typedef 準(zhǔn)確長度類型 intN_t(N為類型寬度) 最小長度類型 int_leastN_t 快速長度類型 int_fastN_t 指針長度類型 intptr_t 最大長度類型 intmax_t 類型說明 int_least16_t : 指獲得一個(gè)當(dāng)前平臺(tái)所支持的至少有 16 位寬的最短整數(shù)類型。 int_fast32_t : 指獲得當(dāng)前平臺(tái)下需要處理速度最快的至少為 32 位的整數(shù)類型。 intmax_t : 指獲得當(dāng)前平臺(tái)所支持的最大寬度的整數(shù)類型。 intptr_t (無符號uintptr_t): 為安全跨平臺(tái)編程的保證,對于寫跨 64 位平臺(tái)的程序非常重要,是指針和整數(shù)之間的轉(zhuǎn)換經(jīng)常用到(多用于需要精確控制數(shù)據(jù)在內(nèi)存中的精確布局時(shí))。換句話說,當(dāng)需要把指針作為一個(gè)整數(shù)來運(yùn)算時(shí),轉(zhuǎn)換成intptr_t才是安全的,然后在運(yùn)算完畢后再安全的轉(zhuǎn)回指針類型。 無符號整形對應(yīng)的*_t類型 字 寬 uint8_t 1字節(jié) uint16_t 2字節(jié) uint32_t 4字節(jié) uint64_t 16字節(jié) int64_t uint64_t 大數(shù)輸出 格式 int64_t %lld uint64_t %llu uint64_t %llx(十六進(jìn)制) uint64_t %llo (八進(jìn)制) volatile 作為指令關(guān)鍵字,確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值。 俗稱禁止程序優(yōu)化,一般在進(jìn)行多線程程序設(shè)計(jì)時(shí)加,就是在有中斷的程序中常見,并且是中斷程序所用變量一般用這個(gè)加以修飾。 簡單的說,就是不讓編譯器進(jìn)行優(yōu)化,即每次讀取或者修改值的時(shí)候,都必須重新從內(nèi)存或者寄存器中讀取或者修改。 volatile一般用在以下三個(gè)方面: 中斷標(biāo)志位 多線程共享的變量 狀態(tài)寄存器 const 是一個(gè)C語言的關(guān)鍵字,它限定一個(gè)變量不允許被改變 只讀變量,即變量保存在只讀靜態(tài)存儲(chǔ)區(qū)。編譯時(shí),如何嘗試修改只讀變量,則編譯器提示出錯(cuò),就能防止誤修改。 const與define 兩者都可以用來定義常量,但是const定義時(shí),定義了常量的類型,所以更精確一些(其實(shí)const定義的是只讀變量,而不是常量)。 #define只是簡單的文本替換,除了可以定義常量外,還可以用來定義一些簡單的函數(shù),有點(diǎn)類似內(nèi)置函數(shù)。 const和define定義的常量可以放在頭文件里面。(小注:可以多次聲明,但只能定義一次) const與指針 int flag; const int * p1=&flag; //p1可變,*p1不可變 const 修飾的是 *p1,即*p1不可變 int * const p2=&flag; //p2不可變,*p2可變 const 修飾的是 p2,即p2不可變 const int *const p3=&flag; //p3不可變,*p3也不可變 前一個(gè)const 修飾的是 *p3,后一個(gè)const 修飾的是p3,兩者都不可變
上一篇:stm32f4xx 加密
下一篇:STM32中常用的數(shù)據(jù)類型
推薦閱讀
史海拾趣
在20世紀(jì)初,隨著電子工業(yè)的蓬勃發(fā)展,對高效、可靠電加熱元件的需求日益增長。Heatron公司憑借其深厚的技術(shù)積累,成功研發(fā)出了一種新型的高密度單頭電熱管,該產(chǎn)品在耐高溫、耐腐蝕性能上實(shí)現(xiàn)了重大突破。這一技術(shù)成果迅速獲得了市場的廣泛認(rèn)可,不僅提升了Heatron在電加熱器市場的地位,還推動(dòng)了整個(gè)電子行業(yè)相關(guān)應(yīng)用的技術(shù)進(jìn)步。
Califia Lighting深知品質(zhì)是企業(yè)生存和發(fā)展的關(guān)鍵。因此,公司建立了嚴(yán)格的質(zhì)量管理體系,從原材料采購到產(chǎn)品生產(chǎn)、檢驗(yàn)、包裝等各個(gè)環(huán)節(jié)都進(jìn)行嚴(yán)格把關(guān)。同時(shí),公司還注重客戶服務(wù)和售后支持,及時(shí)解決客戶在使用過程中遇到的問題,贏得了客戶的信賴和好評。
隨著技術(shù)的不斷進(jìn)步,Concurrent Logic成功開發(fā)出了一款具有革命性的并行計(jì)算芯片。這款芯片在市場上引起了巨大的反響,因其出色的并行處理能力和高效的邏輯運(yùn)算,很快得到了眾多電子設(shè)備和數(shù)據(jù)中心的青睞。這一技術(shù)的突破不僅為公司帶來了可觀的收入,更讓Concurrent Logic在電子行業(yè)中嶄露頭角。
多年來,EM Microelectronic-Marin始終保持著對技術(shù)的熱愛和追求。公司不斷投入資源進(jìn)行研發(fā),推動(dòng)電子技術(shù)的持續(xù)發(fā)展。在未來,隨著物聯(lián)網(wǎng)、人工智能等技術(shù)的不斷興起,EM Microelectronic-Marin將繼續(xù)致力于技術(shù)創(chuàng)新和產(chǎn)品升級,為電子行業(yè)的發(fā)展貢獻(xiàn)自己的力量。
進(jìn)入21世紀(jì)后,ECI開始將目光投向國際市場。在海外市場部經(jīng)理趙先生的努力下,ECI成功打入歐洲和北美市場。面對不同的文化背景和市場需求,ECI積極調(diào)整策略,提供符合當(dāng)?shù)匦枨蟮漠a(chǎn)品和服務(wù)。通過不懈努力,ECI在國際市場上的份額逐年增長,為公司的發(fā)展注入了新的動(dòng)力。
艾吉芯公司深知人才是企業(yè)發(fā)展的核心動(dòng)力。因此,公司高度重視人才培養(yǎng)和團(tuán)隊(duì)建設(shè)。通過引進(jìn)高素質(zhì)的研發(fā)人才和管理人才,艾吉芯建立了一支高效、專業(yè)的團(tuán)隊(duì)。同時(shí),公司還注重員工的培訓(xùn)和發(fā)展,為員工提供廣闊的職業(yè)發(fā)展空間和良好的工作環(huán)境。
對于投身商海的人來說,創(chuàng)業(yè)是一個(gè)夢想。但創(chuàng)業(yè)又談何容易?有關(guān)專家總結(jié)出創(chuàng)業(yè)的七大必備條件,可以與讀者分享: 1、充分的資源(Resources),包括人力和財(cái)力,創(chuàng)業(yè)者要具備充足的經(jīng)驗(yàn)、學(xué)歷、流動(dòng)資金、時(shí)間、精神和毅力; 2、可行 ...… 查看全部問答∨ |
|
無線移動(dòng)式多參數(shù)生理監(jiān)護(hù)儀的硬件結(jié)構(gòu)設(shè)計(jì) 摘 要]本文介紹的無線移動(dòng)式多參數(shù)生理監(jiān)護(hù)儀具有體積小、功耗低和硬件開銷少等明顯的優(yōu)勢。它能同時(shí)監(jiān)護(hù)多個(gè)床位病人的心電、呼吸、體溫等重要生理參數(shù),并對多種心律失常進(jìn)行報(bào)警提示。本文系統(tǒng)介紹了無線移動(dòng)式多參數(shù)生理 監(jiān)護(hù)儀的硬件基本結(jié)構(gòu) ...… 查看全部問答∨ |
我用2440+7113,ce系統(tǒng),本來7113的iic讀寫地址應(yīng)該是4a/4b,但我用這兩個(gè)端口操作7113失敗,7113的手冊上說如果RTS0用3.3k電阻接地,則地址就變成48/49,我修改我的程序讀寫48/49后,結(jié)果是得到的圖像很不穩(wěn)定,有時(shí)能得到有時(shí)得不到,得到的圖像 ...… 查看全部問答∨ |
easyarm9862以太網(wǎng)口實(shí)驗(yàn)的問題 我打算用easyarm8962這個(gè)單片機(jī)做一個(gè)簡單的實(shí)驗(yàn)。沒有操作系統(tǒng),就是想通過網(wǎng)線連接電腦網(wǎng)卡和arm板的以太網(wǎng)口,實(shí)現(xiàn)通訊。有一個(gè)設(shè)備驅(qū)動(dòng)庫Stellaris,這里面封裝好了很多函數(shù)。比如EthernetPacketPut(ETH_BASE, pucMyTxPacket, ulMyTxPacketLen ...… 查看全部問答∨ |
虛心求教王愛英的《計(jì)算機(jī)組成與結(jié)構(gòu)》中的問題 王愛英的《計(jì)算機(jī)組成與結(jié)構(gòu)》第二章習(xí)題第二題: 全加器可由異或門及進(jìn)位邏輯電路組成,根據(jù)A異或B=否A異或否B,于是可以設(shè)計(jì)利用原變量或反變量進(jìn)行運(yùn)算的加法器,進(jìn)而可以推測,對已設(shè)計(jì)好的加法器,用原變量運(yùn)算和反變量運(yùn)算都是一樣的。 ...… 查看全部問答∨ |
1.上電后初始化系統(tǒng)時(shí)鐘 2.配置RTC 2.1 使能PWR和BKP模塊的時(shí)鐘 2.2使能對備份區(qū)域的訪問 3.檢查預(yù)定義的標(biāo)記判斷RTC是否曾經(jīng)設(shè)置過 3.1 預(yù)定義的標(biāo)記設(shè)置在備份區(qū)域的備份寄存器,不受系統(tǒng)掉電的影 ...… 查看全部問答∨ |
quartusII 中定制fifo如何使用,第一次使用,不知道full,almost_full,empty,empty_full,prog_full,prog_empty如何控制 及它們有效時(shí)的電平,請高手賜教,謝謝啦… 查看全部問答∨ |
ARM-Linux驅(qū)動(dòng)--DM9000網(wǎng)卡驅(qū)動(dòng)分析(三) ARM-Linux驅(qū)動(dòng)--DM9000網(wǎng)卡驅(qū)動(dòng)分析(三) 硬件平臺(tái):FL2440(s3c2440) 內(nèi)核版本:2.6.35 主機(jī)平臺(tái):Ubuntu11.04 內(nèi)核版本:2.6.39 交叉編譯器:arm-linuc-gcc4.3.2 原創(chuàng)作品,轉(zhuǎn)載請標(biāo)明出處http://blog.csdn.net/yming0221/article/deta ...… 查看全部問答∨ |
大家一起學(xué)習(xí)PIC單片機(jī)之四(獨(dú)立鍵盤控制繼電器開關(guān)) 大家好,本人是PIC單片機(jī)新手,但是我很勤奮,我買的ND118-877APIC實(shí)驗(yàn)開發(fā)板,里面有實(shí)例,但是沒有源代碼,本人自己寫代碼大家一起交流,希望能陸續(xù)寫下去,本人QQ476857290 希望大家學(xué)習(xí)指導(dǎo)?!? 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于GPS自動(dòng)授時(shí)的無線智能控制器的設(shè)計(jì)
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 基于HW2181B的航模無線遙控通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 應(yīng)對機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動(dòng)機(jī)械透射式煙度計(jì)研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開關(guān)磁阻電機(jī)控制器的設(shè)計(jì)
- 艾邁斯歐司朗進(jìn)一步優(yōu)化紅外激光產(chǎn)品 滿足極高要求3D傳感應(yīng)用需求
- 大聯(lián)大詮鼎集團(tuán)推出基于立锜科技產(chǎn)品的140W電源適配器方案
- Vicor將在2025中國國際低空經(jīng)濟(jì)產(chǎn)業(yè)創(chuàng)新發(fā)展大會(huì)上展示eVTOL 800V平臺(tái)DC-DC解決方案
- 研華「Edge Computing & WISE-Edge in Action」主題論壇隆重登場
- 研華攜手高通 加速推動(dòng)AIoT物聯(lián)網(wǎng)邊緣智慧創(chuàng)新
- 英飛凌攜手優(yōu)優(yōu)綠能,助力電能轉(zhuǎn)換效率新突破
- 邊緣 AI:物聯(lián)網(wǎng)實(shí)施新標(biāo)桿
- 全局快門圖像傳感器技術(shù)的改進(jìn)提升了機(jī)器視覺效率
- 聯(lián)想自研5nm芯片SS1101跑分曝光:對標(biāo)第二代驍龍8
- Arm 與微軟合作,為基于 Arm 架構(gòu)的 PC 和移動(dòng)設(shè)備應(yīng)用提供超強(qiáng) AI 體驗(yàn)
- 感謝有你,感恩龍年,EEWORLD陪你一起“鬧”龍年!
- 學(xué)習(xí)Altera《SoC FPGA:體系結(jié)構(gòu)重要嗎?》文章,答題贏好禮!
- 快來訪問泰克高速串行通信專題 配置您的專屬解決方案 贏好禮!
- 【在線研討會(huì)】ADI RadioVerse™技術(shù)與集成DPD算法的RF收發(fā)器AD9375
- 【MPS有獎(jiǎng)評論】一起聊聊選型的那些過往
- 2016 TI 電機(jī)驅(qū)動(dòng)研討會(huì)資料大放送,不容錯(cuò)過!
- 福祿克有獎(jiǎng)直播:高精度測溫賦能電子制造
- 答題有禮|e絡(luò)盟大講堂:機(jī)器視覺在工業(yè)應(yīng)用環(huán)境下的挑戰(zhàn)
- 翱捷科技5年估值16億美元背后的邏輯解密
- 一文看懂:機(jī)床企業(yè)積極探索智能制造
- 芯愿景科創(chuàng)板IPO受理,EDA業(yè)務(wù)收入占比不超3%
- 怎么看?核心工業(yè)軟件:智能制造的中國“無人區(qū)”
- 無邊框屏幕+聯(lián)發(fā)科芯片組,Realme首款智能電視或在印度發(fā)布
- 解密:Arm服務(wù)器芯片陣營的進(jìn)擊
- 遭專利狙擊,敏芯的科創(chuàng)板之路還要走多遠(yuǎn)?
- 四大升級助力,MIUI12小米無障礙功能到了2.0時(shí)代
- 高通侯明娟:5G剛開始 還有很多機(jī)會(huì)和空間等待拓展
- 榮耀智慧屏 X1系列具有超強(qiáng)解碼能力,支持8K!