|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
[轉(zhuǎn)貼]HC08 C語(yǔ)言程序設(shè)計(jì)(5) |
| 作者:JerryBJ 欄目:單片機(jī) |
周末在www.mcu123.com上讀到劉玉宏同志的這篇文章,覺(jué)得寫(xiě)得很好,基本上涵蓋了使用C語(yǔ)言對(duì)HC(S)08微控制器編程的基本知識(shí),推薦給大家。把這篇文章轉(zhuǎn)貼過(guò)來(lái),沒(méi)有經(jīng)過(guò)原文作者和MCU123的允許,希望他們不會(huì)生氣。若作者和MCU123對(duì)此感到不適,請(qǐng)即告知,我們立刻刪除此轉(zhuǎn)貼。原文鏈接如下: http://www.mcu123.com/news/Article/uc/Motorola/200608/256.html 到此帖完,歡迎大家討論! HCS08返回值:函數(shù)返回值總是在寄存器中,根據(jù)返回值的類型不同,而采用不同的寄存器 返回值類型 寄存器 CHAR (signed 或 unsigned) A int (signed 或 unsigned) H:X pointers/arrays(指針/數(shù)組) H:X function pointers(函數(shù)指針) H:X 如果返回值的長(zhǎng)度超過(guò)2字節(jié),則在H:X存放返回值的地址。 例如:寫(xiě)一段C語(yǔ)言源程序,然后把它編譯為匯編語(yǔ)言,觀察調(diào)用規(guī)則 #include <hidef.h> /* 為了包含中斷允許宏定義*/ #include <MC68HC908GP32.h> unsigned CHAR r; unsigned CHAR f1(unsigned CHAR v1,unsigned CHAR v2,unsigned CHAR v3,unsigned CHAR v4) { v1+=1; v2+=1; v3+=1; v4+=1; return(v4); } void f0(void) { r=f1(4,9,6,3); } void main(void) { EnableInterrupts; /*中斷允許 */ f0(); for(;;) { __RESET_WATCHDOG(); /* 喂狗 */ } } 在C語(yǔ)言源程序中f0函數(shù)調(diào)用f1函數(shù),傳遞參數(shù)并有返回值 函數(shù)f1編譯后的匯編語(yǔ)言 PSHA ; 有參數(shù)用X、A傳遞,入棧保存防止破壞 PSHX TSX ; X=SP+1 INC 5,X ; v1+=1,參數(shù)v1在sp+6處 INC 4,X ; v2+=1; 參數(shù)v2在sp+5處 INC 1,X ; v3+=1; 參數(shù)v3在A中,被本函數(shù)入棧 INC ,X ; v4+=1; 參數(shù)v4在X中,被本函數(shù)入棧 LDA ,X ; return(v4);返回值在A中 AIS #2 ; 調(diào)整堆棧指針,指向返回地址 RTS ; 返回f0函數(shù) 函數(shù)f0編譯后的匯編語(yǔ)言 LDA #4 PSHA ; 參數(shù)v1入棧 LDA #9 PSHA ; 參數(shù)v2入棧 LDA #6 ; 參數(shù)v3用A傳遞 LDX #3 ; 參數(shù)v4用X傳遞 BSR f1 ; 調(diào)用函數(shù)f1 AIS #2 ; 清除傳遞的參數(shù) STA r ; 保存返回值 RTS ; 返回main函數(shù) Main函數(shù)編譯后的匯編語(yǔ)言 CLI BSR f0 L3: STA _COPCTL BRA L3 只要遵循以上調(diào)用規(guī)則,就可以實(shí)現(xiàn)用C函數(shù)和匯編函數(shù)的相互調(diào)用。調(diào)用時(shí)使用對(duì)方定義的函數(shù)名。 16.2.5啟動(dòng)代碼 在啟動(dòng)main函數(shù)之前HCS08 C 語(yǔ)言會(huì)自動(dòng)運(yùn)行一段啟動(dòng)代碼,進(jìn)行硬件初始化和建立C語(yǔ)言的運(yùn)行環(huán)境。起動(dòng)代碼一般由編譯器自動(dòng)生成,也可以由用戶自寫(xiě)的啟動(dòng)代碼替代自動(dòng)生成的啟動(dòng)代碼。啟動(dòng)代碼的名字為start08.c,它的主要工作是: l 禁止中斷 l 從ROM到RAM復(fù)制并初始化數(shù)據(jù) l 未初始化的數(shù)據(jù)區(qū)域清零 l 為堆棧分配并初始化堆棧 l 如果用到堆,創(chuàng)建并初始化堆 l 允許中斷 l 調(diào)用main()函數(shù) |
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |