




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 如何分配變量到指定的地址 舉例: unsigned char temp_A0x00; /定義無符號(hào)變量temp_A,強(qiáng)制其地址為0x00 unsigned char temp_B0x100; /定義無符號(hào)變量temp_B,強(qiáng)制其地址為0x100 tiny unsigned char temp_C; /定義無符號(hào)變量temp_C,由編譯器自動(dòng)在地址小于0x100的RAM中為其分配一個(gè)地址 near unsigned char temp_D; /定義無符號(hào)變量temp_D,由編譯器自動(dòng)在地址大于0xFF的RAM中為其分配一個(gè)地址 另外也可以采用偽指令pragma將函數(shù)或者變量定義到指定的sect
2、ion中,例如: #pragma section name / 將下面定義的未初始化變量定義到.name section中 Unsigned char data1; Unsigned int data2; (任何需要定義在.name section中的變量) #pragma section / 返回到正常的section. 注意:pragma偽指令可以用來定位函數(shù),初始化變量或者未初始化變量。這三者用不同的括號(hào)區(qū)分。 (name):代碼 name :未初始化變量 name:初始化變量 如何在COSMIC C文件中使用匯編語言 在COSMIC C文件中使用匯編語言常見的方法有如下兩種:使用#as
3、m #endasm組合格式 或_asm(); 單行格式。 舉例1: unsigned char temp_A; Void func1(void) . #asm PUSH A LD A,(X) LD _temp_A,A POP A #endasm . 注:在C嵌匯編環(huán)境下使用全局變量,要在該全局變量名稱前加下劃線_。 舉例2: Void func1(void) . _asm(rim); _asm(nop); . 如何觀察RAM/FLASH/EEPROM的最終分配情況 在Project->settings->linker選項(xiàng)頁中,將Category選為Output,再勾選Generat
4、e Map File。 點(diǎn)擊OK按鍵后,再次編譯鏈接該項(xiàng)目,如果成功則會(huì)在項(xiàng)目輸出目錄中(本例是在C:STM8_NewProject1debug 目錄下)生成 .map 文件。該文件詳細(xì)地列出RAM/FLASH/EEPROM的分配使用情況。 如何生成hex格式的輸出文件 在Project->settings->PostBuild選項(xiàng)頁中,在commands欄內(nèi)加入下行命令: chex fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8 再次編譯鏈接該項(xiàng)目,如果成功則會(huì)在項(xiàng)目輸出目錄中(本例是在C
5、:STM8_NewProject1debug 目錄下)生成 .hex 文件。 什么是MEMORY MODEL STM8的C編譯器支持多種存儲(chǔ)器模式。用戶可以根據(jù)應(yīng)用的需要選擇最適合的配置??梢愿鶕?jù)需要選擇采用2個(gè)字節(jié)的尋址方式(僅適用于64k以內(nèi)的程序)或者3字節(jié)的尋址方式。也可以規(guī)定將變量默認(rèn)為定義在存儲(chǔ)器的哪一區(qū)域:zero page內(nèi),還是zero page 外。下面對幾種供選擇的MEMORY MODEL做簡單說明。 在Project->settings->C Complier選項(xiàng)頁中,將Category選為General,里面有一個(gè)Memory Models選項(xiàng)欄如下: 在
6、下拉菜單中共有4種MEMORY MODEL可供選擇: ? 程序地址空間在64K以內(nèi)(即程序容量小于32K) mods0, modsl0 ? 程序地址哦那個(gè)鍵在64K以上(即程序容量大于32K) mods modsl MODS0 MODSL0 MODS MODSL 名稱 Stack Short 短堆棧模式 Stack Long 長堆棧模式 Stack Short 短堆棧模式 Stack Long 長堆棧模式 程序地址空間 程序所用到的地址空間在64K范圍內(nèi) 程序所用到的地址空間超出64K范圍 指針默認(rèn)類型 函數(shù)指針和數(shù)據(jù)指針默認(rèn)為near (2 bytes) 函數(shù)指針默認(rèn)為far(地址為3字節(jié))
7、; 數(shù)據(jù)指針默認(rèn)為near 全局變量默認(rèn)類型 所有全局變量的地址默認(rèn)為1個(gè)字節(jié)。對于地址超出1個(gè)字節(jié)的變量,必須用near定義 所有全局變量默認(rèn)為Long型。若要將變量地址定義為1個(gè)字節(jié),必須用tiny定義 所有全局變量的地址默認(rèn)為1個(gè)字節(jié)。對于地址超出1個(gè)字節(jié)的變量,必須用near定義 所有全局變量默認(rèn)Long型。若要將變量址定義為1個(gè)字節(jié),用tiny定義 .lkf 文件的作用 .lkf文件在程序鏈接時(shí)決定如何具體分配RAM/ROM的空間。在Project Settings Linker Category(Input)選項(xiàng)頁中,當(dāng)Auto選擇框被選中時(shí),由系統(tǒng)自動(dòng)生成.LKF文件,否 則由用
8、戶指定。 當(dāng)Auto選擇框被勾選時(shí),.lkf文件會(huì)自動(dòng)生成在項(xiàng)目主目錄下的 debug/ 和 release/ 目錄中。下面以上圖所示 at45DBXX Project的 lkf 文件為例,來進(jìn)一步理解.lkf 。 在.lkf中,以#開頭的行是注釋行,為方便用戶理解,將原注釋刪除,代之以中文注釋如下: # 定義(+seg)一個(gè)常量段(.const),開始(b)于0x8080,最大分配(m)0x1ff80個(gè)字節(jié)(即不超過 # 0x27FFF),為該段起名(n)為.const(和常量段的保留字同名),需要初始化的變量的初始值存 # 放于此段(-it) +seg .const -b 0x8080 -
9、m 0x1ff80 -n .const -it # 定義(+seg)一個(gè)程序段(.text),緊跟(-a)在.const段后面(和.const 共同位于0x8080 # 0x27FFF),為該段起名(n)為. text (和程序段的保留字同名)。 +seg .text -a .const -n .text # 定義(+seg)一個(gè)EEPROM段(.eeprom),開始(b)于0x4000,最大分配(m)0x800個(gè)字節(jié)(即不超 #過0x47FF),為該段起名(n)為. eeprom (和EEPROM段的保留字同名)。 +seg .eeprom -b 0x4000 -m 0x800 -n .ee
10、prom # .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 -a .ubsct -n .bit -id # 這是ST7時(shí)代(STM8是基于ST7
11、發(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文件中的變量、常量、程序就按照上面的規(guī)定進(jìn)行分配。 #初始化程序 cr
12、tsi0.sm8 #用戶程序 Debugmain.o # 一些必要的cosmic庫 libis0.sm8 libm0.sm8 # 重定義常量段,開始于0x8000,用于放置中斷向量表(STM8硬件決定此位置) # k 用于程序冗余代碼優(yōu)化,詳情可參考cosmic用戶手冊。 +seg .const -b 0x8000 k # 中斷向量 Debugstm8_interrupt_vector.o #定義了三個(gè)變量,用于系統(tǒng)初始化 +def _endzp=.ubsct # end of uninitialized zpage +def _memory=.bss # end of bss segment
13、 +def _stack=0x17ff # 不同的芯片_stack內(nèi)容不同,由系統(tǒng)自動(dòng)生成 如何實(shí)現(xiàn)位操作 Cosmic C 編譯器支持位變量的操作,可以將其定義成 _Bool類型。_Bool類型的變量只包含兩種值true(1)或者false(0)。若將一個(gè)表達(dá)式賦值給_Bool變量,則編譯器會(huì)將表達(dá)式與0做比較,然后將布爾值賦給_Bool變量。因此,任何整型或者表達(dá)式的值都可以賦給_Bool變量。但是,布爾變量不能定義位數(shù)組,只能定義成結(jié)構(gòu)體或者聯(lián)合。而且,_Bool變量會(huì)被打包成字節(jié)的形式。 編譯器會(huì)將所有的全局_Bool變量打包成字節(jié)形式,存放在.bit section中。局部_Bool
14、變量也會(huì)被打包成字節(jié)形式。但是_Bool類型的參數(shù)會(huì)被擴(kuò)展成一個(gè)單字節(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_ 在使用位變量時(shí),若程序編譯時(shí)提示如下錯(cuò)誤: #error clnk Debugexample.lkf:1 no default placement for segment .bit The command: clnk -lC:Program FilesCOSMICCXSTM8_16K_4.2.10Lib -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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 退役重武器測試題及答案
- 2023-2024學(xué)年山西省太原市迎澤區(qū)三年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 小黑子考試試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備高級(jí)技能押題練習(xí)試題A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能能力檢測試卷B卷附答案
- 2023年全國翻譯專業(yè)資格(水平)考試英語三級(jí)筆譯實(shí)務(wù)試題真題及答案
- 配電柜知識(shí)培訓(xùn)課件
- 卸妝膏護(hù)膚知識(shí)培訓(xùn)課件
- 小紅船讀后感
- 市場營銷策略制定服務(wù)協(xié)議
- 電氣安全安全管理程序
- 銷盤摩擦磨損試驗(yàn)機(jī)設(shè)計(jì)
- 長江流域氣候變化影響脆弱性和適應(yīng)性
- 《中國古代文學(xué)史——第四編:隋唐五代文學(xué)》PPT課件(完整版)
- 人教版數(shù)學(xué)八年級(jí)下冊全冊說課稿(PPT版)(共21張PPT)課件
- 政府采購法專題課件(PPT 33頁)
- 材料大課堂鈦合金(課堂PPT)
- NRC蛋雞飼養(yǎng)標(biāo)準(zhǔn)
- 項(xiàng)目總工崗位職責(zé)
- 最新-路面標(biāo)線技術(shù)交底
- 醫(yī)院卒中質(zhì)量控制考核方案
評論
0/150
提交評論