




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、如何分配變量到指定的地址舉例:unsigned char temp_A0x00; /定義無符號變量temp_A,強(qiáng)制其地址為0x00unsigned char temp_B0x100; /定義無符號變量temp_B,強(qiáng)制其地址為0x100tiny unsigned char temp_C; /定義無符號變量temp_C,由編譯器自動在地址小于0x100的RAM中為其分配一個地址near unsigned char temp_D; /定義無符號變量temp_D,由編譯器自動在地址大于0xFF的RAM中為其分配一個地址另外也可以采用偽指令"pragma"將函數(shù)或者變量定義到指定
2、的section中,例如:#pragma section name / 將下面定義的未初始化變量定義到.name section中Unsigned char data1;Unsigned int data2;(任何需要定義在.name section中的變量)#pragma section / 返回到正常的section.注意:pragma偽指令可以用來定位函數(shù),初始化變量或者未初始化變量。這三者用不同的括號區(qū)分。(name):代碼name :未初始化變量name:初始化變量如何在COSMIC C文件中使用匯編語言在COSMIC C文件中使用匯編語言常見的方法有如下兩種:使用#asm #end
3、asm組合格式或_asm(""); 單行格式。舉例1:unsigned char temp_A;Void func1(void).#asmPUSH ALD A,(X)LD _temp_A,APOP A#endasm.注:在C嵌匯編環(huán)境下使用全局變量,要在該全局變量名稱前加下劃線"_"。舉例2:Void func1(void)._asm("rim");_asm("nop");.如何觀察RAM/FLASH/EEPROM的最終分配情況在Project->settings->linker選項頁中,將Catego
4、ry選為Output,再勾選Generate Map File。 點(diǎn)擊OK按鍵后,再次編譯鏈接該項目,如果成功則會在項目輸出目錄中(本例是在C:STM8_NewProject1debug 目錄下)生成 .map 文件。該文件詳細(xì)地列出RAM/FLASH/EEPROM的分配使用情況。如何生成hex格式的輸出文件在Project->settings->PostBuild選項頁中,在commands欄內(nèi)加入下行命令:chex fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8再次編譯鏈接該項
5、目,如果成功則會在項目輸出目錄中(本例是在C:STM8_NewProject1debug 目錄下)生成 .hex 文件。什么是MEMORY MODELSTM8的C編譯器支持多種存儲器模式。用戶可以根據(jù)應(yīng)用的需要選擇最適合的配置??梢愿鶕?jù)需要選擇采用2個字節(jié)的尋址方式(僅適用于64k以內(nèi)的程序)或者3字節(jié)的尋址方式。也可以規(guī)定將變量默認(rèn)為定義在存儲器的哪一區(qū)域:zero page內(nèi),還是zero page 外。下面對幾種供選擇的MEMORY MODEL做簡單說明。在Project->settings->C Complier選項頁中,將Category選為General,里面有一個Me
6、mory Models選項欄如下: 在下拉菜單中共有4種MEMORY MODEL可供選擇:· 程序地址空間在64K以內(nèi)(即程序容量小于32K)mods0,modsl0· 程序地址哦那個鍵在64K以上(即程序容量大于32K)modsmodsl MODS0MODSL0MODSMODSL名稱Stack Short短堆棧模式Stack Long長堆棧模式Stack Short短堆棧模式Stack Long長堆棧模式程序地址空間程序所用到的地址空間在64K范圍內(nèi)程序所用到的地址空間超出64K范圍指針默認(rèn)類型函數(shù)指針和數(shù)據(jù)指針默認(rèn)為near (2 bytes)函數(shù)指
7、針默認(rèn)為far(地址為3字節(jié));數(shù)據(jù)指針默認(rèn)為near全局變量默認(rèn)類型所有全局變量的地址默認(rèn)為1個字節(jié)。對于地址超出1個字節(jié)的變量,必須用near定義所有全局變量默認(rèn)為Long型。若要將變量地址定義為1個字節(jié),必須用tiny定義所有全局變量的地址默認(rèn)為1個字節(jié)。對于地址超出1個字節(jié)的變量,必須用near定義所有全局變量默認(rèn)為Long型。若要將變量地址定義為1個字節(jié),必須用tiny定義.lkf 文件的作用.lkf文件在程序鏈接時決定如何具體分配RAM/ROM的空間。在Project Settings Linker Category(Input)選項頁中,當(dāng)"Auto"選擇框被
8、選中時,由系統(tǒng)自動生成.LKF文件,否則由用戶指定。 當(dāng)"Auto"選擇框被勾選時,.lkf文件會自動生成在項目主目錄下的 debug/ 和 release/ 目錄中。下面以上圖所示 at45DBXX Project的 lkf 文件為例,來進(jìn)一步理解.lkf 。在.lkf中,以"#"開頭的行是注釋行,為方便用戶理解,將原注釋刪除,代之以中文注釋如下:# 定義(+seg)一個常量段(.const),開始(b)于0x8080,最大分配(m)0x1ff80個字節(jié)(即不超過# 0x27FFF),為該段起名(n)為.const(和常量段的保留字同名),需
9、要初始化的變量的初始值存# 放于此段(-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個字節(jié)(即不超#過0x47FF),為該段起名(n)為. eeprom (和EEPROM段的保留字同
10、名)。+seg .eeprom -b 0x4000 -m 0x800 -n .eeprom# .bsct段服務(wù)于定義在0頁(地址小于0x100)以內(nèi)需要初始化的全局變量(如tiny char a = 9;)+seg .bsct -b 0x0 -m 0x100 -n .bsct# .ubsct段服務(wù)于定義在0頁(地址小于0x100)以內(nèi)不需要初始化的全局變量(如tiny char b;)+seg .ubsct -a .bsct -n .ubsct # .bit表示位域段,定義后即可在程序中使用_Bool變量(如_Bool c = 1;),-id表示該段需要初始化。+seg .bit -
11、a .ubsct -n .bit -id# 這是ST7時代(STM8是基于ST7發(fā)展而來的)由于物理堆棧小,速度慢,使用內(nèi)存來模擬堆棧的變通手段。+seg .share -a .bit -n .share -is# .data段服務(wù)于定義在0頁(地址大于0xFF)以外需要初始化的全局變量(如near char d = 8;)+seg .data -b 0x100 -m 0x1300 -n .data# .bss段服務(wù)于定義在0頁(地址大于0xFF)以內(nèi)不需要初始化的全局變量(如 near char e;)+seg .bss -a .data -n .bss# 段定義結(jié)束,下面放置的庫及Obj文
12、件中的變量、常量、程序就按照上面的規(guī)定進(jìn)行分配。#初始化程序crtsi0.sm8#用戶程序Debugmain.o# 一些必要的cosmic庫libis0.sm8libm0.sm8# 重定義常量段,開始于0x8000,用于放置中斷向量表(STM8硬件決定此位置)# k 用于程序冗余代碼優(yōu)化,詳情可參考cosmic用戶手冊。+seg .const -b 0x8000 k# 中斷向量Debugstm8_interrupt_vector.o#定義了三個變量,用于系統(tǒng)初始化+def _endzp=.ubsct # end of uninitialized zpage+def _memory=.bss #
13、 end of bss segment+def _stack=0x17ff # 不同的芯片_stack內(nèi)容不同,由系統(tǒng)自動生成如何實(shí)現(xiàn)位操作Cosmic C 編譯器支持位變量的操作,可以將其定義成 _Bool類型。_Bool類型的變量只包含兩種值true(1)或者false(0)。若將一個表達(dá)式賦值給_Bool變量,則編譯器會將表達(dá)式與0做比較,然后將布爾值賦給_Bool變量。因此,任何整型或者表達(dá)式的值都可以賦給_Bool變量。但是,布爾變量不能定義位數(shù)組,只能定義成結(jié)構(gòu)體或者聯(lián)合。而且,_Bool變量會被打包成字節(jié)的形式。編譯器會將所有的全局_Bool變量打包成字節(jié)形式,存放在.bit s
14、ection中。局部_Bool變量也會被打包成字節(jié)形式。但是_Bool類型的參數(shù)會被擴(kuò)展成一個單字節(jié)。具體的關(guān)于位變量的定義和使用可參考如下例子:定義位變量:_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 Debugexample.lkf:1 no default placement for segment .bitThe command: "clnk -l"C:Program FilesCOSMICCXSTM8_16K_Lib" -o Debugexample.sm8 -mDebugexample.map -
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨物運(yùn)輸合同(水路)
- 醫(yī)療行業(yè)人才引進(jìn)合同
- 房地產(chǎn)開發(fā)商與購房者合同大全
- 勞動用工安全責(zé)任合同模板:應(yīng)對與處理
- 地區(qū)授權(quán)代理合同書
- 基礎(chǔ)設(shè)施建設(shè)項目土地征用合同
- 房地產(chǎn) -鏈家地產(chǎn) 二手房業(yè)務(wù)知識與經(jīng)驗介紹
- 安全責(zé)任的落實(shí)強(qiáng)化企業(yè)安全主體責(zé)任考核試卷
- 攝影器材行業(yè)知識產(chǎn)權(quán)保護(hù)與合規(guī)經(jīng)營策略研究考核試卷
- 數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)考核試卷
- 統(tǒng)計學(xué)主要計算公式21098
- 品質(zhì)控制計劃(QC工程圖)
- DB15T 1193-2017 城市供水行業(yè)反恐怖防范要求
- 汽車營銷學(xué)(全套課件)
- 現(xiàn)澆墩臺身軸線偏位、全高豎直度檢測記錄表
- 激光共聚焦顯微鏡校準(zhǔn)規(guī)范編制說明
- 靜脈竇血栓(共56張)課件
- 樓板配筋計算表格(自動版)
- GB∕T 1348-2019 球墨鑄鐵件-行業(yè)標(biāo)準(zhǔn)
- 2022年人教版小學(xué)數(shù)學(xué)四年級下冊教案全冊
- 2022年三角函數(shù)和弦與曲式結(jié)構(gòu)
評論
0/150
提交評論