導航:首頁 > 源碼編譯 > 編譯器支持的存儲器

編譯器支持的存儲器

發布時間:2023-05-27 16:21:01

編譯原理的數據結構

編譯原理一直是計算機學習的必修課.
當然,由編譯器的階段使用的演算法與支持這些階段的數據結構之間的交互是非常強大的。編譯器的編寫者盡可能有效實施這些方法且不引起復雜性。理想的情況是:與程序大小成線性比例的時間內編譯器,換言之就是,在0 ( n )時間內,n是程序大小的度量(通常是字元數)。本節將講述一些主要的數據結構,它們是其操作部分階段所需要的,並用來在階段中交流信息。 臨時文件(temporary file):計算機過去一直未能在編譯器時將整個程序保留在存儲器中。這一問題已經通過使用臨時文件來保存翻譯時中間步驟的結果或通過「匆忙地」編譯(也就是只保留源程序早期部分的足夠信息用以處理翻譯)解決了。存儲器的限制現在也只是一個小問題了,現在可以將整個編譯單元放在存儲器之中,特別是在可以分別編譯的語言中時。但是偶爾還是會發現需要在某些運行步驟中生成中間文件。其中典型的是代碼生成時需要反填(backpatch)地址。例如,當翻譯如下的條件語句時 if x = 0 then ... else ... 在知道else部分代碼的位置之前必須由文本跳到else部分:
CMP X,0 JNE NEXT ;;
location of NEXT not yet known < code for then-part > NEXT : < code for else-part >
通常,必須為NEXT的值留出一個空格,一旦知道該值後就會將該空格填上,利用臨時文件可以很容易地做到這一點。
如果想利用上面的編譯原理開發一套屬於自己的編程語言,或者想在一個產品中嵌入編程語言,可以參考zengl開源網開發的zengl編程語言,該編程語言為國人使用C語言開發,裡麵包含兩個部分,一個是編譯器,一個是解釋執行中間代碼的虛擬機。編譯器包含了詞法掃描,語法分析,中間代碼輸出等,虛擬機則類似JAVA一樣解釋執行中間代碼。作者將所有的版本都公布出來,好讓讀者可以由淺入深的做研究,並且為了證明該編程語言的實用性,還結合SDL游戲開發庫開發了一款圖形界面和命令行界面的21點撲克小游戲 。
zengl編程語言目前適用平台為windows和linux (最開始在Linux下使用gcc開發,後來移植到windows平台)

⑵ 在fc中怎麼給變數分配地址

如何分配變數到指定的地址
舉例:
unsigned char temp_A@0x00; //定義無符號變數temp_A,強制其地址為0x00
unsigned char temp_B@0x100; //定義無符號變數temp_B,強制其地址為0x100
@tiny unsigned char temp_C; //定義無符號變數temp_C,由編譯器自動在地址小於0x100的RAM中為其分配一個地址
@near unsigned char temp_D; //定義無符號變數temp_D,由編譯器自動在地址大於0xFF的RAM中為其分配一個地址
另外也可以採用偽指令"pragma"將函數或者變數定義到指定的section中,例如:
#pragma section [name] // 將下面定義的未初始化變數定義到.name section中
Unsigned char data1;
Unsigned int data2;
……(任何需要定義在.name section中的變數)
……
#pragma section [] // 返回到正常的section.
注意:pragma偽指令可以用來定位函數,初始化變數或者未初始化變數。這三者用不同的括弧區分。
(name):代碼
[name] :未初始化變數
{name}:初始化變數
如何在COSMIC C文件中使用匯編語言
在COSMIC C文件中使用匯編語言常見的方法有如下兩種:使用#asm …#endasm組合格式
或_asm("…"); 單行格式。
舉例1:
unsigned char temp_A;
Void func1(void)
{
...
#asm
PUSH A
LD A,(X)
LD _temp_A,A
POP A
#endasm
...
}
註:在C嵌匯編環境下使用全局變數,要在該全局變數名稱前加下劃線"_"。
舉例2:
Void func1(void)
{
...
_asm("rim");
_asm("nop");
...
}
如何觀察RAM/FLASH/EEPROM的最終分配情況
在Project->settings->linker選項頁中,將Category選為Output,再勾選Generate Map File。
點擊OK按鍵後,再次編譯鏈接該項目,如果成功則會在項目輸出目錄中(本例是在C:\STM8_NewProject1\debug 目錄下)生成 .map 文件。該文件詳細地列出RAM/FLASH/EEPROM的分配使用情況。
如何生成hex格式的輸出文件
在Project->settings->PostBuild選項頁中,在commands欄內加入下行命令:
chex –fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
再次編譯鏈接該項目,如果成功則會在項目輸出目錄中(本例是在C:\STM8_NewProject1\debug 目錄下)生成 .hex 文件。
什麼是MEMORY MODEL
STM8的C編譯器支持多種存儲器模式。http://tiyubisai.com/video_news/news_135621.html 用戶可以根據應用的需要選擇最適合的配置。可以根據需要選擇採用2個位元組的定址方式(僅適用於64k以內的程序)或老遲者3位元組的定址方式。也可以規定將變數默認為定義在存儲器的哪一區域:zero page內,汪察還是zero page 外。下面對幾種供選擇的MEMORY MODEL做簡單說明。
在Project->settings->C Complier選項頁中,將Category選為General,裡面有一個Memory Models選項欄如下:

