1、在沒有任何后綴標志的情況下,整型變量的數據類型是在能承受范圍內中最短的一個!
2、實際編程中,應盡可能采用 unsigned 的變量,因為計算機內存的數據存儲都是補碼的形式,有符號類型(特別是其中的負數)還得來回轉換,導致效率不高。
3、另外unsigned long的取值最大可達到42億,這個有必要記住。
4、實數型數據在內存中的存儲是23位有效二進制,且有一位固定為1不存儲,所以實際能表示24位有效值。(這有詳細介紹)若24位全為1,十進制最大整數值為16777215(不考慮指數),換言之,純整數在7位以內是準確的。同樣的方法也可達到,純小數在7位以內是準確的*。當小數整數都有的時候,只有前6位數據是準確的*。
5、單片機的變量存儲空間 bit sbit bdata data idata pdata xdata
僅僅知道這些名詞是不夠的,還必須知道實際的存儲空間。
bit:內部RAM的可位尋址區(0x20~0x7F)的某位
sbit:定義單(多)字節可位尋址區的某位
bdata:存儲在內部RAM可位尋址區,通常搭配sbit使用
data: 內部RAM,0x00~0x7F,可位尋址區(128字節),直接尋址,效率最高
idata: 內部RAM,0x00~0xFF,256字節,間接尋址,訪問效率一般(內部RAM的0x80~0xFF用于中斷和函數調用的堆棧)
pdata:外部RAM,0x00~0xFF,256字節,間接尋址
xdata:外部RAM,0x0000~0xFFFF,64K字節,借助DPTRH,DPTRL進行間接尋址
code:程序存儲空間Flash中
keil的Memory Model 可以設置默認變量存儲空間。
Small : 默認存儲在data區域中
Compact:默認存儲在Pdata中
Large:默認存儲在xdata中
標準51:RAM 共512字節,片內256(片內不可擴展),片外256字節(片外可擴展)。
bdata < data < idata
pdata < xdata
6、需要注意,當keil利用printf調試的時候,格式化字符 %d 表示的是輸出有符號的數據類型范圍,可能造成溢出,要特別注意。
無符號長整型,%lu
單字節整型, %bd
7、keil特有的絕對定位關鍵字 _at_
eg: unsigned int data a _at_ 0x28
但是這個關鍵字只能定義全局變量。
8、static 是一門學問,戳這里。
我們常見的用法,靜態局部變量 = 全局變量
當static 修飾全局變量或者函數的時候,表示該函數或者該局部變量只是在該文件可見。
9、位操作運算符的妙用:
按位與 &
將某位清0,比如 a &= 0xFE, 最低位清0了
檢測某位是0,還是1。在通信中用到的多。
方法為分別與 0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80 進行即可。
按位或 | 某位置1,比如 a |= 0x80 最高位置1
按位取反 ~ 將所有位取反 a = ~0x01; 取反后得到 0xFE
按位異或 將某一位取反。 a ^= 0x80; 將最高位取反
10、移位和乘除法的效率
結論為:
乘法比左移效率高
右移比除法效率高
11、指針
變量指針:一個變量在內存中的起始地址稱為這個變量的指針。說白了,指針的本質就是地址。
指針變量:專門用來存放其他變量起始地址的變量,稱為指針變量。
keil特有指針的表達格式: 所指變量類型 當無
char *point; //定義通用指針變量和C一樣。
unsigned char *cp1, *cp2; //同上
char xdata *Point; //定義內存特殊指針,和C不一樣
unsigned char xdata * data Point1; //unsigned char 變量存儲在xdata, 指針變量存儲在data
需要說明的是,通用指針變量在內存中占三個字節。而標準C是4個字節。
keil測試代碼
#include
#include
void main()
{
unsigned char *a;
unsigned char x;
TI = 1;
x = sizeof(a);
while(1);
}
CB測試代碼
#include
int main()
{
char *a;
printf("%d", sizeof(a));
}
通用指針變量
當無通用指針,默認指針變量存儲在數據存儲器data中,若要指定指針變量存儲位置,可在 * 后加上對應的存儲空間。
char * data a1; //等價于 char *a1
char * idata a2; //指針變量存儲在內部RAM idata
char * xdata a3; //指針變量存儲在片外RAM 64K地址范圍
特殊指針變量
存儲空間為內部RAM(data idata bdata)時,指針變量自身占一個字節。
char data * a1;
char xdata * a2;
char bdata * a3;
存儲空間為外部RAM時,指針變量自身占用兩個字節。
char pdata * b1;
char xdata * b2;
當使用特殊指針的時候通常要把指針變量定義在內部RAM中,這樣才是最快,效率最高的。
char bdata * a1;
char pdata * b1;
12、多文件操作
函數可以不加 extern (引用的函數不能是加static關鍵字的)
變量必須得加 extern
上一篇:關于IAP的一點深入理解
下一篇:STC12單片機實現自動下載程序
推薦閱讀
史海拾趣
公司成立與早期發展:AMD(Advanced Micro Devices)公司成立于1969年,由Jerry Sanders在美國加利福尼亞州圣克拉拉創立。最初,AMD致力于生產挑戰Intel在x86處理器市場的產品,但起初面臨著市場份額不足和技術挑戰等問題。然而,隨著時間的推移,AMD逐漸在市場上獲得了一席之地,并推出了一系列創新產品。
x86處理器市場競爭:AMD在x86處理器市場與Intel展開了激烈的競爭。1991年,AMD推出了第一款x86兼容處理器386DX-40,開始了與Intel的競爭。此后,AMD不斷推出更快、更強大的處理器,如K6系列、Athlon系列等,一度取得了一定的市場份額。
ATI收購與圖形處理器發展:為了拓展業務,AMD于2006年收購了圖形處理器制造商ATI Technologies。這一收購使AMD進入了圖形處理器市場,并推出了一系列創新的圖形處理器產品,如Radeon系列。AMD通過不斷推出高性能、高度集成的圖形處理器,贏得了廣大用戶的青睞。
全球Foundry戰略:為了降低制造成本并提高生產效率,AMD實施了全球Foundry戰略。2008年,AMD成立了GlobalFoundries,將自己的制造業務轉移給這家獨立的半導體制造公司。這一舉措使AMD得以專注于設計和研發,提升了公司的競爭力。
技術創新與新市場拓展:除了在x86處理器和圖形處理器市場取得成功外,AMD還不斷進行技術創新,拓展新的市場。例如,AMD在數據中心領域推出了EPYC系列服務器處理器,致力于滿足云計算和大數據處理的需求。此外,AMD還在游戲主機市場與Sony和Microsoft等公司合作,提供高性能的處理器和圖形處理器。
這些故事展示了AMD在其創立以來的發展歷程,包括在x86處理器市場的競爭、圖形處理器領域的擴展、全球Foundry戰略的實施以及在新興市場的技術創新和市場拓展等方面取得的成就。
CTC Coils Ltd公司早期以生產傳統電感線圈為主,隨著電子技術的飛速發展,公司意識到必須進行技術升級。于是,公司投入大量研發資源,成功開發出一種新型高效能電感線圈,該產品在性能上大幅提升,同時降低了能耗。這一技術突破使CTC Coils Ltd的產品在市場上脫穎而出,公司迅速贏得了大量客戶,并擴大了生產規模。
高頻電子深知技術創新是企業持續發展的核心動力。因此,公司一直保持著對研發的持續投入,不斷推出新產品、新技術和新服務。同時,高頻電子還積極與高校、科研機構等合作,共同開展前沿技術的研發和應用。這些努力使得高頻電子在技術創新方面始終保持著領先地位,為公司的長期發展奠定了堅實的基礎。
綜上所述,高頻電子通過戰略轉型、技術創新、全球化布局、多元化業務布局以及持續投入研發等舉措,實現了從一家小型國防合同制造商到全球領先的高科技供應商的華麗蛻變。這些故事不僅展現了高頻電子的發展歷程和成就,也為我們揭示了企業成功背后的關鍵因素。
面對數字化浪潮的挑戰,EBK Kruger積極擁抱數字化轉型。公司引入了先進的ERP系統和智能制造技術,提高了生產效率和產品質量。同時,EBK Kruger還加強了對大數據和人工智能技術的研發和應用,為客戶提供了更加智能化和個性化的產品和服務。通過數字化轉型的推動,EBK Kruger在激烈的市場競爭中保持了領先地位。
1962年,Futaba推出了無線電控制設備和沖壓金屬模用部件,旨在提升工業品質并縮短模具開發周期。這一舉措不僅解決了當時工業控制領域中的供應商問題,還引領了模具制造行業的標準。隨著技術的不斷進步,Futaba開始涉足無線電傳輸模組(R/C)的生產和銷售,并逐漸在無線遙控領域嶄露頭角。特別是高頻無線展頻通訊技術的實現,使Futaba的無線遙控技術在工業用機器人和工業控制設備上得到了廣泛應用,進一步鞏固了其在該領域的領先地位。
近年來,隨著環保意識的提高,電子行業對綠色發展的需求也日益迫切。BSI積極響應這一需求,推動了電子行業綠色標準的制定和實施。通過制定嚴格的環保標準,BSI引導電子產品制造企業采用更加環保的生產工藝和材料,減少了對環境的污染。同時,BSI還為企業提供了碳排放核查等服務,幫助企業了解自身的碳排放情況,制定了減排措施,推動了電子行業的綠色發展。
《模擬電路基礎》模擬試題 一 填空題(每題2分,共40分) 1 N溝道____________型的MOS管,其Vgs值可以為負也可以為正,而P溝道的JFET,其Vgs值只能是___________值。2 再三種組態中,__________組態的放大能力最強,__________組態的輸入電阻最大,_ ...… 查看全部問答∨ |
FCS是由PLC發展而來的;而在另一些行業,FCS又是由DCS發展而來的,所以FCS與PLC及DCS之間有著千絲萬縷的聯系,又存在著本質的差異。本文試就PLC、DCS、FCS三大控制系統的特點和差異作一分析,指出它們之間的淵源及發展方向。 摘 要: ...… 查看全部問答∨ |
隨著半導體制造商向65納米技術轉移并展望更小節點,嚴峻的測試挑戰也開始浮出水面。現在,工藝開發工程師們必須放棄由硅、二氧化硅、多晶硅和鋁材料構成的良性世界,而將自己置于由硅鍺(SiGe)、絕緣體上硅(SOI)、亞硝酸鉿(HfNO2)、金屬柵、低 ...… 查看全部問答∨ |
|
求助:我通過platform builter5.0下載WINCE nk.bin文件到ARM板中,提示如下錯誤: Warning: Debugger service map is set to none. If your image has debugging support it may not boot properly. Cannot access selecte ...… 查看全部問答∨ |
|
在mips32中是這樣實現的: #define rdtscl(dest)\\ __asm__ __volatile__(\"mfc0 %0, $9; nop\":\"=r\"(dest)); 但是我發現$9是一個32位的寄存器,那如何實現64位上電時間呢? 下面是一些 ...… 查看全部問答∨ |
|
XDS510 100元 KL05Z 開發板,全新. 50元 串口服務器,全新,帶光盤. 50元 M動力 F28035開發板,加焊485芯片 100元. 測試樣品 推挽正激加并網. 200元. ...… 查看全部問答∨ |
如何利用MSP430對一個4-20mA信號與給定值進行比較,然后驅動燈泡亮滅,并將信號給上位機。 是利用MSP430的比較器呢?還是如何操作?誰能給個思路?謝謝!!!!! \0\0\0eeworldpostqq… 查看全部問答∨ |