在下拉菜單中共有4種MEMORY MODEL可供選擇:
程困含茄序地址空間在64K以內(即程序容量小於32K)
mods0,
modsl0
程序地址哦那個鍵在64K以上(即程序容量大於32K)
mods
modsl
MODS0 MODSL0 MODS MODSL
名稱 Stack Short
短堆棧模式 Stack Long
長堆棧模式 Stack Short
短堆棧模式 Stack Long
長堆棧模式
程序地址空間 程序所用到的地址空間在64K范圍內 程序所用到的地址空間超出64K范圍
指針默認類型 函數指針和數據指針默認為@near (2 bytes) 函數指針默認為@far(地址為3位元組);
數據指針默認為@near
全局變數默認類型 所有全局變數的地址默認為1個位元組。對於地址超出1個位元組的變數,必須用@near定義 所有全局變數默認為Long型。若要將變數地址定義為1個位元組,必須用@tiny定義 所有全局變數的地址默認為1個位元組。對於地址超出1個位元組的變數,必須用@near定義 所有全局變數默認為Long型。若要將變數地址定義為1個位元組,必須用@tiny定義
.lkf 文件的作用
.lkf文件在程序鏈接時決定如何具體分配RAM/ROM的空間。在Project Settings – Linker – Category(Input)選項頁中,當"Auto"選擇框被選中時,由系統自動生成.LKF文件,否則由用戶指定。

當"Auto"選擇框被勾選時,.lkf文件會自動生成在項目主目錄下的 debug/ 和 release/ 目錄中。下面以上圖所示 at45DBXX Project的 lkf 文件為例,來進一步理解.lkf 。
在.lkf中,以"#"開頭的行是注釋行,為方便用戶理解,將原注釋刪除,代之以中文注釋如下:
# 定義(+seg)一個常量段(.const),開始(b)於0x8080,最大分配(m)0x1ff80個位元組(即不超過
# 0x27FFF),為該段起名(n)為.const(和常量段的保留字同名),需要初始化的變數的初始值存
# 放於此段(-it)
+seg .const -b 0x8080 -m 0x1ff80 -n .const -it
# 定義(+seg)一個程序段(.text),緊跟(-a)在.const段後面(和.const 共同位於0x8080 –
# 0x27FFF),為該段起名(n)為. text (和程序段的保留字同名)。
+seg .text -a .const -n .text
# 定義(+seg)一個EEPROM段(.eeprom),開始(b)於0x4000,最大分配(m)0x800個位元組(即不超
#過0x47FF),為該段起名(n)為. eeprom (和EEPROM段的保留字同名)。
+seg .eeprom -b 0x4000 -m 0x800 -n .eeprom
# .bsct段服務於定義在0頁(地址小於0x100)以內需要初始化的全局變數(如@tiny char a = 9;)
+seg .bsct -b 0x0 -m 0x100 -n .bsct
# .ubsct段服務於定義在0頁(地址小於0x100)以內不需要初始化的全局變數(如@tiny char b;)
+seg .ubsct -a .bsct -n .ubsct
# .bit表示位域段,定義後即可在程序中使用_Bool變數(如_Bool c = 1;),-id表示該段需要初始化。
+seg .bit -a .ubsct -n .bit -id
# 這是ST7時代(STM8是基於ST7發展而來的)由於物理堆棧小,速度慢,使用內存來模擬堆棧的變通手段。
+seg .share -a .bit -n .share -is
# .data段服務於定義在0頁(地址大於0xFF)以外需要初始化的全局變數(如@near char d = 8;)
+seg .data -b 0x100 -m 0x1300 -n .data
# .bss段服務於定義在0頁(地址大於0xFF)以內不需要初始化的全局變數(如@ near char e;)
+seg .bss -a .data -n .bss
# 段定義結束,下面放置的庫及Obj文件中的變數、常量、程序就按照上面的規定進行分配。
#初始化程序
crtsi0.sm8
#用戶程序
Debug\main.o

# 一些必要的cosmic庫
libis0.sm8
libm0.sm8
# 重定義常量段,開始於0x8000,用於放置中斷向量表(STM8硬體決定此位置)
# –k 用於程序冗餘代碼優化,詳情可參考cosmic用戶手冊。
+seg .const -b 0x8000 –k
# 中斷向量
Debug\stm8_interrupt_vector.o
#定義了三個變數,用於系統初始化
+def [email protected] # end of uninitialized zpage
+def [email protected] # end of bss segment
+def __stack=0x17ff # 不同的晶元__stack內容不同,由系統自動生成
如何實現位操作
Cosmic C 編譯器支持位變數的操作,可以將其定義成 _Bool類型。_Bool類型的變數只包含兩種值true(1)或者false(0)。若將一個表達式賦值給_Bool變數,則編譯器會將表達式與0做比較,然後將布爾值賦給_Bool變數。因此,任何整型或者表達式的值都可以賦給_Bool變數。但是,布爾變數不能定義位數組,只能定義成結構體或者聯合。而且,_Bool變數會被打包成位元組的形式。
編譯器會將所有的全局_Bool變數打包成位元組形式,存放在.bit section中。局部_Bool變數也會被打包成位元組形式。但是_Bool類型的參數會被擴展成一個單位元組。
具體的關於位變數的定義和使用可參考如下例子:
定義位變數:
_Bool in_range;
_Bool p_valid;
char *ptr;
使用位變數:
in_range = (value >= 10) && (value <= 20);
p_valid = ptr; /* p_valid is true if ptr not 0 */
if (p_valid && in_
在使用位變數時,若程序編譯時提示如下錯誤:
#error clnk Debug\example.lkf:1 no default placement for segment .bit
The command: "clnk -l"C:\Program Files\COSMIC\CXSTM8_16K_4.2.10\Lib" -o Debug\example.sm8 -mDebug\example.map -sa Debug\example.lkf " has failed, the returned value is: 1
exit code=1.
實際上是由於,在項目中沒有定義.bit section。可按照如下步驟,手工添加.bit section:
打開項目鏈接配置窗口:Project - Settings - Linker,選擇 Input 目錄項

⑶ 「Keil C51」下如何讓編譯器優先使用片內「RAM」

C51內存結構深度剖析
在編寫應用程序時,定義一個變數,一個數組,或是說一個固定表格,到底存儲在什麼地方;當定義變數大小超過MCU的內存范圍時怎麼辦;如何控制變數定義不超過存儲范圍;以及如何定義變數才能使得變數訪問速度最快,寫出的程序運行效率最高。以下將一一解答。

1 六類關鍵字(六類存儲類型)
data idata xdata pdata code bdata

code: code memory (程序存儲器也即只讀存儲器)用來保存常量或是程序。code memory 採用16位地址線編碼,可以是在片內,或是片外,大小被限制在64KB
作用:定義常量,如八段數碼表或是編程使用的常,在定義時加上code 或明確指明定義的常量保存到code memory(只讀)
使用方法:
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
此關鍵字的使用方法等同於const

data data memory (數據存儲區)只能用於聲明變數,不能用來聲明函數,該區域位於片內,採用8位地址線編碼,具有最快的存儲速度,但是數量被限制在128byte或更少。
使用方法:
unsigned char data fast_variable=0;

idata idata memory(數據存儲區)只能用於聲明變數,不能用來聲明函數. 該區域位於片內,採用8位地址線編碼,內存大小被限制在256byte或更少。該區域的低地址區與data memory地址一致;高地址區域是52系列在51系列基礎上擴展的並與特殊功能寄存器具有相同地址編碼的區域。即:data memory是idata memory的一個子集。

xdata xdata memory 只能用於聲明變數,不能用來聲明函數,該區域位於MCU
外部,採用16位地址線進行編碼,存儲大小被限制在64KB以內。
使用方法:
unsigned char xdata count=0;

pdata pdata memory 只能用於聲明變數,不能用來聲明函數,該區域位於MCU外部,採用8位地址線進行編碼。存儲大小限制在256byte. 是xdata memory的低256byte。為其子集。
使用方法
unsigned char pdata count=0;

bdata bdata memory 只能用於聲明變數,不能用來聲明函數。該區域位於8051內部位數據地址。定義的量保存在內部位地址空間,可用位指令直接讀寫。
使用方法:
unsigned char bdata varab=0

註:有些資料講,定義字元型變數時,在預設unsigned 時,字元型變數,默認為無符號,與標准C不同,但我在Keil uVision3中測試的時候發現並非如此。在預設的情況下默認為有符號。或許在以前的編譯器是默認為無符號。所以看到有的資料上面這樣講的時候,要注意一下,不同的編譯器或許不同。所以我們在寫程序的時候,還是乖乖的把unsigned signed 加上,咱也別偷這個懶。
2函數的參數和局部變數的存儲模式
C51 編譯器允許採用三種存儲器模式:SMALL,COMPACT 和LARGE。一個函數的存儲器模式確定了函數的參數的局部變數在內存中的地址空間。處於SMALL模式下的函數參數和局部變數位於8051單片機內部RAM中,處於COMPACT和LARGE模式下的函數參數和局部變數則使用單片機外部RAM。在定義一個函數時可以明確指定該函數的存儲器模式。方法是在形參表列的後面加上一存儲模式。

示例如下:
#pragma large //此預編譯必須放在所有頭文前面
int func0(char x,y) small;
char func1(int x) large;
int func2(char x);
註:
上面例子在第一行用了一個預編譯命令#pragma 它的意思是告訴c51編譯器在對程序進行編譯時,按該預編譯命令後面給出的編譯控制指令LARGE進行編譯,即本常式序編譯時的默認存儲模式為LARGE.隨後定義了三個函數,第一個定義為SMALL存儲模式,第二個函數定義為LARGE第三個函數未指定,在用C51進行編譯時,只有最後一個函數按LARGE存儲器模式處理,其它則分別按它們各自指定的存儲器模式處理。
本例說明,C51編譯器允許採用所謂的存儲器混合模式,即允許在一個程序中將一些函數使用一種存儲模式,而其它一些則按另一種存儲器模式,採用存儲器混合模式編程,可以充分利用8051系列單片機中有限的存儲器空間,同時還可以加快程序的執行速度。

3絕對地址訪問 absacc.h(相當重要)

#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
功能:CBYTE 定址 CODE區
DBYTE 定址 DATA區
PBYTE 定址 XDATA(低256)區
XBYTE 定址 XDATA區
例: 如下指令在對外部存儲器區域訪問地址0x1000
xvar=XBYTE[0x1000];
XBYTE[0x1000]=20;

#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)

功能:與前面的一個宏相似,只是它們指定的數據類型為unsigned int .。
通過靈活運用不同的數據類型,所有的8051地址空間都是可以進行訪問。

DWORD[0x0004]=0x12F8;
即內部數據存儲器中(0x08)=0x12; (0x09)=0xF8

註:用以上八個函數,可以完成對單片機內部任意ROM和RAM進行訪問,非常方便。還有一種方法,那就是用指鍾,後面會對C51的指針有詳細的介紹。

4寄存器變數(register)
為了提高程序的執行效率,C語言允許將一些頻率最高的那些變數,定義為能夠直接使用硬體寄存器的所謂的寄存器變數。定義一個變數時,在變數類型名前冠以「register」 即將該變數定義成為了寄存器變數。寄存器變數可以認為是一自動變數的一種。有效作用范圍也自動變數相同。由於計算機寄存器中寄存器是有限的。不能將所有變數都定義成為寄存器變數,通常在程序中定義寄存器變數時,只是給編譯器一個建議,該變數是否真正成為寄存器變數,要由編譯器根據實際情況來確定。另一方面,C51編譯器能夠識別程序中使用頻率最高的變數,在可能的情況下,即使程序中並未將該變數定義為寄存器變數,編譯器也會自動將其作為寄存器變數處理。被定義的變數是否真正能成為寄存器變數,最終是由編譯器決定的。

5內存訪問雜談
1指鍾
指鍾本身是一個變數,其中存放的內容是變數的地址,也即特定的數據。8051的地址是16位的,所以指針變數本身佔用兩個存儲單元。指針的說明與變數的說明類似,僅在指針名前加上「*」即可。
如 int *int_point; 聲明一個整型指針
char *char_point; 聲明一個字元型指針
利用指針可以間接存取變數。實現這一點要用到兩個特殊運算符
& 取變數地址
* 取指針指向單元的數據

示例一:
int a,b;
int *int_point; //定義一個指向整型變數的指針
a=15;
int_point=&a; //int_point指向 a
*int_point=5; //給int_point指向的變數a 賦值5 等同於a=5;
示例二:
char i,table[6],*char_point;
char_point=table;
for(i=0;i<6;i++)
{
char_point=i;
char_point++;
}
註:
指針可以進行運算,它可以與整數進行加減運算(移動指針)。但要注意,移動指針後,其地址的增減量是隨指針類型而異的,如,浮點指針進行自增後,其內部將在原有的基礎上加4,而字元指針當進生自增的時候,其內容將加1。原因是浮點數,佔4個內存單元,而字元佔一個位元組。

宏晶科技最新一代STC12C5A360S2系列,每一個單片機出廠時都有全球唯一身份證號碼(ID號),用戶可以在單片機上電後讀取內部RAM單元F1H~F7H的數值,來獲取此單片機的唯一身份證號碼。使用MOV @Ri 指令來讀取。下面介紹C51 獲取方法:
char id[7]={0};
char i;
char idata *point;
for(i=0;i<7;i++)
{
id[i]=*point;
point++;
}

(此處只是對指針做一個小的介紹,達到訪問內部任何空間的方式,後述有對指針使用的詳細介紹)
2對SFR,RAM ,ROM的直接存取
C51提供了一組可以直接對其操作的擴展函數
若源程序中,用#include包含頭文件,io51.h 後,就可以在擴展函數中使用特殊功能寄存器的地址名,以增強程序的可讀性:

注 此方法對SFR,RAM,ROM的直接存取不建議使用.因為,淡io51.h這個頭文件在KEIL中無法打開,可用指針,或是採用absacc.h頭文件,

⑷ C51編譯器中不支持的存儲模式是

選A
xdata是變數定義的一種形式,而且定義時應當全部小寫。老悶稿
Small為小模式,變數侍孝默認放在data區域
Compact為兼容模式,變數默認放在pdata區
Large為大模式,變數默罩唯認放在xdata區。

⑸ c1和c2有什麼區別 理解c1和c2的異同點

c1標準定義了C語言的基本語法和語言特性,包括數據頌虛類型、運算符、語句結構等。而c2標准在c1的基礎上增加了一談櫻鉛些新的語言特性,如布爾類型、long long類型、變長數組、內聯函數等。

C語言的庫函數是非常重要的部分,它們提供了豐富的功能和操作。c2標准在c1的基礎上增加了一些新的庫函數,如sinh()、cbrt()、exp2()等。

4. 兼容性

2. 庫函數

c1標準的編譯器並不支持所有的c2標準的語言特性和庫函數,而c2標準的編譯器則可以支持c1標准和c2標準的語言特性和庫函數。

由於c2標准增加了很多新的語言特性和庫函數,因此c2標準的代碼可能無法在c1標準的編譯器上編譯通過。而c1標准含好的代碼則可以在c2標準的編譯器上編譯通過,但可能無法使用c2標準的新特性和庫函數。

⑹ TOP851編程器為什麼不能編寫25系列存儲器

現在都網路化了,杭州發到崑山也就一天時間,你看看這里:
單片機學習實驗及開發工具的導購

鑒於目前單片機技術火的一塌糊塗!越來越多的朋友加入了學習單片機的行列中!還有更多的朋友正在准備加入到學習單片機行列中。很多初學者在購買了本站的硬體學習板後,在短期內就掌握了自主編寫實用控製程序的能力,正所謂只要功夫深,鐵杵磨成針。
這里要先說一下單片機的含義,單片機就是一種微型的計算機,它的硬體等級不高,程序存儲器比較小,無法和我們個人電腦中的硬碟相比,但是他的整體成本很低,體積也很小,這就給電子工程師提供了一個低成本開發智能控制設備的可能。另外就是它的可塑性是很強的,只要把程序存儲器中寫入不同的程序,它就會根據不同的程序來完成不同的工作。

比如我們要控制洗衣機的完成一個智能控制洗衣流程(不採用簡單的機械定時器),從成本角度講,雖然個人電腦性能強大,但是不能採用,因為一台個人電腦的體積成本都太過了,此時用「單片機+順序控製程序+介面電路+執行電路」就是最好的解決方案了,這等於在洗衣現場有一個小小的電腦在控制著整個洗衣過程,單片機是現代全自動洗衣機的核心部分,它的應用大大減低了人的勞動強度。從這個簡單的例子中,我們就可以看到單片機的實際意義了!小到溫度智能控制,中到通訊控制,大到生產流程式控制制,都可以見到它的身影。應用范圍絕對廣泛,只要編寫好不同的程序。單片機就可以完成不同的控制工作。這樣,我們通過編寫不同的控製程序就可以實現器件的萬能化!

大致可以通過這些步驟來完成實驗及開發工作:

第一步:通過軟體編譯平台開始寫我們的試驗程序,這就好比寫文章要有筆和紙一樣,最常用的是KEIL軟體平台,比如點亮一個發光管,點亮多個發光管,點亮流水燈,驅動繼電器,驅動數碼管......,學用寫源程序有2個重點,重點1是學會在KEIL中寫源程序,就和用記事本軟體編輯文字一樣,重點2是學會把寫好的源程序通過KEIL軟體平台編譯成為單片機可以讀懂的由0和1構成的機器碼,為了簡化,通常是生成16進制的*.HEX或者*.BIN文件,不過本質還是0和1。在這里,源程序我們能讀懂,但是單片機不能讀懂,所以需要把源程序通過編譯器編譯成最終的*.HEX或者*.BIN文件。在這里,編譯平台充當的是一個語言翻譯官的角色!

第二步:製作或者購買一個編程器(也有人叫它為燒寫器)。

注意,編程器的作用是把我們編譯好的機器碼文件寫入到單片機的程序存儲器中,這個設備的作用就好比我們給一個沒有記憶的人灌輸記憶。通過程序被寫入,單片機中就被灌輸了我們的設計思想或者是某種控制流程。編程器和單片機可以支持的文件是16進制的,文件屬性一般為*.HEX或者*.BIN,它們的本質是二進制,也就是1和0。編程器只是一種寫入設備,而源程序還是要由我們來編寫和創造的!

第三步:製作或者購買一個實驗板,它的作用是完成最終的硬體驅動效果驗證。這就好比把一個已經灌輸了我們設計思想的單片機連上軀體和四肢,看看這個完整的,已經具備了「頭腦+思想+四肢」的設備是不是能真的動起來,動起來的時候看看它的動作是不是和我們設計的程序完全一致?如果不一致就說明我們給他設計的「思想」可能存在問題!此時就需要用編程器中的「擦除」操作給單片機「洗腦」,並且修改程序,然後再次寫入和看驗證結果。

比如我們用軟體寫了一個流水燈程序,通過什麼來驗證它是否可以真正的驅動硬體呢?答案就是實驗板。

也許有人會問,為什麼沒有提到模擬器?因為以前專業化的模擬器太貴了!大家一般都承受不了!

模擬器是做什麼的呢?它的作用是調試我們的程序用的,比如我們的程序有100行,假設代表了10個驅動硬體的動作,這時候如果有模擬器的話,我們可以讓這10個動作一個個的執行,同時能夠觀察到在執行這10個動作的過程中,單片機內部的各單元狀態是什麼樣的!也就是可以細致的分析一下整個程序在硬體中的具體工作過程。這樣我們就可以了解程序中是不是有問題存在,所以叫做模擬!

模擬分為硬體模擬和軟體模擬二種,軟體模擬是完全虛擬的,比較抽象,初學者理解起來比較困難。硬體模擬方面,如果硬體模擬器連接了目標設備,就可以看到驅動硬體的效果,還是比較實用的。

看了這么多的文字介紹,大家還是可以來這里看一下上面所說的到底是怎麼樣的東西,我們應該如何來使用它們,給大家一個感性的認識。

點擊進入大量單片機實驗視頻錄像在線觀看

總而言之,在你決定學習單片機之前,請做好如下准備工作:

一、硬體准備:計算機一台,編程器,模擬器和實驗板。如果你想學單片機,而又不願做這些投資,很有可能會挫傷你學習的積極性和浪費你的時間,好在這些投資並不算多:)
編程器可以選用「A51編程器」或「多功能編程器」,經常會有朋友這樣問我:這兩種編程器到底有什麼不同,其區別在哪裡?
在此,站長也說明一下其不同之處,怎麼樣的才適合你的使用。「A51編程器」的主要特點就是價格低,性能穩定,支持常用的51晶元,僅燒51的話,用用這個絕對經濟實惠,不錯了。「多功能編程器」的主要特點是性價比高,支持晶元多,有幾百種型號,還能燒寫主板BIOS晶元,比目前市場上的同類產品價格都要低。總括來講,如果你是僅僅用用51系列的,選「A51編程器」肯定OK;如果你想在單片機方面好好發展一下的,那最好還是為以後考慮一下,「多功能編程器」就比較合適了,雖然價格比「A51編程器」高了僅幾十元,但長期來看,還是非常值得投資的,以備日後做其它用途使用,而且還有豐富的套餐組合供您選購。至於「TOP系列」的編程器相對來說,價格要稍高於「A51編程器」和「多功能編程器」,但它有漂亮的外殼,看上去比較漂亮,經站長自己使用的經驗總結,感覺TOP853、TOP2000BS、TOP2005+(新產品)、TOP2007(新產品)、TOP2048這幾款TOP編程器性能比較穩定,使用感覺不錯,性價比比較高,其它的TOP系列編程器我們也就不作介紹了。

多功能編程器全套餐A:176元 相應介紹詳見這里
A51編程器:98元 相應介紹詳見這里
微型51模擬器:128元 相應介紹詳見這里
增強型51實驗板:148元 相應介紹詳見這里

增強型51實驗板可選配件:
1602液晶屏:30元 紅外線遙控器:25元 步進電機:15元 18B20溫度感測器:12元
200米無線遙控發射模塊:20元 1000米無線遙控發射模塊:35元 無線遙控接收模塊:15元

TOP系列編程器—— TOP851 TOP2000BS TOP853 TOP2005+ TOP2007 TOP2048 TOP2049
TOP全系列編程器區別與差異介紹(站長個人使用總結)

推薦單片機學習全套餐C(編程器、模擬器、實驗板分體式設計):

A51編程器+微型51模擬器+增強型51實驗板+1602液晶屏+紅外線遙控器+步進電機+DS18B20溫度感測器+200米無線遙控收發模塊(包括發射機和接收板)+AT89S51單片機晶元 總價:501+20(郵費)=521元

贈送:

1號光碟:單片機多媒體視頻教程+單片機實驗視頻錄像(酷)+實驗板原理圖+大量實驗板配套常式+電子資料手冊等 ——此碟為CDROM光碟

2號光碟:單片機權威教程全集,DVD格式,數據量4.3G,內含10CD教程 ——此碟為DVD光碟(相當於價值100元的CD教程光碟)

好消息:從2007年7月5日起,凡購買單片機學習全套餐C的用戶,特別贈送價值36元的《C51單片機高效入門》配套教程一本,以便配套學習使用。 關於贈送活動的更詳細情況請看這里--->>>

關於單片機學習全套餐C的配套的系列教學資料可以看網站首頁的「手把手教你學51單片機」欄目。

您也可以翻閱歷年來的《電子製作》雜志,我們刊登了系列連載教程,以便大家進行理論學習以及提高實踐動手能力。 歷年來有哪些期刊雜志有所介紹呢,原文及詳細情況您可以看這里--->>>點擊進入

點擊進入「單片機學習全套餐C」相關實驗視頻錄像在線觀看

現在單片機學習之類的書籍在新華書店一翻就是一大堆,讓人看了眼花繚亂,相信大家也有這樣的感受,經常會有很多單片機初學者朋友讓我來推薦單片機入門的書籍,從這些朋友的要求來看,感覺大家已經厭倦了很多條教式書籍的枯燥與古板,至少站長在大學讀書時就有這樣的感受,文科的書相對理科的書來說要好些,但對於理科的特點,本來就是比較突出其技術性與特點,要想寫出點新鮮感確實有點難;還有一點,相信大家和我也會有一個共識,現在很多書不僅多,而且厚,但到時我們真正所關心的問題是否真的有這么多呢,相信一般我們也不會把整本書全部讀完,只是取其一部分對自己有用的內容來閱讀,至少有些書對於我來講有點像字典,需要用的時候去翻一下而已。看完了書,有很多朋友可能還是會說,書我看了一大堆,但到頭來還是一團迷茫,而感到無從下手,呵呵,因為我本人也遇到過這樣的情況,對於單片機,在此我們必須提到的就是實踐動手,否則書就算看10遍甚至20遍還是不能完成具體的應用任務,這等於白學,因為不能做到學以致用。針對以上這些現狀,站長萌發了寫書的念頭,找了很多材料,並將積累的經驗,花了無數的日夜寫下了這本《C51單片機高效入門》一文,寫書的思路是以理論與實踐相結合為主導,以我們網站提供的單片機學習全套餐為硬體平台,一一介紹單片機各方面的理論知識與具體實踐動手方法,建議初學者朋友先將此書大致翻一遍,對整體有個了解,掌握理論基礎知識,然後再對照著書上的實踐例子,一個課時一個課時地學習下去,相信看完了此書,你已經跨入了單片機這個領域的大門了。

建議:如果以後想做做單片機開發及產品的,可以將以上套餐中的A51編程器換成TOP853編程器,這樣性價比可以高很多,支持的晶元有1500多種,而且是USB介面,使用非常方便,不會出現部分筆記本電腦沒有串口而不能使用的尷尬局面,如換成TOP853,補上兩種編程器的差價就可以了。

單片機學習全套餐C主要部件實物照片:

單片機學習全套餐C使用的編程器、模擬器、實驗板
1602LCD液晶屏

DS18B20溫度感測器
6121編碼紅外線遙控器

微型步進電機
200米無線收發模塊

AT89S51單片機晶元——程序燒寫使用
贈送的精美配套光碟,含豐富的學習資料與常式

贈送的單片機視頻權威教程——DVD光碟
附帶的USB線、串口線

贈送的配套學習書本 點擊查看書本詳細資料-->> 本書是以目前最為流行的8051系列單片機為主體,同時使用C程序設計語言來進行描述的。全書共分為四部分內容:單片機基礎知識、C語言程序設計、單片機入門基礎實例、單片機高級應用實例。以理論與實踐相結合的方式來進行講解,避免了傳統教科書給人枯燥、乏味的感覺。講解風格通俗易懂、條理清晰、實例豐富、圖文並茂,既使是沒有任何單片機基礎的人,也可以通過本書的學習,踏入單片機世界的大門。 作者為本書的出版開發了相應的學習編程、模擬及實驗板,以方便讀者朋友進行學習,同時以大量實例照片記錄了實驗的過程且現象,以激發讀者朋友對單片機的興趣愛好。 本書的配套光碟包含了所有實驗的源程序代碼、一些常用的電子工具軟體、晶元資料、實驗過程照片以及試驗演示視頻錄像。因此,通過本書,讀者獲得的是教程和學習平台的結合,不僅可以用於學習,而且還可以用於工廠、企業的產品研發。 本書可供電子愛好者和大學、中專相關專業學生參考。

單片機學習全套餐C的精美彩色外包裝盒,質量、品質的實力體現!

推薦單片機學習全套餐D(編程器、模擬器、實驗板一體化設計)豪華配置——多數初學者的選擇

51單片機綜合學習系統+模擬組件+1602液晶屏+紅外線遙控器+步進電機+DS18B20溫度感測器+200米無線遙控收發模塊(包括發射機和接收板) 總價:563+20(郵費)=583元

2007年我們推出的單片機學習全套餐D,一直受到用戶朋友的廣泛好評。在這一年中,結合大家在學習中遇到的問題,我們不斷總結教學經驗,更新產品技術,組織編寫與之相配套的書本教材<單片機快速入門>,目前此書已由北京航空航天大學出版社出版發行。

很多用戶在於我們的溝通中,都說到自己是初學者,很多人擔心自己學不會。我們推出這本書的目的也在於此:讓零基礎的用戶,可以邊看書邊動手實踐。我們希望用我們的力量,為更多的電子愛好者提供適合的學習資源。

我們多年的發展離不開廣大用戶的支持和信賴,新書推出之際,我們特舉行贈書活動。即日起,您在本公司購買單片機學習全套餐D,就可以免費獲得價值36元的<單片機快速入門>一書。

贈送:

1號光碟:單片機多媒體視頻教程+單片機實驗視頻錄像(酷)+實驗板原理圖+大量實驗板配套常式+電子資料手冊等 ——此碟為CDROM光碟

2號光碟:單片機權威教程全集,DVD格式,數據量4.3G,內含10CD教程 ——此碟為DVD光碟(相當於價值100元的CD教程光碟)

3號光碟:本站特別加送清晰版VCD格式「51單片機綜合學習系統」實驗視頻演示光碟一份,使用更直觀,學習更高效,對於入門級的學習非常有利。

好消息:從2008年5月8日起,凡購買單片機學習全套餐D的用戶,特別贈送價值36元的《單片機快速入門》配套教程一本,以便配套學習使用。 關於贈送活動的更詳細情況請看這里--->>>

全套餐組合不僅可以滿足初學者的學慣用途,還可以供工廠、企業研發人員及電子愛好者做一些技術研究及開發, 有較高的性價比,自投放市場以來,受到了廣大用戶的好評與支持。

關於單片機學習全套餐C的配套的系列教學資料可以看網站首頁的「手把手教你學51單片機」欄目。

您也可以翻閱歷年來的《電子製作》雜志,我們刊登了系列連載教程,以便大家進行理論學習以及提高實踐動手能力。 歷年來有哪些期刊雜志有所介紹呢,原文及詳細情況您可以看這里--->>>點擊進入

點擊進入「單片機學習全套餐D」相關實驗視頻錄像系列--1在線觀看

點擊進入「單片機學習全套餐D」相關實驗視頻錄像系列--2在線觀看

單片機學習全套餐D主要部件實物照片:

單片機全套餐D所有部件圖片集
51單片機綜合學習系統主機

DS18B20溫度感測器
優質超薄型6121編碼紅外線遙控器

微型步進電機
200米無線收發模塊

AT89S51單片機晶元——程序燒寫使用
SST89E516模擬模塊——程序模擬使用

贈送的單片機視頻權威教程——DVD光碟
附帶的USB線、串口線、並口線

贈送的配套學習書本 點擊查看書本詳細資料-->>
精美光碟,含豐富的學習資料 點擊查看常式庫-->>

單片機學習全套餐D的精美彩色外包裝盒,質量、品質的實力體現!

全套餐C與全套餐D的區別在於:

全套餐D為最新設計的學習開發系統,將編程、模擬、實驗三者功能進行了整合,同時,可做實驗的資源與功能要比全套餐C多很多,如SPI匯流排、IIC匯流排、DS1302時鍾、AD模數轉換等實驗資源。全套餐C提供的紅外線遙控器為普通黑色的紅外線遙控器,全套餐D提供的為時尚超薄型紅外線遙控器,此外,對於購買全套餐D的用戶,本站特別加送清晰版VCD格式「51單片機綜合學習系統」實驗視頻演示光碟一份,該演示視頻光碟只適用於51單片機綜合學習系統。用戶可以根據自己的需求來選擇套餐進行學習,套餐C經濟些,便宜些,但其總體功能比套餐C少些,套餐D因為用的是51單片機綜合學習系統為硬體平台,免跳線設計,所以操作比較方便、簡單些。由於全套餐D的成本要高於全套餐C的成本,所以兩種套餐的售價會略有所不同,但從其功能性價比看,我們推薦用戶使用全套餐D來進行單片機學習,一般來說,足夠學習與開發使用了。

>>> 對於一些本站產品優勢以及受歡迎的原因,請點擊這里看

單片機學習全套餐C配套的書本教程,點擊此處進入了解詳細信息。

單片機學習全套餐D配套的書本教程,點擊此處進入了解詳細信息。

原文:

⑺ C51編譯器支持的存儲器類型有哪些

c51存儲器類型有bit
sbit
data
xdata
bdata
pdata
sfr
code等,可能不全面有遺漏
對應的物理存儲器是:
bit,即位數據:數據存儲器位定址區,即20h~2fh的范圍,共16個位元組,16*8=128個位,位地址00h~7fh,連續的。
sbit:特殊功能寄存器中的位數據:只有能夠被8整除的那些特殊功能寄存器中的各個位才能被稱為sbit,位地址80h~ffh,不連續的,間斷的。
data:數據區,對51為00h~7fh共128個位元組,對52為00h~ffh,共256個位元組,用mov定址,前128用直接定址或寄存器(r0~r7)定址,後128用r0、r1間接定址。
xdata:外部數據區,0000h~ffffh連續,用dptr間接定址(movx指令)
bdata:位定址去的位元組,20h~2fh
sfr:特殊功能寄存器(80h~ffh),直接定址
pdata:外部數據區,p2口保持數據,用r0r1間接定址(movx指令)
code:程序存儲器,用movc指令只讀

⑻ 說明幾種C51編譯器所能識別的存儲器類型可定址的存儲區域 DATA,BDATA,IDATA,PDA

空間名稱 地址范圍 說明
DATA D:00H~7FH 片內RAM直接定址區
BDATA D:20H~2FH 片內RAM位定址區
IDATA I:00H~FFH 片內RAM間接定址區
XDATA X:0000H~FFFFH 64KB常規片外RAM數據區
CODE C:0000H~FFFFH

⑼ Intel的編譯器有哪些

1、Intel 編譯支持 IA-32、Intel 64、Itanium 2、Intel Atom 處理器和某些非 Intel 的兼容處理器(例如某些 AMD 處理器)。開發人員應當檢查系統需求。適用於 IA-32 和 Intel 64 的 Intel C++ 編譯器的主要特點是自動向量化器,它能夠生成 SSE、SSE2 和 SSE3 的 SIMD 指令及其適用於 Intel 無線 MMX 和 MMX 2 的嵌入式變種。
2、Intel C++ Compiler 進一步支持 OpenMP 3.0 和適用於對稱多處理的自動並行化。藉助於 Cluster OpenMP 的附加能力,編譯器還可為分布存儲多處理根據 OpenMP 指示自動生成消息傳遞介面調用。
3、Intel C++ Compiler 可通過四種方式獲得,它分別是 Intel Parallel Studio、Intel C++ Compiler 專業版、Intel 編譯器套裝和 Intel Cluster Toolkit 編譯器版的一部分。該編譯器的最新發布是 Intel C++ Compiler 14.0 版本.

閱讀全文

與編譯器支持的存儲器相關的資料

熱點內容
程序員裝機必備的軟體 瀏覽:9
php微信第三方登錄demo 瀏覽:536
上海php工具開發源碼交付 瀏覽:790
哪裡有求購黃頁的源碼 瀏覽:194
商城礦機源碼礦場系統 瀏覽:195
單片機的led燈熄滅程序 瀏覽:222
洛陽python培訓 瀏覽:702
小鍵盤命令 瀏覽:192
單片機c語言返回主程序 瀏覽:816
dockerpythonweb 瀏覽:970
程序員演算法有多強 瀏覽:717
pythonworkbook模塊 瀏覽:245
什麼app能查醫生 瀏覽:175
輕量級的編程語言 瀏覽:338
程序員那麼可愛生孩子 瀏覽:432
後綴him3加密文件是什麼軟體 瀏覽:985
堅果隱藏app為什麼要140版本才能用 瀏覽:313
淘寶dns伺服器地址 瀏覽:259
領英轉型app哪個好用 瀏覽:943
壓縮軟體的圖標 瀏覽:97